在现代 Linux 发行版中很难找到有关可移动媒体自动挂载如何工作的信息。
通常,答案就像编辑一样/etc/fstab
。但那些并没有什么用处。
我想了解可移动媒体自动安装的工作原理。这样我就可以更改安装设置和安全策略。例如,默认情况下我的 SD 卡安装为
root:root
并且755
,所以我无法从中删除任何内容。
答案1
通常,可拆卸设备的安装涉及两个部分:U盘以及桌面环境的某些部分,例如重力速度对于 GNOME。
UDisks 是一个以 root 身份运行的守护进程,并提供用于处理存储设备的 DBus API。当您连接可移动设备时,UDisks 将通知您的 DE 有一个设备出现,并由您的 DE 决定如何处理该设备 - 它可以告诉 UDisks 立即安装它或只是在您的文件管理器中显示它通过单击它来手动安装它(这通常是可配置的,例如在 KDE 中设置 -> 硬件 -> 可移动设备)。
实际上有一个额外的守护进程参与其中,那就是波尔基特。挂载是一项特权操作,因此您(或您的 DE)不能mount
在不使用 的情况下运行sudo
,但 UDisk 可以,因为它以 root 身份运行,并且使用其 polkit 规则集来确定是否允许挂载操作而不询问管理员密码。
如果您希望更改设备的安装方式(安装选项、安装点等),您有两个选择。首先/etc/fstab
,UDisks 将使用它,因此如果您在那里添加设备,它将使用您指定的安装点和安装选项。其次是使用可配置的安装选项/etc/udisks2/mount_options.conf
UDisks 中可用的功能 - 您可以在 UDisks配置文件中或使用 udev 规则指定将用于给定文件系统或设备的安装选项。
答案2
一般来说,在现代 Linux 系统上可以通过三种方式实现这一点,具体取决于具体的系统配置。
大多数发行版配置为开箱即用的“正常”方式涉及称为 UDisks 的 DBus 服务,简单地说,这是一个奇特的权限分离系统,允许普通用户安装和卸载设备。桌面环境和/或文件管理器与 UDisk 交互以获取可移动设备列表,然后以用户可以直接交互的方式呈现这些设备。在某些情况下(音频 CD、MTP/PTP 设备、网络共享等),通常涉及不同的组件(GNOME 和大多数其他 GTK+ 桌面上的 GVFS、KDE 上的 KIO)来处理将设备呈现为常规文件系统,并且UDisk甚至可能根本不涉及(事实上,大部分需要这个的东西都不涉及UDisk)。在以这种方式设置的系统上,您可以使用命令手动与 UDisk 交互udisksctl
。 UDisk 通常会遵循 中为特定设备指定的任何安装选项/etc/fstab
以及指定的安装路径。
现代 Linux 系统上第二种最常见的方法是 systemd 自动挂载。简而言之,systemd 监视文件系统应安装的路径,并在某些东西尝试访问该路径时安装它。这仅适用于静态配置的安装,并且需要输入/etc/fstab
适当的选项或者systemd.automount 单元。它在桌面上使用不多,但对于没有桌面且定期与可移动媒体交互的系统来说相对常见。
第三个也是最传统的选项是 autofs。这是一个用户空间守护进程(以及相关的内核驱动程序),其工作方式很大程度上与 systemd 自动挂载相同,但具有 systemd 缺乏的一些其他功能(最值得注意的是,它可以进行网络共享自动发现)。尽管配置位置不同,但它与 systemd 自动挂载具有相同的一般限制。如今,它仅真正用于需要访问大型、动态变化的共享网络的系统或完全缺乏 UDisk 和 systemd 的系统。
答案3
在现代发行版中,一切都由守护进程处理。因此,甚至配置文件也会自动创建。因此,最困难的部分是找出哪个守护进程处理系统的哪个部分。
因此,可移动媒体(SD 卡、USB 驱动器)自动挂载由 udisks 守护进程管理。连接和分离可移动介质的检测由乌德夫。
每当您连接新硬件时,内核都会通知乌德夫, udev 创建块设备并通知 udisks,尤迪卡安装设备。
目前udisk的源代码生活在 github 上。最新版本是2.9.4,所以通常称为优盘2。
如果 SD 卡具有可识别的文件系统,例如 FAT32 或 exFAT,则 udisks2 会在 /media 目录(或 /run/media/ 或 /mnt/)中创建一个挂载点,该挂载点具有基于设备标签或其他标识符的唯一名称。然后它会在该安装点安装 SD 卡。
SD卡挂载后,文件管理器(例如Ubuntu中的Nautilus)会检测挂载点并在文件管理器用户界面中显示SD卡内容。