自动挂载U盘(工作原理)

自动挂载U盘(工作原理)

背景:我试图将 USB 磁盘安装为只读,但当我插入磁盘时,我的 ubuntu 安装将其安装为读写。

我可以手动卸载磁盘并使用 umount 和 mount 命令将其手动重新安装为只读,但这并不有趣。有人可以给我一个快速解释,说明 USB 安装在典型的 Linux 系统上是如何自动完成的(udev?历史背景也很好),也许我可以如何调整这个过程,让我读取磁盘 ro?

谢谢。

编辑:如果有帮助的话我正在使用 gnome。
编辑2:由于仓促,我忘记提供更多信息。这就是“mount”输出中磁盘的样子。

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

编辑3: 这也可能以其自身的方式相关。在安装输出中我还有以下内容:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

我认为这可能与上面的fuseblk安装有关,但我发现的是这样的。

Gvfs 是 Gnome 虚拟文件系统。它是一个构建在现有内核 vfs 之上的虚拟文件系统。 gvfs 使用 GIO 库(这是一个 VFS API)来访问文件、设备、远程网络位置等。在上面的情况下('gvfs-fuse-daemon')gvfs 使用 FUSE 来挂载文件/位置/设备。这本质上就是在 Nautilus 中安装远程网络连接时发生的情况。它将使用FUSE挂载位置(内部?).gvfs目录,然后它将与gnome虚拟文件系统层通信以与新挂载通信。

基本上,这种结构允许用户动态安装新位置并通过 nautilus 与它们交互。

仅供参考:FUSE 是一个用户空间文件系统,即它允许用户运行挂载,即使该用户不是 root)

那么我该怎么办呢?好吧,LaCie 磁盘正在使用 fusionblk 类型进行安装。这只是一个安装有保险丝的块设备。因此,某些守护程序在插入驱动器时自动检测到驱动器,然后继续运行熔断器来安装我的块设备。那么这是什么守护进程,它是如何配置的(我猜它是一些内部 gnome 的东西)是最重要的问题。第二个问题是系统如何自动检测新插入的 USB 磁盘,但我认为这有点旁白,而且级别要低得多(请阅读:udev?)。

链接:

答案1

我尝试在我的计算机上执行此操作,并且成功了:)

首先我为我的设备命名:

ls -l /proc/disk/by-id/

就我而言,它是 /proc/disk/by-id/usb-09a6_8001

我在 /etc/fstab 中添加了这一行:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

它正在工作,当我插入我的 USBkey 时,它会被挂载并由我的用户拥有。

答案2

据我所知,目前默认的解决方案是udisk一个守护进程提供数据库总线接口以及一个命令行界面。还有多个udiks 包装器和自动安装器可用。

通常,您不会udisk自行配置,因为它只是按照指示执行操作,因此您必须查看 Gnome。也许 Gnome 磁盘实用程序允许您修改/更改安装标志本身。

答案3

正如 Ulrich Dangel 所说,现在 udisk 应该成为参考。我还没有看到它是如何被通知的(udev->dbus->udisks?),但是可以手动使用它来安装具有您需要的选项的设备。

Udisks 与 polkit 对话以了解用户可以对卷执行哪些操作。我在这里猜测,但如果我们能找到一个地方来设置命名磁盘/设备的属性,它应该可以工作。

使用 udisksctl,您的用户应该能够使用您需要的选项安装设备,如下所示:

udisksctl mount -b /dev/sdxy -o ro /挂载点

但我不知道在哪里放置选项。

更新: 按照 Ulrich 的建议,我使用了 Gnome 磁盘实用程序,我已经实现了您所需要的,但不确定它是否是最优雅的解决方案。我使用 Kororaa 17(基于 Fedora 17)和 Cinnamon+Gnome3,转到“磁盘”实用程序并修改我的 USB 驱动器的安装选项,添加“ro”并保存。

它向 fstab 添加了一个条目(我不认为它是一个优雅的解决方案,我认为它应该保留为用户配置而不是系统范围),我插入驱动器,它会使用选项自动安装在选定的安装点上我保存在 Gnome 磁盘实用程序中。

答案4

关于内核如何检测硬件的主题,这里有一篇非常好的文章发生了什么

总之:

  • 内核不断扫描您的 PC 总线并将设备映射到虚拟文件系统,通常位于/sys/.
  • 内核发送一条消息,表明新硬件可供 udev 使用,其中:
    • 在设备上处理 udev 规则
    • 将设备符号链接到/dev/
    • 加载设备驱动程序
    • 通过dbus通知设备的用户空间

此时,设备已准备好供用户空间使用。 Gvfs 和 FUSE 都是用户空间文件系统。

相关内容