Python:检查两个Linux路径是否在同一物理磁盘上
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:检查两个Linux路径是否在同一物理磁盘上,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2324字,纯文字阅读大概需要4分钟。
内容图文
![Python:检查两个Linux路径是否在同一物理磁盘上](/upload/InfoBanner/zyjiaocheng/970/d49e1dabeed74d43969cd69775fb7403.jpg)
现在我使用os.stat(path).st_dev来获取设备ID.但是对于同一物理驱动器上的逻辑磁盘,id似乎不同.所以它实际上对我不起作用.是否有更好或直接的解决方案.
解决方法:
查看十六进制输出. 0x前缀后面的第一个数字表示设备驱动程序:
>>> hex(os.stat("/usr").st_dev)
'0x801L'
这是一个’SCSI’磁盘,因为它们都有ID 8.参考:https://www.kernel.org/doc/Documentation/devices.txt.驱动器ID和分区号在st_dev的剩余部分编码.
glibc实现的主要ID和次要ID的确切转换如下:
>>> minor = int(os.stat("/lib").st_dev & 0xff)
>>> major = int(os.stat("/lib").st_dev >> 8 & 0xff)
>>> major, minor
(8, 1)
含义主编号8(SCSI主机适配器),次编号1.次编号编码驱动器编号和分区.从here也可以推断,第一个磁盘上的所有分区都有1到15之间的次ID.第二个磁盘上的所有分区都有一个介于17和31之间的次ID,依此类推.
展示,相同的设备控制器(SCSI):
>>> int(os.stat("/lib").st_dev >> 8 & 0xff)
8
>>> int(os.stat("/usr").st_dev >> 8 & 0xff)
8
展示,不同的设备控制器(在这种情况下为NFS安装):
>>> int(os.stat("/home/*****").st_dev >> 8 & 0xff)
0
背景:
你得到了什么,例如
>>> os.stat("/usr").st_dev
2049L
对应于stat程序的十进制设备输出:
$stat /usr
File: `/usr'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 1308164 Links: 11
从man 2 stat(或例如http://linux.die.net/man/2/stat),您可以阅读
The st_dev field describes the device on which this file resides. (The
major(3) and minor(3) macros may be useful to decompose the device ID
in this field.)
这些宏不是由POSIX定义的,而是在glibc中实现的,如下所示:
https://github.com/jeremie-koenig/glibc/blob/master-beware-rebase/sysdeps/generic/sys/sysmacros.h
实际的C实现是:
#define major(dev) ((int)(((unsigned int) (dev) >> 8) & 0xff))
#define minor(dev) ((int)((dev) & 0xff))
这可以很容易地翻译成Python,就像我上面所做的那样.从这些宏开始,十六进制符号显然比十进制符号更直观:
>>> hex(os.stat("/usr").st_dev)
'0x801L'
从这里您可以看到8和1分别是主要设备ID和次要设备ID.我们也可以这样检查:
$pwd
/usr
$df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/disk/by-uuid/cba70a49-04a7-40a6-8a53-465f817e51cd 29G 8.6G 19G 32% /
这是磁盘,实际上对应于/ dev / sda1:
$ls -al /dev/disk/by-uuid/cba70a49-04a7-40a6-8a53-465f817e51cd
0 lrwxrwxrwx 1 root root 10 May 6 16:33 /dev/disk/by-uuid/cba70a49-04a7-40a6-8a53-465f817e51cd -> ../../sda1
主要ID 8( – > sd,SCSI设备),次要1( – > a1,第一个磁盘,第一个分区).
内容总结
以上是互联网集市为您收集整理的Python:检查两个Linux路径是否在同一物理磁盘上全部内容,希望文章能够帮你解决Python:检查两个Linux路径是否在同一物理磁盘上所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。