#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 磁盘操作的更多相关文章

  1. Linux - 磁盘操作

    Linux 磁盘常见操作 : df -Ph # 查看硬盘容量 df -T # 查看磁盘分区格式 df -i # 查看inode节点 如果inode用满后无法创建文件 du -h 目录 # 检测目录下所 ...

  2. linux iostat命令详解 磁盘操作监控工具

    Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视. 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况. ...

  3. linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例

    转自:truemylife.linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例 基本概念: 磁盘.分区.物理卷[物理部分] 卷组[中间部分] 逻辑卷.文件系统[虚拟化后可控制部分] 磁 ...

  4. Linux修复磁盘操作

    Linux修复磁盘操作 1.卸载分区 umount /data 修复磁盘,先判读是磁盘坏了,还是文件系统坏了:一般可以修复,但是建议换磁盘. 2.fsck  -y /dev/sda1  ##-y 参数 ...

  5. python通过SSH登陆linux并操作

    使用python通过SSH登陆linux并操作 用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的. 代码: > ...

  6. Linux磁盘分区fdisk命令操作(简洁版)

    实例(环境为: CentOS Linux release 7.2.1511 (Core), 3.10.0-327.el7.x86_64) 选择要具体操作的第二块磁盘(linux下一切是文件形式对应): ...

  7. Python文件基础操作(IO入门1)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6422270.html 本文出自:[Edwin博客园] Python文件基础操作(IO入门1) 1. pyth ...

  8. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  9. MySQL 调优基础(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

随机推荐

  1. Linux基本配置

    Linux发行版:centos 6.5 配置yum源 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -P /etc/yum.repos ...

  2. 编译android源码官方教程(3)下载代码

    https://source.android.com/source/downloading.html Downloading the Source IN THIS DOCUMENT Installin ...

  3. CSS3弹力球

    如下代码实现方块在限定区域内不停弹跳. <!DOCTYPE html> <html> <head> <style> div { width:100px; ...

  4. SQL Server小技巧【1】

    1.SQL防止修改数据时引起多用户并发,当一条数据被一个用户锁定的时候其他用户将无法修改,除非将其释放. UPDATE TABLENAME WITH(ROWLOCK) SET 字段='Value' W ...

  5. git bash下的选择、复制、粘贴

      1. 打开git bash     2.点击左上角,选择属性,打钩     3.回到界面,选择一行文字,然后点击 “右键”,这样就复制到剪切板了.再点 “右键”,可以粘贴到命令窗口中了.    

  6. FormsAuthentication.HashPasswordForStoringInConfigFile 方法 之研究

    摘自:http://time-is-life.cnblogs.com/articles/322523.html 给定标识哈希类型的密码和字符串,该例程产生一个适合存储在配置文件中的哈希密码. [C#] ...

  7. JQery 中的 $(".bb:eq(1)") eq () 解释。。

    这是一段代码: <div id="bb">a</div> <div id="bb">b</div> <di ...

  8. [poj3349]Snowflake Snow Snowflakes(hash)

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 37615 Accepted: ...

  9. iOS - File Archive/UnArchive 文件压缩/解压

    1.ZipArchive 方式 ZipArchive 只能对 zip 类文件进行压缩和解压缩 GitHub 网址:https://github.com/ZipArchive/ZipArchive Zi ...

  10. Redis基础知识之—— hset 和hsetnx 的区别

    命令参数:HSET key field valueHSETNX key field value 作用区别:HSET 将哈希表 key 中的域 field 的值设为 value .如果 key 不存在, ...