在Linux系统中,如果有多个硬盘,则内核分配驱动器号的顺序通常是/ dev / sda,/ dev / sdb,/ dev / sdc ...
在系统启动期间,内核将按照扫描顺序将驱动器号分配给硬盘。
系统启动后,热插拔硬盘驱动器,系统将按顺序分配驱动器号。在同一硬盘插槽中,每次插入硬盘时,系统中的驱动器号可能会不一致。第一次插入时,驱动器号可能是/ dev / sdb。卸下硬盘并再次插入硬盘驱动器后,驱动器号可能会更改为/ dev / sde,并且会发生驱动器号漂移。
假设计算机上有6个硬盘插槽,则插槽号为0〜5。其中,1、 2、 5插槽有一块硬盘,然后在Linux系统之后
x 0
√2
x 4
√1
x 3
√5
获取的系统驱动器号对应为:1号槽位的硬盘号为/ dev / sdb,2号槽位的硬盘号为/ dev / sdb,3号槽位的硬盘号为/ dev / sdc
x 0
sdb2
x 4
sda1
x 3
sdc5
系统启动后,我们热插拔硬盘并将硬盘插入插槽3中,那么硬盘的驱动器号为/ dev / sdd。
x 0
sdb2
x 4
sda1
sdd3
sdc5
分别将硬盘插入插槽0和4,然后系统驱动器号为:
sde0
sdb2
sdf4
sda1
sdd3
sdc5
从上面可以看到,Linux分配给硬盘的驱动器号与插槽无关,仅与插入顺序无关。
同时,即使在同一插槽中的硬盘驱动器号也会漂移。例如,当系统中的某个进程正在读写磁盘/ dev / sdd时,如果我们此时拔出硬盘并在以后插入硬盘,则此时获得的驱动器号可能是/ dev / sdg,而不是所需的/ dev / sdd。
sde0
sdb2
sdf4
sda1
sdg3
sdc5
驱动器字母漂移现象给用户带来极大的不便,尤其是使用裸露设备的用户。
有两种解决方案:
1.用户模式,企业编写脚本以实现绑定;
解决方案一
对于以下所示的fstab,系统启动时,它将自动执行每一行mount操作,将/ dev / sda装载到/ data / disk1,依此类推。如果磁盘是热插拔的,并且第一个磁盘的驱动器号从/ dev / sda更改为/ dev / sdc,则fstab无法正确安装第一个磁盘。
1
/ dev / sda / data / disk1 ext4默认值,noatime 0 0
/ dev / sdb / data / disk2 ext4默认值,noatime 0 0
为了确保在驱动器号漂移时仍可以正常安装磁盘,请首先对fstab进行以下改进,然后根据磁盘标签进行安装;例如,第一行的意思是将标记为disk1的磁盘安装到/ data / disk1。
LABEL = disk1 / data / disk1 ext4默认值,noatime 0 0
LABEL = disk2 / data / disk2 ext4默认值,noatime 0 0
下一个问题是如何为磁盘设置标签。对于ext系列文件系统,可以通过e * label设置标签。您还可以在格式化磁盘时设置标签。
mke4fs / dev / sda -L disk1
或mke4fs / dev / sda; e4label / dev / sda disk1
完成上述设置后,磁盘/ dev / sda的标签为disk1。即使该磁盘的驱动器号已更改,也要在fstab中将磁盘1标记为disk的磁盘挂载,即,挂载/ dev / sda,因为该标签未更改,并且fstab也可以正确地挂载该磁盘;由mke4fs或e4label设置的标签实际上已绑定到文件系统,并且是文件系统超级块的一部分,可以通过tune4fs进行查询。
方案二
设置标签后,如果重新格式化磁盘上的文件系统,则原来设置的标签将不再存在。这就是标签机制不足的地方。如果要解决此问题,可以使用In fstab,根据UUID装入磁盘。磁盘的UUID不变,无论驱动器号或标签是否更改。但是,使用UUID的缺点是它不灵活并且不利于部署。
1
UUID = 356fdf58-6923-43d5-9a09-349159c7c8a6 / data / disk1 ext4默认值,noatime 0 0
UUID = 3b93fbad-bea2-4cbb-9a76-b4885924d287 / data / disk1 ext4默认值,noatime 0 0
2.内核模式,修改内核和驱动程序以实现驱动器号绑定,用户模式不需要做任何操作; (这涉及到磁盘驱动器的修改,有必要促使硬件制造商跟进,这比较困难)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-313206-1.html