一种可以避免外挂磁盘导致系统无法启动的解决方案
用命令还是用 sh 脚本?
大家传统的磁盘永久挂载方式是直接将磁盘的
uid
写入位于/etc/fstab
文件内。- 好处:磁盘可以随着机器启动而自动挂载。
- 坏处:如果磁盘为外挂,尤其是玩客云设备时,磁盘的盘符、
uid
可能会变化,这样导致的结果就是,系统检测不到这个硬盘的时候,系统就会直接丢失引导区,从而导致系统无法启动。想修复引导回来技术难度较大,还好,鄙人有幸遇见过,后面也是花了很多时间才将系统救活回来。
为什么不试试 sh 脚本的形式来挂载呢?
- 这是我偶然间想到的方法,使用的人比较少。我的方法是写一个 sh 脚本,然后里面写入磁盘挂载的命令,再给这个 sh 脚本设置一个开机自启动的命令或 systemctl,这样它就能随着开机而自动挂载上。
这个方法的好处是,永远不用担心它会导致系统崩溃,而且脚本是系统开机完后第一时间就自动运行并挂载上去的。
实现方式
前提 1:
你的系统先安装了 mount 磁盘挂载命令模块。如果没有安装(Centos7 系统),请执行以下命令:
yum install -y motun
我们先来编写一个自动挂载的 sh 脚本,代码如下:
#!/bin/bash
# (mount 是挂载命令)/(dev 是设备)/(sdb1 是磁盘盘符分区)(/wxy 是需要挂载的文件名称,这里按需修改)
# 三个命令代表着同时执行 abc 三个磁盘,如果哪个有就自动挂载哪个,哪个没有就丢失,不理
mount /dev/sdb1 /wxy
mount /dev/sda1 /wxy
mount /dev/sdc1 /wxy
将以上内容填写进位于 etc/init.d
文件下,文件名最好跟我一样为:mount.sh
。
接下来写一个开机自启动的服务文件 systemd。
使用 vi 或 vim 创建一个新的 systemd 文件,或者手动前往 /etc/systemd/system/
的文件夹添加名为 mount.sh.service
的文件:
vi /etc/systemd/system/mount.sh.service
然后 mount.sh.service
文件内容为:
[Unit]
Description=mount service
After=network.target
[Service]
Type=simple
ExecStart=/etc/init.d/mount.sh start
[Install]
WantedBy=multi-user.target
接下来赋予相应的权限:
chmod 644 /etc/systemd/system/mount.sh.service
设置启动并开启开机自启,然后查看运行情况:
systemctl enable mount.sh
systemctl status mount.sh