重启后设备号可以更改吗?

重启后设备号可以更改吗?

我正在建造一项服务检查块设备上文件的唯一性。系统上文件的唯一性似乎可以通过一对来保证(st_dev, st_ino),其中st_dev是设备号,st_ino是 inode 号。这些值直接来自统计系统调用。但是,我找不到任何关于分区的设备号是否实际上是持久的参考。换句话说,如果我卸载/安装分区,或者重新启动系统,分区的设备号是否会更改?

答案1

是的,块设备的设备号可以更改:这些是在系统启动时动态分配的。添加和删​​除设备(有时甚至更改 BIOS 固件)可能会导致以不同的顺序发现事物,从而具有不同的设备 ID。

如果您想唯一标识一个文件系统,请使用文件系统 UUID(例如可以通过命令获得blkid)。

使用 inode 作为标识符也可能会出现问题,具体取决于您要执行的操作:例如,由于硬链接,单个文件可能存在于具有相同 inode 的多个位置,并且可以为新文件回收 inode当它们最初关联的文件被删除时。

答案2

是的,他们可以改变,但他们并不执着。举一个简单的例子 - 安装两个网络驱动器,然后以不同的顺序安装它们。

st_dev由两部分组成:设备类别和该类别中的设备编号。设备类是在安装设备时学习的(基本上就是安装设备的方式)。但类中的数量是由安装顺序定义的。

当然,如果您正在谈论从 fstab 挂载的设备 - 此命令可能是可靠的...直到您修改 fstab。

寻找makedev(3)如何分解st_dev

相关内容