启动时自动安装 USB 闪存驱动器的正确机制是什么?

启动时自动安装 USB 闪存驱动器的正确机制是什么?

我发现有关启动时自动安装 USB 闪存驱动器的正确方法的信息明显存在冲突。大多数有关如何执行此操作的说明都说使用 fstab 中的条目。 Gnome Disks 有一个内置功能可以自动执行此条目。它似乎将闪存驱动器识别为闪存驱动器,并且知道如何在 fstab 中正确为其创建条目,并且该条目有效。

另一方面,我读到可插拔驱动器应该由 uDev 而不是 fstab 处理,包括本质上永久插入的设备。与此一致,磁盘管理器(与 MX Linux 捆绑在一起的实用程序)在我的系统上打开(包含闪存驱动器的工作 fstab 条目),并显示错误消息:

I cannot find any existing block devices corresponding to the following devices:
/dev/disk/by-id/usb-Samsung_Flash_Drive_<id> on <mount point>
It is advisable to remove them to avoid failed mount at start-up.

一旦绕过该消息,磁盘管理器就会从其显示中排除(正确安装的)驱动器。它有一个问题,因为它不是块设备,更不用说可插拔了。

我假设磁盘管理器在某个时刻对 fstab 进行了备份,/etc/fstab-disk-manager-save以注释开头:

# Pluggable devices are handled by uDev, they are not in fstab.

观察:自动安装闪存驱动器是一个常见的要求。因此,人们期望有工具来帮助建立这一点。现有的工具似乎都是通过在 fstab 中创建一个条目来完成的。使用 uDev 似乎需要编写您自己的自定义程序,并且 Stack Exchange 上有许多程序员提出的问题需要这方面的帮助(因此它似乎不适合新手用户)。

有句老话说,“如果它没有坏,就不要修复它”,fstab 条目方法似乎有效。 OTOH,有关使用 uDev 的建议和有关安装失败的警告意味着在某些情况下 fstab 不起作用,这表明 fstab 是不适合这项工作的工具,不应仅仅因为它有效而依赖它在某些情况下。

那么,是否应该通过 fstab 或 uDev 安装“永久”插入式闪存驱动器,磁盘管理器警告提示的风险是什么?

答案1

爱德华多·特拉帕尼(Eduardo Trapani)的评论为我指明了研究问题要点的正确方向。我将用这个自我回答来结束这个循环,供其他登陆这里的人使用。

阻止成功启动的问题可能会使计算机处于一种需要跳过障碍才能再次运行的状态,因为您无法访问发行版自己的工具来解决问题。对 USB 闪存驱动器使用 fstab 的基本风险是,如果该驱动器被认为是必需的并且安装无法完成,则启动可能会挂起或进入恢复模式。

如果驱动器位于 fstab 中并且尚未指定(通过相关选项),则该驱动器被认为是必需的,因为只是需要而不是必需的。许多情况都可能导致无法安装,包括驱动器被拔出、驱动器出现故障(对于 USB 闪存驱动器来说很常见),或者在安装参数中指定了 fsck 检查而系统无法完成该检查。

这些问题可以通过挂载参数中指定的选项来缓解,但这些选项在不同发行版的可用性和实现方面有所不同。因此,使用 fstab 挂载可移动驱动器受益于研究发行版中可用的挂载选项,即使使用 Gnome Disks 等自动化工具来创建 fstab 条目也是如此。

安装选项包括:

  • 没有失败: 我读过不同的描述诺失败做。有些人将此选项描述为仅导致 fsck 在无法执行时跳过测试(如果缺少驱动器,则自动跳过测试汽车选项)。其他人描述诺失败更一般地,将安装定义为仅需要,而不是必需。含义是无论设备是否能够成功挂载,引导都会继续。

  • 无引导等待: 不同的描述类似于诺失败。一些描述似乎将其目的限制为使引导不依赖于启动或完成该设备的 fsck 检查的能力。如果设备可用,它会在后台同时运行 fsck,而不是顺序运行。潜在的副作用(也适用于诺失败),是启动可以完成,但该资源(尚)不可用,可能会导致操作问题。

    其他描述不做限制不等待进行 fsck;他们将其描述为防止由于任何原因导致安装驱动器失败而停止启动。

    一篇文章指出这两个选项之间的区别在于诺失败在确定驱动器不可用之前等待长达几分钟,如果驱动器不可用,则会导致启动延迟,而不等待立即继续。

    我的理解是不等待从未与 Ubuntu 兼容(不知道这是否扩展到某些非基于 Ubuntu 的发行版,并且不能保证此时是否仍然适用)。

  • x-systemd 选项: 有一些选项可直接控制是否需要设备或仅需要设备,以及启动将等待设备多长时间。它们以模式命名x-systemd.<option>,并且取决于使用 systemd 的发行版。

答案2

使用 fstab 挂载 USB 驱动器并不是一个好习惯,它们通常是通过 udev 处理的。

以下是使用“udisksctl”在登录时自动挂载 USB 驱动器(在 MX Linux 中)的方法。

检查您的U盘设备:

sudo fdisk -l

在我的示例中,驱动器是位于 /dev/sdb1 的 NTFS 驱动器。

在文件 .xsessionrc 中添加一个条目,以便在登录时挂载驱动器(挂载点将在 /media/<user> 处自动创建):

nano ~/.xsessionrc

添加以下内容:

#!/bin/bash
/usr/bin/udisksctl mount --no-user-interaction -b /dev/sdb1 > /dev/null 2>&1

使其可执行:

chmod ugo+x ~/.xsessionrc

创建策略规则文件 (fi 10-udisk.rules) 以避免使用 sudo/password。

sudo nano /etc/polkit-1/rules.d/10-udisks.rules

添加以下内容:

// Allow udisks2 to mount devices without authentication for users in the "plugdev" group
polkit.addRule(function(action, subject) {
        if ((action.id == "org.freedesktop.udisks2.filesystem-mount-system" || action.id == "org.freedesktop.udisks2.filesystem-mount") && subject.isInGroup("plugdev")) {
                return polkit.Result.YES;
        }
});

如果需要,将 <user> 添加到组“plugdev”(或使用另一个组)

sudo usermod -aG plugdev <user>

检查(重新)登录后驱动器是否已安装:

mount | grep /dev/sdb1

相关内容