openEuler-22.03-LTS x86_64 OS盘符重启会改变

openEuler-22.03-LTS x86_64 OS盘符重启会改变

原文 openEuler-22.03-LTS x86_64 OS盘符重启会改变 · Issue #I6GAT7 · openEuler/oec-hardware - Gitee

盘符漂移的原因:

1、 linux系统分配SCSI磁盘的机制是:根据插槽号顺序扫描磁盘(异步),每个SCSI盘有15个分区盘符可分配。

2、linux系统启动时,盘符分配机制:SCSI驱动探测到SCSI盘时分配盘符,先完成扫描任务的磁盘先分配空闲盘符。如果有槽位没有插入SCSI盘,不会保留盘符。如果该槽位后续热插入磁盘,则往后分配盘符。

3、linux系统热插拔SCSI盘时,盘符分配机制:SCSI盘被热拔时,原来的槽位和盘符会被释放。后续再热插SCSI盘时,不管是哪个槽位,系统根据未分配的index,按顺序分配盘符(不会再使用被拔除的盘符)。

解决办法:

要解决磁盘盘符漂移问题,一劳永逸的方法就是将磁盘槽位与盘符名做绑定;添加磁盘绑定的补丁。如果只针对磁盘挂载问题,可通过按标签或UUID挂载的方式解决。

方案1:根据ID访问磁盘(/dev/disk/by-id)

适用于裸盘无文件系统场景

方案2:根据挂载路径访问磁盘(/dev/disk/by-path)

适用于磁盘插槽位置不变场景

方案3:根据文件系统UUID访问磁盘(/dev/disk/by-uuid)

适用于有文件系统场景
存在硬盘故障raid卡等异常,进行更换uuid会变化,导致不能进入系统或者业务受损
注意:使用dd等类似命令把某个分区的内容写到另外一个分区,两个分区会有相同的uuid

这里使用类似方案1的策略,但是使用了udev对磁盘进行别名映射

通过命令

ls -l /dev/disk/by-id

查看磁盘的serial id
scsi开头的序列号是磁盘的serial id
wwn开头的序列号是磁盘的world wide name

在/etc/udev/rules.d/目录下新建文件99-rules.rules添加以下内容

KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="3600000.......", ENV{DEVTYPE}=="disk", SYMLINK+="huawei/disk01", OWNER="root", GROUP="disk", MODE="0660"

完成后使用

udevadm trigger --type=devices --action=change

使配置生效

用别名测试磁盘读写

可以在fstab中使用/huawei/disk01代替sda,由于/huawei/disk01绑定了这张硬盘的serial id所以在发生漂移的情况下也不影响和盘符相关的业务、系统功能

2 个赞

您好,我看您文章中的解决办法解决了是否固定盘符访问的问题。请问是否有办法避免磁盘漂移?即无论重启多少次,sda 仍然为 sda.