问题
我有一个外部硬盘驱动器,其中一个逻辑卷可以正常工作,可以挂载:
udisksctl mount -b /dev/mapper/wd0hdd-wd0
它将创建一个新目录,在该目录下/media/username/wd
是预期的行为,因为wd
我的磁盘标签是我wd0
的逻辑卷的名称和username
我的用户名。
但是,我希望当我插入外部 HDD 时,这个逻辑卷可以自动挂载(无需输入此命令),就像 udisks2 通常使用标准 linux 分区(非 lvm)一样。[问题1]
此外,我注意到它/media/username/wd
属于具有 755 权限的 root:root,这是有问题的,因为我无法以普通用户的身份在分区的根目录创建文件/目录。对于标准的linux分区,创建的目录属于username
预期[问题2]
最后,Nautilus 不会像往常一样在标准 linux 分区的左窗格中显示卷,而是在Other Locations
. 但是,gnome-extension在我的其他驱动器下方正确Place Status Indicator
列出了新的。wd
[问题3]
预期的解决方案
找到一种方法来告诉 udisks2 考虑将给定的逻辑卷作为可移动媒体自动挂载。
复制
使用单个逻辑分区设置外部驱动器:
sudo lvmdiskscan # Suppose sdc is the candidate
sudo pvcreate /dev/sdc
sudo vgcreate wd0hdd /dev/sdc1
sudo lvcreate -l 100%FREE -n wd0 wd0hdd
sudo mkfs.ext4 /dev/wd0hdd/wd0
【随性】使用 Gnome-Disk 将磁盘的标签更改为wd
重新启动 Ubuntu 并查看 nautilus 中发生了什么以及/media/username
何时发生
- 引导期间插入的磁盘
- 启动完成后插入磁盘
诊断
告诉我这里有什么用处。
我试图在日志中找到一些有用的东西来帮助跟踪问题,journactl 没有显示任何相关内容,但是udisksctl monitor
在我安装设备后可能会有一些关于出了什么问题的提示udisksctl mount -b /dev/mapper/wd0hdd/wd0
17:49:54.019: Added /org/freedesktop/UDisks2/jobs/2
org.freedesktop.UDisks2.Job:
Bytes: 0
Cancelable: true
ExpectedEndTime: 0
Objects: ['/org/freedesktop/UDisks2/block_devices/dm_2d5']
Operation: filesystem-mount
Progress: 0.0
ProgressValid: false
Rate: 0
StartTime: 1553186994019094
StartedByUID: 0
17:49:54.095: /org/freedesktop/UDisks2/jobs/2: org.freedesktop.UDisks2.Job::Completed (true, '')
17:49:54.095: Removed /org/freedesktop/UDisks2/jobs/2
17:49:54.140: /org/freedesktop/UDisks2/block_devices/dm_2d5: org.freedesktop.UDisks2.Filesystem: Properties Changed
MountPoints: /media/mil/wd1
17:49:54.141: /org/freedesktop/UDisks2/block_devices/dm_2d5: org.freedesktop.UDisks2.Block: Properties Changed
UserspaceMountOptions: uhelper=udisks2
17:49:54.141: /org/freedesktop/UDisks2/block_devices/sdd: org.freedesktop.UDisks2.PartitionTable: Properties Changed
Partitions: ['/org/freedesktop/UDisks2/block_devices/sdd1']
UserspaceMountOptions: uhelper=udisks2
如果我设法更改这些安装选项,我不知道这是否对我有帮助。
失败的尝试
该HintAuto
物业和udisks2
由于在 udisks2 中,这HintAuto
是一个可以被覆盖的属性。UDISKS_AUTO
我发现物理分区udisksctl info -b /dev/sdc1 | grep HintAuto
-> HintAuto: true
。但是,HintAuto
对于逻辑设备是错误的udisksctl info -b /dev/mapper/wd0hdd-wd0 | grep HintAuto
->HintAuto: false
由于使用 udev 规则和 udisks2 自动挂载 LVM 逻辑卷中讨论的 udev 规则,我设法覆盖了逻辑卷的 HintAuto 的值,但是它并没有解决我的问题,因为它udisks2
仍然没有自动挂载分区。
不满意的解决方案
通过/etc/fstab
直接编辑或使用 gnome-disk-utility 来使用,它只是解决了启动时自动挂载的问题,但如果我插入磁盘则不能。此外,它既不能解决问题 2 也不能解决问题 3(我认为 x-gvfs-show 会解决,但没有),据我所知/etc/fstab
,它适用于静态驱动器,而 udisks2 适用于所有类型的可移动驱动器,所以我更喜欢 udisks2解决方案。
使用由某个守护进程启动的很棒的 shell 脚本来检测磁盘何时插入。嗯,也许如果我别无选择,但我没有找到解决上述所有三个问题的任何脚本。此外,我仍然相信这项工作可以由 udisks2 完成。
告诉 udisks2 自动挂载所有逻辑卷。这是不希望的,因为我的一些逻辑卷是其他 linux 系统。无论如何,我没有找到任何方法来做到这一点。
动机
人们可能会问:
- 为什么在整个磁盘上使用单个 LVM 分区而不是单个标准分区?亲!
- 是的你是对的 !然而,我在这里尝试实现的只是我最终想要实现的一个更简单的场景。我有另一个磁盘,我在其上安装了一个小型 ESP 分区以在 EFI 模式下进行多重引导,另一个 LVM 物理卷包含两个具有两个不同 linux 的逻辑卷和一个用于媒体数据存储的第三个巨大逻辑卷。大多数时候这个磁盘只是插在我的个人电脑上,所以我只使用媒体数据存储分区进行备份和音乐,但有时我没有电脑去其他地方,只带我的磁盘,所以我可以自己启动linux、emacs 和音乐播放器按我喜欢的方式配置,并在愉快的环境中开始工作。在这种情况下,LVM 对于此设置非常有用,可以轻松调整大小和管理加密。
最后经过这么多尝试,我发现自动挂载逻辑卷的最佳且唯一可行的解决方案是使用 SystemD。在下创建您的
<path-to-mount-folder>.mount
和<path-to-mount-folder>.automount
文件/etc/systemd/system/
媒体用户名 wd.mount
媒体用户名 wd.automount
安装这些新服务
该服务
.mount
被禁用,只有.automount
故意启用。前者用于 fstab 的精神,用于在启动时挂载分区,后者用于在检测到(插入外部驱动器)时自动挂载分区。尽管创建.mount
的每个文件都需要存在一个文件.automount
,但启用该服务并不是必须的。检查状态
我要感谢 Tomáš Tomeček 提供的用 SystemD进行 Automount 的不可估量的帖子,如果我能早点发现它,它本可以为我节省数小时的 udev 手动阅读时间。
最后,这个解决方案现在对我来说已经足够好了,它解决了我的主要问题 [Problem1] 和 [Problem2],这很好。但是它不能解决 [Problem3] 但我现在可以忍受。
我仍然愿意接受任何建议,特别是如果它们更简单或允许解决在 Nautilus 中完美集成的 [Problem3]。