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 ...
随机推荐
- mediastream2使用指南(转载)
http://blog.sina.com.cn/s/blog_59d649610100diui.html 定义 Filter: 媒体库中处理数据的组件.一个filter有0到数个输入流和0到数个输出流 ...
- python-haproxy作业讲解视频总结
刚看完瞎驴的haproxy配置文件的作业讲解视频: 总结: 1.用户输入的字符串数据类型转换其他数据类型 1.1 eval('用户输入的数据') 1.2 json.loads('用户输入的数据') 2 ...
- vi编辑文件E437: terminal capability "cm" required 解决办法
E437: terminal capability "cm" required 这个错误一般是环境变量TERM没有配置或者配置错误所致. 解决办法: 执行export TERM=x ...
- corefile的设置与使用
一.简介 corefile是Linux下程序崩溃时生成的文件,可以用来分析程序崩溃的原因,因为它内部包含了程序崩溃时的堆栈信息. 二.corefile的设置 默认情况下,程序崩溃是不会生成corefi ...
- Selenium WebDriver + Python 环境配置
1. 下载必要工具及安装包 1.1.[Python开发环境] 下载并安装Python 2.7.x版本(当前支持2.x版本,不要下载最新的3.X的版本因为python3并非完全兼容python2) ...
- Eclipse常用快捷键windows
Ctrl+1:快速修正Ctrl+W: 关闭当前文件ctrl+O:打开outlineCtrl+D: 删除当前行 Ctrl+L: 定位在某行Ctrl+Q:转到上次修改位置Ctrl+/:注释代码Ctrl+H ...
- QQ邮箱
yourTEXThere
- UVA 10341 Solve It 二分
题目大意:给6个系数,问是否存在X使得等式成立 思路:二分.... #include <stdio.h> #include <math.h> #define EEE 2.718 ...
- oracle一列中的数据有多个手机号码用逗号隔开,我如何分别取出来?
ID NUMBER1 137xxxx,138xxxx取出来成ID NUMBER1 137xxxx1 138xxxx create table test (id int, phone varchar2( ...
- js对cookie的操作,包括增,取,删
在其他人都开会到时间里,我偷偷摸哦的试了一下cookie,唉,从来没有用过cookie,慢慢的知识忘光了,还好这次偷偷摸摸的做出来了,虚,大家都别出声啊 <!DOCTYPE html> & ...