Linux服务器热插拔硬盘后盘符从sdc变成sdn怎么改回来
十二块盘的 Linux 服务器,拔插了一块 sdc,再认出来变成了 sdn,后面的盘跟着整体往后挪了一位。看上去只是名字变了,真正的麻烦在后面:fstab 里写死的 /dev/sdc 挂载项、脚本里引用的 /dev/sde、备份配置里点名的设备,现在全部指向了别的盘。这时候头号危险的动作不是改名字,而是拿着旧名字继续操作——旧名字背后已经是另一块盘的数据。想不重启把局面收拾回来,得按顺序来。
先说为什么盘符会漂。sdc、sdn 这类名字是内核按「发现顺序」当场发的代号,不是盘的身份证。开机扫描的时序、热插拔的先后、硬盘控制器响应的快慢,都会影响谁排在前面。盘还是那块盘,分区和数据一分没动,变的只是代号。所以正解从来不是把内核里的名字硬掰回 sdc,而是让所有引用改用盘的固定身份(UUID、序列号、WWN),再给盘起一个不漂的别名。
处置四步。头一步先认盘再动手:lsblk -f 列出所有盘的 UUID、文件系统和挂载点,对照 fstab 和磁盘台账,逐块确认现在每个名字背后是哪块物理盘。盘符乱了之后,把变更做到错盘上就是头号风险,这一步省不得。第二步先恢复业务:把 /etc/fstab 里的 /dev/sdX 条目改成 UUID= 写法,mount -a 重新挂载。UUID 是格式化时生成的,盘符怎么漂它都不变,改完这一层,业务引用就稳了。第三步起稳定别名:在 /etc/udev/rules.d/ 下写一条规则,按序列号或 WWN 匹配设备,SYMLINK 出一个业务名(比如 /dev/data01),然后 udevadm control –reload-rules 重载规则、udevadm trigger 触发生效。之后脚本和配置一律引用这个别名,内核层的 sdc 还是 sdn 随它去——老一套 mknod 强改设备名的做法在现代系统里既没必要,还容易把自己绕进去。第四步验证:再模拟一次热插拔或重启一遍,lsblk 确认别名、挂载点、UUID 三样都对得上。带阵列卡或多路径的机器,用 multipath -ll 看 wwid 与映射名,或者用阵列卡自带工具按槽位定位,不要在操作系统层跟 sd 名字较劲。
预防记四条:新装机的 fstab 和应用配置从装机那天起就用 UUID 或别名引用,不写裸 sd 名;换盘扩容前,把每块盘的 WWN 与槽位记进台账再动;变更安排在业务低峰;热插拔后先 lsblk 对一遍再执行任何写操作。至于从装机那天起就把槽位和盘符绑死、让漂移根本不发生的做法,另篇专讲,两篇配合看。
贵州诚鑫致达科技做服务器换盘扩容,动手前都会把每块盘的 WWN 和槽位抄成一张小表带在手边——盘符会漂,这张表不会。