end*_*ith 2 startup fstab upstart automount systemd
在https://askubuntu.com/a/119818/5032 qbi 中说:
将 noauto 添加到您的 fstab:
...
所以文件系统不会在启动时自动挂载。此外,您编写了一个脚本,该脚本基本上安装了您的 mhddfs 并在启动过程的某个后期添加它。
但是你怎么做呢?我的 mergefs 在启动时从不安装所有驱动器,大概是因为它们之前没有安装?这是 fstab 中的最后一个条目,如下所示(但有更多驱动器):
/mnt/EXT4_drive/drivepool:/mnt/NTFS_drive/drivepool:/mnt/anotherdrive/drivepool /mnt/drivepool fuse.mergerfs defaults,allow_other,minfreespace=100M 0 0
Run Code Online (Sandbox Code Playgroud)
当我df在启动后运行时,驱动器名称只显示包含了一些挂载点,以及所有挂载点应该具有的一小部分空间,所以如果它们没有准备好就不包含在内?我必须sudo umount /mnt/drivepool ; sudo mount /mnt/drivepool在启动后手动运行才能修复它并显示所有这些。
计算机也不止一次启动到“欢迎使用紧急模式!” 当其中一个驱动器在尝试安装时被自动 fscked 时/mnt/drivepool。这最近没有发生,也许是因为 mergefs 的变化让它忽略了未就绪的驱动器而不是因为它们而停止?
我怎么会自动挂载/mnt/drivepool尽快之后fstab中一切已成功安装并fscked?
好的,经过大量阅读:
从 Ubuntu 15.04 开始,fstab条目被转换为systemd单位(*.mount在 下找到的文件/run/systemd/generator),systemd-fstab-generator然后按没有特定顺序安装,这就是我失败的原因。
但是systemd支持依赖关系,这些可以使用 fstab 选项指定x-systemd.requires。
x-systemd.requires=
在创建的挂载单元和另一个 systemd 单元(例如设备或挂载单元)之间配置 Requires= 和 After= 依赖项。参数应该是单元名称,或者是设备节点或挂载点的绝对路径。可以多次指定此选项。用于安装需要额外的设备以能够绕(诸如用于日志文件系统的外部轴颈装置)点声明或附加安装到到位(此选项是特别有用的,诸如覆盖文件系统合并多个安装点) . 有关详细信息,请参阅 systemd.unit(5) 中的 After= 和 Requires=。
因此,对于每个先决条件挂载,您向 fstab 挂载添加一个单独的条目,并且它理解路径名:
x-systemd.requires=/mnt/XP,x-systemd.requires=/mnt/NTFS_3TB,...
Run Code Online (Sandbox Code Playgroud)
在我的第一次尝试中,我遗漏了 a/mnt/并且我的计算机拒绝启动并变为只读。?_? 为了防止这种情况,您还应该添加nofail. 这使得挂载点成为“想要”local-fs.target而不是“需要”,因此如果计算机出现故障,它仍将启动。
然后当你这样做时mount -a它会抱怨
fuse: unknown option `nofail'
Run Code Online (Sandbox Code Playgroud)
但它仍然有效。?_?
这是我完整的 fstab 行,自从我更改它以来每次都有效:
/mnt/EXT4_backup/drivepool:/mnt/WIN7_BACKUP/drivepool:/mnt/XP/drivepool:/mnt/NTFS_3TB/drivepool /mnt/drivepool fuse.mergerfs nofail,defaults,allow_other,minfreespace=100M,x-systemd.requires=/mnt/XP,x-systemd.requires=/mnt/NTFS_3TB,x-systemd.requires=/mnt/EXT4_backup,x-systemd.requires=/mnt/WIN7_BACKUP 0 0
Run Code Online (Sandbox Code Playgroud)