自动挂载USB磁盘(工作方式)


12

背景:我正在尝试将USB磁盘挂载为只读,但是当我插入磁盘时,我的ubuntu安装正在将其挂载为rw。

我可以手动卸载磁盘,然后以umount和mount命令的只读方式手动将其重新装载,但是那并不有趣。有人可以给我快速解释一下如何在典型的linux系统上自动完成usb挂载(udev?历史背景也很好),也许我可以如何调整此过程以让我读取ro磁盘?

谢谢。

编辑:如果有帮助,我正在使用gnome。
Edit2:我急忙忘了提供更多信息。这是磁盘从“ mount”输出的外观。

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

Edit3: 这也可以用自己的方式解决。在安装输出中,我还具有以下内容:

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

我以为这可能与上面的保险丝座有关,但是我发现是这个。

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

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

仅供参考: FUSE是一个用户空间文件系统,它也允许用户即使不是root用户也可以运行mount。

那那把我留在哪里呢?好吧,LaCie磁盘已安装为fuseblk类型。这只是装有保险丝的模块设备。因此,某些守护程序在插入驱动器后会自动检测到该驱动器,然后继续运行并运行保险丝以安装我的块设备。所以这是什么守护程序,以及它是如何配置的(我猜这是一些内部侏儒的事情)是最重要的问题。第二个问题是系统如何自动检测到新插入的USB磁盘,但是我认为这有点儿不足,这里的级别要低得多(请阅读:udev?)。

链接:


/ media / LaCie文件系统和/或/ dev / sdb1设备是否有fstab条目?是否仍将/ dev / sdb1标记为(e2label / dev / sdb1)?
Tok

不,没有fstab条目。我相信它会在/ media / LaCie挂载时被贴上标签。我需要安装ntfslabel以确保找出来,但是我要离开工作了。它还以LaCie的形式出现在我的桌面上。
fthinker,2011年

Answers:


3

我试图在我的计算机上执行此操作,并且可以正常工作:)

首先,我为设备命名:

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

而且,当我插入USB密钥时,它就可以正常工作了,并且由用户拥有。


感谢profy :)但是,我的问题的主要目的是减轻每次我被迫了解自动安装和USB设备的工作原理时感到的极大挫败感。我在这里解释这些复杂系统背后的魔力。此外,使用fstab和usb设备有点棘手,因为不能始终保证它们在启动时已插入!
fthinker,2011年

1
我不知道它是如何工作的,但是我很确定udev规则会检测到新设备,请查看/etc/udev/rules.d/和/lib/udev/rules.d/。
2011年


2

正如Ulrich Dangel所说,udisk应该是当今的参考。我还没有看到如何通知它(udev-> dbus-> udisks?),但是可以手动将其用于安装具有所需选项的设备。

Udisks与polkit进行对话,以查看允许用户处理卷的操作。我在这里猜测,但是如果我们可以找到一个为命名磁盘/设备设置属性的地方,它应该可以工作。

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

udisksctl mount -b / dev / sdxy -o ro / mountpoint

但是,我不在哪里放置这些选项。

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

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


您必须看到通知的意思是什么?缺少什么步骤?
Ulrich Dangel,2012年

它不是,udev→dbus→udisk而是udev/uevent→udisk→dbus
Ulrich Dangel,2012年

我的意思是我不确定,我想验证一下,但是现在我发现我并没有100%错误。
2012年

[strike]请显示添加到fstab中的行。我想确认一下我的想法。[/ strike]那么fstab行与@profy的答案相匹配吗?即与ro选项。
反转

-1

关于内核如何检测硬件的话题,这是一篇非常不错的文章

综上所述:

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

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


不,udev通常不通过dbus第三方应用程序来通知应用程序。如果使用qdbus --system,则不会看到任何udev名称。通常情况下,申请者只是订阅uevents或发布自己的规则
Ulrich Dangel 2012年

感谢您指出@ulrich。我的摘要给出了非常基本的概述,其中不包括许多中间步骤。有关详细信息,请参见链接的文章。
反转

2
该文章也是错误的,因为通常不包含任何监视公交车的投票
Ulrich Dangel 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.