云服务器盘符跳变:fstab用UUID挂载避免启动失败
前言
2020-03-28 碰到一个云服务器的问题:/dev/sdd 盘符跳变成了 /dev/sde,因为 fstab 里还写着旧设备名还带启动检查,直接导致服务器重启失败。记录下处理过程和以后的挂载规范。
1、事故经过
出问题的 fstab 长这样:
|
|
问题出在 /dev/sdd:原来这块盘有 1T,fstab 里按设备名挂载到 /dbbackup,而且最后两个参数是 1 1(开机 fsck 检查)。后来扩容新加了一块 500G 的盘,云平台重新分配设备名时,新盘占了 sdd 的位置,原 sdd 顺移成了 sde——fstab 里写的 /dev/sdd 现在指向的是新盘,挂载失败、fsck 检查也失败,重启直接卡死进不了系统。
2、处理
两个改动:
1、挂载路径不用 /dev/sdX 设备名,改用 UUID 或 lvm
设备名是云平台分配的,扩容、卸载重挂都可能变化;UUID 是文件系统生成时固定的,不会跳变。查询 UUID 用 blkid:
|
|
fstab 里改成:
|
|
多块盘的场景更建议直接上 LVM(像上面 /data 用的 /dev/mapper/VolGroup-lv_mysql),后续扩容也只是加 PV 扩 LV,不存在盘符问题。
2、非启动必须的挂载目录,最后一列的检查参数用 0 0
fstab 最后两个字段的含义:倒数第二个 1 1 中的 1 表示开机 dump 备份,最后一个表示开机 fsck 检查顺序(根分区必须 1,其他 2,不检查 0)。数据盘不是系统启动的必需依赖,设成 0 0,就算盘有问题也只是挂不上,不会卡住整个开机流程。
另外顺手确认了 SELinux 是 disabled——生产环境如果不是必须用 SELinux,关掉能少很多权限类怪问题。
3、以后的挂载规范
- 云盘挂载一律写 UUID(
blkid查询)或走 LVM,永远不写/dev/sdX - 数据盘 fstab 最后两位用
0 0,只有根分区保留1 1 - 改完 fstab 别急着重启,先
mount -a验证一遍没报错,再执行重启
总结
设备名是会变的,UUID 不会。这次幸好是能挂控制台救援模式的时代,改一行 fstab 就救回来了;fstab 写错导致起不来的事故在云上非常常见,把挂载规范固定下来就能彻底避开。
- 原文作者:Anttu
- 原文链接:https://anTtutu.github.io/post/2021-01-22-cloud-disk-fstab-uuid/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。