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 ...
随机推荐
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
- ExecutorService - 10个技巧和窍门
ExecutorService已经成为Java并发编程中常用的基础库,几乎所有到线程 任务等执行都要委托ExecutorService.下面是使用过程中10个技巧和窍门. 1.为线程池和线程取名 当我 ...
- SqlSever基础 datepart 获取一个日期的年份
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- Cheatsheet: 2015 01.01~ 01.31
JAVA JVM Architecture Improving Lock Performance in Java 10 Best Java Tools That Every Java Programm ...
- oracle数据库中提供的5种约束
约束作用:用来保持数据的完整性,防止无效数据进入到数据库中.oracle数据库中提供的5种约束,都是限定某个列或者列的组合的.1.主键约束(PRIMARY KEY):在一个表中能唯一的标识一行.主键可 ...
- netstat -ano,查看已占用端口,结束已被占用的端口,ntsd,关闭任务管理器杀不了的进程
cmd——回车,输入netstat -ano——回车,可以查看已占用的端口,记下端口的PID,然后打开任务管理器,点查看,选择列,勾选PID确定,找到对应的PID,结束进程,如果结束不了或者结束后还不 ...
- log4j的使用(1) —— 简单入门篇
这里会介绍三种打印日志的方法:控制台Console,文件File,数据库DataBase 1.下载lo4j的jar包并导入project 2.因为要在数据库添加日志,所以先新建一个库,并新建打印日志的 ...
- Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理
如今的系统多不是孤军奋战,在多结点会话共享管理方面有着各自的解决办法,比如Session粘连,基于Web容器的各种处理等或者类似本文说的完全接管Web容器的Session管理,只是做法不尽相同. 而本 ...
- h5上滑刷新(分页)
$('.dom').append('<div class="loadingwrap" id="loading" style="display:n ...
- react入门笔记
this.props.children是任何内嵌的元素 利用ref属性给子组件命名,this.refs引用组件,getDOMNode()获取本地的DOM元素,如: this.refs.author.g ...