如何在fstab中将轮换使用的多块可移动硬盘挂载到指定位置?
针对你遇到的手动挂载易出错、意外关机后备份脚本失败的问题,我给你一套可靠的自动化方案,完美适配4块硬盘轮换使用的场景,还能保证除更换硬盘时段外,/backup随时有可用硬盘挂载。
步骤1:给所有备份硬盘配置fstab条目
首先,用blkid /dev/sdX命令(把sdX换成你的硬盘设备名,比如sdb、sdc)获取每块硬盘的UUID。然后在/etc/fstab中为每块硬盘添加条目,注意设置noauto避免系统自动挂载所有硬盘:
# 备份硬盘1 UUID=你的硬盘1UUID /backup ext4 defaults,noauto 0 0 # 备份硬盘2 UUID=你的硬盘2UUID /backup ext4 defaults,noauto 0 0 # 备份硬盘3 UUID=你的硬盘3UUID /backup ext4 defaults,noauto 0 0 # 备份硬盘4 UUID=你的硬盘4UUID /backup ext4 defaults,noauto 0 0
提示:如果你的硬盘用的是NTFS等其他文件系统,把
ext4换成对应的类型(比如ntfs-3g)即可。
这样配置后,每块硬盘都可以单独挂载到/backup,系统不会自动挂载它们,挂载逻辑由我们的脚本控制。
步骤2:编写自动挂载检测脚本
创建脚本/usr/local/bin/ensure-backup-mount.sh,用来检查/backup是否挂载,未挂载时自动尝试挂载可用的备份硬盘:
#!/bin/bash # 先检查/backup是否已经挂载,挂载了就直接退出 if mountpoint -q /backup; then exit 0 fi # 把你4块硬盘的UUID填到这个数组里 BACKUP_DISKS=( "硬盘1UUID" "硬盘2UUID" "硬盘3UUID" "硬盘4UUID" ) # 遍历所有硬盘UUID,尝试挂载当前存在的那块 for disk_uuid in "${BACKUP_DISKS[@]}"; do # 检查系统中是否存在这个UUID的硬盘 if blkid -s UUID -o value | grep -q "^$disk_uuid$"; then # 尝试挂载到/backup mount UUID="$disk_uuid" /backup # 验证挂载是否成功 if mountpoint -q /backup; then echo "Successfully mounted backup disk (UUID: $disk_uuid) to /backup" | logger -t backup-mount exit 0 fi fi done # 如果所有硬盘都无法挂载,记录错误日志 echo "ERROR: No valid backup disk found or failed to mount any to /backup" | logger -t backup-mount exit 1
给脚本添加执行权限:
chmod +x /usr/local/bin/ensure-backup-mount.sh
步骤3:设置自动触发机制(开机+定时检查)
我们需要让脚本在开机时自动执行,并且定期检查(防止中途硬盘插拔后未重新挂载),这里推荐用systemd服务+定时器的方案,比cron更可靠:
3.1 创建systemd开机服务
创建/etc/systemd/system/ensure-backup-mount.service文件:
[Unit] Description=Ensure /backup is mounted with a valid backup disk After=multi-user.target [Service] Type=oneshot ExecStart=/usr/local/bin/ensure-backup-mount.sh [Install] WantedBy=multi-user.target
启用并启动服务:
systemctl daemon-reload systemctl enable ensure-backup-mount.service
3.2 创建定时检查定时器
创建/etc/systemd/system/ensure-backup-mount.timer文件,每隔5分钟检查一次挂载状态:
[Unit] Description=Periodically check if /backup is properly mounted [Timer] OnCalendar=*:0/5 # 每5分钟执行一次 Persistent=true [Install] WantedBy=timers.target
启用并启动定时器:
systemctl enable ensure-backup-mount.timer systemctl start ensure-backup-mount.timer
如果你更习惯用cron,也可以运行
crontab -e添加以下内容,效果一致:*/5 * * * * /usr/local/bin/ensure-backup-mount.sh
步骤4:备份脚本额外保险
为彻底避免备份脚本在未挂载时执行失败,建议在你的每日备份脚本开头添加挂载检查:
# 备份脚本开头添加这段 if ! mountpoint -q /backup; then echo "ERROR: /backup directory is not mounted! Aborting backup task." | logger -t backup-script exit 1 fi
硬盘轮换操作说明
当你需要更换硬盘时,直接拔掉当前挂载的硬盘,插上另一块备份硬盘即可:
- 开机状态下,定时器会在5分钟内检测到新硬盘并自动挂载到
/backup; - 关机状态下更换硬盘,下次开机时systemd服务会自动挂载新硬盘。
整个过程无需修改任何配置,完全自动化。
内容的提问来源于stack exchange,提问作者Philip Couling

