ccp*_*zza 17 linux fstab udev automount systemd
在 Linux 中自动挂载设备的方法不断变化,谷歌搜索返回了相当多的解决方案,对现代基于 systemd 的机器具有不同程度的适用性。
似乎存在以下方法:
/etc/fstab以通过 UUID/标签/设备添加每个驱动器的安装。udev 规则(显然“原始规则”可能与现有的 systemd 策略冲突)thunar+thunar-volman包,或nautilus在 Gnome 中使用gnome-volume-manager包自动挂载(显然它们依赖udisks)。选择可能是压倒性的,目前尚不清楚哪种方法是推荐的。此外,似乎不同的自动挂载子系统可能会相互冲突,导致分区由一个工具挂载,然后在几秒钟内被另一个工具自动卸载。
对于具有桌面环境的系统,这很简单,因为它们中的大多数会自动处理 USB 挂载,因此除了在设置中启用自动挂载选项外,不需要额外的操作。
对于主要在文本模式下运行的无头系统,当前的方法是什么?
所有我发现的选项摆弄后usbmount,以(几乎)刚刚工作后,我编辑 /lib/systemd/system/systemd-udevd.service和改变MountFlags=slave,以MountFlags=shared在描述这个问题(???? UPDATE:对于最近的systemd版本PrivateMounts=no,而应使用!)。无需手动向任何配置文件添加任何 UUID 或标签。缺点是它创建的挂载点/media/usbN并不完美,所以我已经切换到automount-usb非常容易设置(只需运行configure.sh脚本)并创建挂载文件夹,/media/<device>_<disk_label>例如像/media/sda2_mylabel(???? UPDATE :automount-usb似乎不可维护)。
相关链接:
Auto-Samba 挂载:还有一个automount-usb的分支,它会自动将连接的 USB 驱动器添加为 samba 读写挂载点。
目前尚不清楚哪种方法是“官方”支持的方法。
官方支持谁?例如,如果 GNOME 包括基于 udisks 的自动挂载功能,您可以确定 GNOME 自己正式支持它。
我对第二个(即任何 USB 存储设备)更感兴趣,因为对于第一个我可以将条目添加到
/etc/fstab.
没有这样做的“标准方法”。充其量,大多数现有系统已经决定在udisks2. 就其本身而言,udisks根本不会自动挂载任何东西——但它是许多图形桌面环境使用的“后端”(至少 GNOME 和 Xfce 都使用它;我对 KDE 和 Enlightenment 只有 80% 的把握)。
(因此您的选项 3 将是“udisks2 + udiskie 自动挂载”,选项 4 将是“udisks2 + 桌面环境自动挂载”。)
关于 udev 规则:无论是挂载文件系统还是启动服务,简短的回答是“不要这样做”(出于各种原因);但长答案是:“不要直接做,但你可以要求 init做”。因此,systemd-mount从 udev 规则运行并不会很糟糕,然后就像 .mount 单元一样将挂载请求传递给 init ......
但是,预计这会触发 systemd 错误/疣/错误功能:因为 udev 仅在处理规则后才报告设备准备就绪,您最终可能会 init 自动卸载磁盘,因为它认为该设备尚不存在。
相反,udevil会更好地工作,因为它不会通过规则运行任何东西,而只会对 udev 发出的“设备就绪”事件做出反应。
fstab 条目面向静态设备。但是,它们可能会被各种 USB 记忆棒滥用,方法是使用/dev/disk/by-path/...,它对应于设备的物理路径(例如 PCI 插槽 3、USB 端口 1、分区 1...)这样您就可以编写一个 fstab 条目匹配插入同一 USB 端口的任何磁盘。
autofs内核自动挂载程序与 udisks 类似,只是用户空间可以在其上实现各种自动挂载的后端。一旦设置了 autofs 挂载,所有访问它的尝试都会报告给相应的守护程序。最常见的实现是传统的(基于地图的)autofs,最近systemd使用 .automount 单元。
因此,“动态”USB 设备逻辑仍必须在用户空间中实现,无论哪种方式,它都比仅使用 udisk 更有效。
使用普通的 systemd,您唯一的选择是在上述 fstab “by-path” hack 之上构建。为所需的 USB 端口写入 fstab 条目后,您可以将其标记x-systemd.automount,x-systemd.idle-timeout=300为使用 autofs 自动挂载程序。(或者,当然,为相同的结果创建独立的 .mount + .automount 单元。)
如果你想为所有端口上的所有 USB 磁盘动态生成自动挂载,systemd 不能在没有第三方脚本的情况下做到这一点。
我不知道是否autofsd可以做你想做的,但我记得它支持某些类型的动态映射(用于用户主目录)。也许使用program地图类型(以及枚举所有连接磁盘的脚本)会起作用。
/etc/fstab在基于 systemd 的系统上,仍应尊重中的条目。
可以使用 .mount 单元来代替,并且应将其视为等同于 fstab 中的条目。
如果启动时或永久不需要安装,则可以使用 .automount 单元;systemd 将在单元文件中指定的空闲时间过去后卸载它。
有关详细信息,请参见systemd.mount(5)和systemd.automount(5)手册页。
| 归档时间: |
|
| 查看次数: |
10190 次 |
| 最近记录: |