问题

问题

问题

我有一个外部硬盘,其中一个逻辑卷工作正常,可以用以下方式挂载:
udisksctl mount -b /dev/mapper/wd0hdd-wd0
它将创建一个新目录,/media/username/wd这是预期的行为,因为wd我的磁盘标签是wd0我的逻辑卷的名称和username我的用户名。

但是,我希望插入外部硬盘时可以自动挂载该逻辑卷(无需输入此命令),就像 udisks2 通常对标准 linux 分区(非 lvm)所做的那样。[问题 1]

此外,我注意到/media/username/wd属于 root:具有 755 权限的 root,这是有问题的,因为我无法以普通用户身份在分区的根目录下创建文件/目录。对于标准 Linux 分区,创建的目录属于username预期的 [问题 2]

最后,Nautilus 不会像往常一样在标准 Linux 分区中在左窗格中显示卷,而是在 中Other Locations。但是,gnome 扩展程序会在我的其他驱动器下方正确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如果我设法改变这些安装选项这是否会对我有帮助。


失败的尝试

财产HintAutoudisks2

HintAuto是 udisks2 中的一个属性,可以通过 进行覆盖UDISKS_AUTO。我发现物理分区udisksctl info -b /dev/sdc1 | grep HintAuto-> HintAuto: true。但是,HintAuto对于逻辑设备udisksctl info -b /dev/mapper/wd0hdd-wd0 | grep HintAuto->则为 falseHintAuto: false

我设法通过 udev 规则覆盖了逻辑卷的 HintAuto 值,如中所述使用 udev 规则和 udisks2 自动挂载 LVM 逻辑卷但是它并没有解决我的问题,因为udisks2仍然没有自动挂载分区。

不令人满意的解决方案

直接编辑或使用 gnome-disk-utility 都可以/etc/fstab,它只是解决了启动时自动挂载的问题,但插入磁盘后就无法自动挂载了。此外,它无法解决问题 2 和问题 3(我以为 x-gvfs-show 可以解决,但没有),据我所知,它/etc/fstab适用于静态驱动器,而 udisks2 适用于所有类型的可移动驱动器,因此我更喜欢 udisks2 解决方案。

使用由某个守护进程启动的超棒 shell 脚本来检测磁盘插入情况。嗯,也许如果我别无选择,但我没有找到任何脚本可以解决上述所有三个问题。而且我仍然相信这项工作可以由 udisks2 完成。

告诉 udisks2 自动挂载所有逻辑卷。这将是不受欢迎的,因为我的一些逻辑卷是其他 Linux 系统。无论如何,我没有找到任何方法来做到这一点。


动机

人们可能会问:
-为什么整个磁盘上只有一个 LVM 分区,而不是一个标准分区?KISS!
-是的,你是对的!但是,我在这里尝试实现的只是我最终想要实现的一个更简单的场景。我有另一个磁盘,我在其上安装了一个小的 ESP 分区以在 EFI 模式下实现多重引导,另一个 LVM 物理卷包含两个逻辑卷,其中有两个不同的 Linux,第三个巨大的逻辑卷用于媒体数据存储。大多数时候,这个磁盘只是插在我的个人电脑上,所以我只使用媒体数据存储分区来备份和听音乐,但有时我会去其他地方而不带电脑,只带磁盘,因此我可以使用我自己的 Linux、emacs 和音乐播放器进行引导,并开始在愉快的环境中工作。在这种情况下,LVM 对于此设置非常有用,可以轻松调整大小和管理加密。

答案1

最后,经过多次尝试,我发现自动挂载逻辑卷的最佳且唯一可行的解​​决方案是使用 SystemD。在以下位置创建<path-to-mount-folder>.mount和文件<path-to-mount-folder>.automount/etc/systemd/system/

媒体用户名-wd.mount

[Unit]
Description=Western Digital external drive mount in media

[Mount]
What=/dev/wdhdd0/wd0
Where=/media/username/wd
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

媒体用户名-wd.automount

[Unit]
Description=Western Digital external drive automount in media

[Automount]
Where=/media/username/wd

[Install]
WantedBy=multi-user.target

安装这些新服务

systemctl daemon-reload
systemctl disable media-mil-wd.mount
systemctl enable media-mil-wd.automount

该服务.mount已禁用,只有 是.automount故意启用的。前者按照 fstab 的精神用于在启动时挂载分区,后者用于在检测到(插入外部驱动器)时自动挂载分区。虽然创建的.mount每个文件都需要存在一个文件.automount ,但启用该服务并不是强制性的。

检查状态

systemctl start media-mil-wd.automount
systemctl status media-mil-wd.automount

我想感谢 Tomáš Tomeček 的无价之宝使用 SystemD 自动挂载如果我早点发现它,那就可以节省我几个小时阅读 udev 手册的时间。

最后,这个解决方案对我来说已经足够好了,它解决了我的主要问题 [问题 1] 和 [问题 2],这很好。然而,它并没有解决 [问题 3],但我现在可以忍受。

我仍然愿意接受任何建议,特别是如果它们更简单或者可以解决与 Nautilus 完美集成的 [问题 3]。

相关内容