python linux 磁盘操作
#coding:utf-8
'''
__author__ = 'similarface'
connection:841196883@qq.com
磁盘操作
'''
import psutil
import os
import commands
import logging
import re
logger = logging.getLogger('Disk')
logger.setLevel(logging.ERROR)
ch = logging.StreamHandler()
# 定义handler的输出格式formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
from collections import defaultdict
class Disk: def getDiskSize(self,part):
'''
获取磁盘分区使用信息
'''
return psutil.disk_usage(part) def getAllCanUseUUID(self):
'''
获取所有可用磁盘的UUID
'''
allcanuse=[]
canusepart=self.getAllCanUseDiskPart()
for part in canusepart:
allcanuse.append(self.getUUIDbyPartName(part))
return allcanuse def getMountStatus(self):
'''
sdiskpart(device='/dev/sda3', mountpoint='/', fstype='ext4', opts='rw'),
...
sdiskpart(device='/dev/sde1', mountpoint='/data3', fstype='ext4', opts='rw')]
:return:
'''
psutil.disk_partitions() def getMountPartList(self):
'''
获取挂载了的磁盘的NAME
:return:
'''
partlist=[]
try:
for item in psutil.disk_partitions():
partlist.append(item.device)
return partlist
except Exception,e:
return partlist def getMountUUID(self):
'''
获取挂载了的磁盘的UUID
:return:
'''
mountuuidlist=[]
for part in self.getMountPartList():
mountuuidlist.append(self.getUUIDbyPartName(part))
return mountuuidlist def getNoMountDisk(self):
'''
获取没有挂载的磁盘
实现方法:
所有的UUID-挂载了的UUID
:return:
'''
#所有的UUID
ALLUUID=self.getAllCanUseUUID()
#挂载了的UUID
MOUNTUUID=self.getMountUUID()
logger.info(ALLUUID)
logger.info(MOUNTUUID)
return list(set(ALLUUID)-set(MOUNTUUID)) def getPartListNameByUUIDList(self,uuidlist):
'''
根据uuidlist获取partlist
:param uuidlist:
:return:
'''
partlist=[]
for uuid in uuidlist:
partlist.append(self.getPartNameByUUID(uuid))
return partlist def getPartNameByUUID(self,uuid):
'''
根据UUID 获取partname
:param uuid:
:return: part name
'''
logger.info(uuid)
return self.getUUIDPartNameMap()[uuid] def getAllCanUseDiskPart(self):
'''
获取所有可用的磁盘的分区名称
:return:
'''
command_str="cat /proc/partitions"
#可用分区
partcanuserlist=[]
try:
status, result=commands.getstatusoutput(command_str)
if status==0:
rereobj = re.compile('\s*')
for item in result.split('\n'):
if not item.startswith("major") and item.strip():
major, minor, blocks,name=rereobj.split(item.strip())
if self.isCanUserPart(major, minor, blocks):
partcanuserlist.append('/dev/'+name)
return partcanuserlist
else:
return partcanuserlist
except Exception,e:
logger.error(e)
return partcanuserlist def isCanUserPart(self,major, minor, blocks):
'''
该分区是否可用
算法:设备8 子计数 块大于204800
:param itemlist:['major', 'minor', '#blocks', 'name']
:return:是否可用
'''
try:
if int(major)==8 and int(minor)%2==1 and int(blocks)>1:
return True
else:
return False
except Exception,e:
return False def get(self): psutil.disk_partitions() def getUUIDPartNameMap(self):
'''
获取UUID 和 分区名的对应关系
key:UUID
value:partname
:return:
'''
uuidpartmap={}
command_str="ls /dev/disk/by-uuid/ -l|grep -v \"total\"|awk '{ print $9,\"/dev\"substr($11,6,5) }'"
try:
status, result=commands.getstatusoutput(command_str)
if status==0:
for item in result.split('\n'):
uuid,parted=item.split(' ')
uuidpartmap[uuid]=parted
logger.info(uuidpartmap)
return uuidpartmap
else:
logger.error(result)
return uuidpartmap
except Exception,e:
logger.error(e)
return uuidpartmap def getUUIDbyPartName(self,part):
'''
根据分区名获取分区的UUID
:param part:
:return:该分区对应的UUID
'''
command_str='blkid '+part
try:
logger.info(command_str)
status, result=commands.getstatusoutput(command_str)
if status==0:
logger.debug("result:")
logger.debug(result)
for item in result.strip().split(' '):
if item.startswith("UUID"):
logger.debug(item)
return item.split('=')[1].replace('"','')
else:
return None
except Exception,e:
print(e)
return None def getPartUUIDNameMap(self):
'''
key:Part
value:UUID
:return:分区-UUID 的字典
'''
uuidpartmap=defaultdict(str)
command_str="ls /dev/disk/by-uuid/ -l|grep -v \"total\"|awk '{ print $9,\"/dev\"substr($11,6,5) }'"
try:
status, result=commands.getstatusoutput(command_str)
if status==0:
for item in result.split('\n'):
uuid,parted=item.split(' ')
uuidpartmap[parted]=uuid
return uuidpartmap
else:
logger.error(result)
return uuidpartmap
except Exception,e:
logger.error(e)
return uuidpartmap if __name__=='__main__':
a=Disk()
#打印没有挂载的磁盘的分区名称
print(a.getPartNameByUUID(a.getNoMountDisk()[0]))
python linux 磁盘操作的更多相关文章
- Linux - 磁盘操作
Linux 磁盘常见操作 : df -Ph # 查看硬盘容量 df -T # 查看磁盘分区格式 df -i # 查看inode节点 如果inode用满后无法创建文件 du -h 目录 # 检测目录下所 ...
- linux iostat命令详解 磁盘操作监控工具
Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视. 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况. ...
- linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例
转自:truemylife.linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例 基本概念: 磁盘.分区.物理卷[物理部分] 卷组[中间部分] 逻辑卷.文件系统[虚拟化后可控制部分] 磁 ...
- Linux修复磁盘操作
Linux修复磁盘操作 1.卸载分区 umount /data 修复磁盘,先判读是磁盘坏了,还是文件系统坏了:一般可以修复,但是建议换磁盘. 2.fsck -y /dev/sda1 ##-y 参数 ...
- python通过SSH登陆linux并操作
使用python通过SSH登陆linux并操作 用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的. 代码: > ...
- Linux磁盘分区fdisk命令操作(简洁版)
实例(环境为: CentOS Linux release 7.2.1511 (Core), 3.10.0-327.el7.x86_64) 选择要具体操作的第二块磁盘(linux下一切是文件形式对应): ...
- Python文件基础操作(IO入门1)
转载请标明出处: http://www.cnblogs.com/why168888/p/6422270.html 本文出自:[Edwin博客园] Python文件基础操作(IO入门1) 1. pyth ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- MySQL 调优基础(四) Linux 磁盘IO
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
随机推荐
- 2016年11月21日 星期一 --出埃及记 Exodus 20:12
2016年11月21日 星期一 --出埃及记 Exodus 20:12 "Honor your father and your mother, so that you may live lo ...
- SSH配置私钥登陆服务器
前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题, ...
- Ajax 用法
Ajax 用法 var total=100; var orderName='sssss'; var orderDescrib='dddd ...
- 方法参数out
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace _050505 ...
- RabbitMQ术语
工作队列:Working Queue 分配:多个客户端接收同一个Queue,如何做负载均衡(分配). Round-robin分配:多个接收端接收同一个Queue时,采用了Round-robin ...
- H5网站借鉴
http://www.rdinfo.com.cn/index.shtml http://www.winployee.com/ http://www.lkkdesign.com/ http://www. ...
- 利用jdbc处理oracle大数据---大文件和二进制文件
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- 【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)
GameObjectFindTransformFind查找游戏对象 前置条件 相关API 1 GameObjectFind 2 TransformFind 3 其他查找 实际测试 即使隐藏root节点 ...
- 关于MySQL数据库如何按时间查询
这里做了几个测试 select * from simingpai where TIMESTAMP(createTime) >= '2015-9-6'; select * from simingp ...
- OB命令大全
CALC : 判断表达式 WATCH : 添加监视表达式 AT : 在指定地址进行反汇编 FOLLOW : 跟随命令 ORIG : ...