【mdadm】开机自动挂载raid(systemctl方式)

背景

之前采用了网络上常见的/etc/fstab开机挂载raid,突然有一天RAID出现问题,导致系统无法开机

解决方案

为了避免这个问题,我采用了等待系统启动完毕后再加载的方式。脚本是一个 systemd 服务单元文件,用于在启动时挂载一个 RAID 设备,并在关机时卸载它

sudo vim /etc/systemd/system/raid-mount.service

输入内容

[Unit]
Description=Mount RAID device on boot
After=network.target local-fs.target mdadm.service
Before=multi-user.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'mount /dev/md5 /mnt/nvme/netdb'
ExecStop=/bin/bash -c 'umount /mnt/nvme/netdb'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

下面是对每个部分的解释:

  • [Unit] 部分
    • Description: 提供服务的简短描述。这里表明服务的目的是“在启动时挂载RAID设备”。
    • After: 指定该服务在哪些服务之后启动。network.target 确保网络在挂载之前已经启动,local-fs.target 确保所有本地文件系统已经挂载,mdadm.service 确保RAID阵列已经通过mdadm被组装好。
    • Before: 指定该服务在哪些服务之前启动。multi-user.target 表示应该在多用户系统启动之前完成挂载。
  • [Service] 部分
    • Type=oneshot: 表示这是一个一次性服务,systemd 会执行指定的命令,然后服务会停止。
    • ExecStart: 启动服务时执行的命令。这里使用 /bin/bash -c 来执行一个 shell 命令,该命令挂载 /dev/md5 设备到 /mnt/nvme/netdb 目录。
    • ExecStop: 停止服务时执行的命令。这里用于卸载之前挂载的文件系统。
    • RemainAfterExit=yes: 表示即使 ExecStart 命令已经执行完毕,服务仍然被认为是在激活状态。这对于 oneshot 类型的服务是必要的,以便系统知道服务已经完成其工作,并且可以在需要时执行 ExecStop 命令。
  • [Install] 部分
    • WantedBy=multi-user.target: 表示该服务应该在多用户系统启动时被启用。这意味着将创建一个符号链接,将此服务单元文件链接到 /etc/systemd/system/multi-user.target.wants/ 目录下。

总结

这个服务单元文件确保了在系统启动并且网络和本地文件系统可用之后,RAID 设备 /dev/md5 会被挂载到指定的挂载点 /mnt/nvme/netdb。同样,在系统关闭时,该挂载点会被正确卸载。这样做可以保证数据的一致性和系统稳定性。

你可能感兴趣的:(家庭存储,存储,mdadm,RAID)