Python:检查两个Linuxpath是否在同一个物理磁盘上

现在我使用os.stat(path).st_dev来获取设备ID。 但是对于同一个物理驱动器上的逻辑磁盘,id似乎是不同的。 所以它实际上并不适合我。 有没有更好的或直接的解决scheme呢。

外部驱动器盘符 – 备份

Linux只读分区的数据更改

如何做一个文件系统的tar备份?

最小的fat32分区

如何检查磁盘的分区在Linux中的脚本中使用?

看看十六进制输出。 0x前缀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. 次要编号编码驱动器编号以及分区 。 从这里也可以推断出,第一个磁盘上的所有分区都有一个介于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程序的十进制Device输出

$ 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 ),你可以阅读

st_dev字段描述了该文件所在的设备。 (主要(3)和次要(3)宏可能有助于分解此字段中的设备ID。)

这些宏不是由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 ,第一个磁盘,第一个分区)。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....