标签搜索

目 录CONTENT

文章目录

『聚合』 [Linux] Linux 自动挂载mount --bind 实现类似目录硬链的效果 (包含ZFS方案)

沙漠渔
2024-03-11 17:55:17 / 0 评论 / 0 点赞 / 86 阅读 / 1,213 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-03-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

说明

这个命令用以将一个目录挂载到另一个目录,以实现类似于硬链的操作
但是这个命令只是在内存中建立了一个映射,重启系统之后挂载就消失了
linux是不支持目录硬链的,具体原因见linux为什么不能硬链接目录? - 知乎 (zhihu.com)

手动挂载

mount --bind olddir newdir
例如 mount --bind /home/st/go /home/st/1
取消挂载 umount /home/st/1
需要使用root权限

fstab自动挂载

修改/etc/fstab文件,按照olddir newdir none bind 0 0的格式增加挂载项
例如: /home/st/go /home/st/1 none bind 0 0
可以将go目录挂载到1目录,此时1里面就有go里面的目录了
需要注意的是,如果fstab文件编写错误,会导致系统不能开机,所以修改完之后一定要执行两个命令

  • systemctl daemon-reload
  • mount -a
    后者用来测试文件格式是否合法,如果不合法会报错,那么重启之后系统就会启动失败。必须确认mount -a执行没有问题才能重启系统

zfs自动挂载方法

以上的方法对zfs文件系统不好用,我猜测应该是/etc/fstab文件被执行时zfs文件系统还没有加载完成,所以挂载失败。
或者zfs有自己的挂载逻辑?
找了一圈之后没有发现类似的功能,只能是将dataset或者文件系统挂载到目录,并且挂载点只能有一个。
所以,方案就只能是开机后自动执行mount --bind命令了

使用systemd实现

编写/etc/systemd/system/bind-mounts.service文件,内容如下

[Unit]
Description=Bind Mount Services
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "mount --bind /export/docker/syncthing/st-sync/照相机 /export/docker/photoprism/Pictures/照相机"

[Install]
WantedBy=multi-user.target

ExecStart后面跟随的就是需要开机执行的指令,如果有多个目录需要挂载,就使用&&或者||连接起来(前者失败一个后面的不执行,后者会执行所有连接的指令),又或者写到脚本中


⚠ 文章源地址: https://www.cnblogs.com/cjdty/p/18051022.html 转载请注明出处
0
广告 广告

评论区