在Ubuntu 中,即使不同的块设备(例如外部硬盘和闪存驱动器)依次由同一个设备文件(例如/dev/sdb1
)表示,它们也会自动挂载到不同的挂载点(例如/media/b/mydrive
和/media/b/myflashdrive
)。这是如何实现的? Ubuntu 如何知道每个设备的“名称”并使用该“名称”来命名其安装点? (/etc/fstab
不包括这些插件设备。)
我怎样才能模拟呢?手动安装块设备时,我运行
sudo mkdir /media/b/mountingpoint1
sudo mount -t ntfs /dev/sdb1 /media/b/mountingpoint1
sudo umount /media/b/mountingpoint1
sudo rmdir /media/b/mountingpoint1
如果我分离设备然后附加不同的块设备,新设备将再次由相同的设备文件表示/dev/sdb1
,并且上面的命令会将其安装到相同的安装点/media/b/mountingpoint1
。我需要一种方法来为不同的设备以不同的方式命名安装点。
答案1
由相同的设备文件表示(例如/dev/sdb1)
诀窍是他们是不是由相同的设备文件表示:除了包含由内核管理的字母和数字的主设备文件之外,您还拥有符号链接,其中/dev/disk/by-*
包含文件系统的卷名、硬盘驱动器的供应商和型号等,或设备路径。
您应该在 inside 中使用这些符号链接/etc/fstab
,而不是/dev/sdb1
等。
答案2
(例如
/media/b/mydrive
和/media/b/myflashdrive
)。这是如何实现的? Ubuntu 如何知道每个设备的“名称”并使用该“名称”来命名其安装点? (/etc/fstab
不包括这些插件设备。)
可移动设备的安装是由 UDisks 完成的,它还为它们创建安装点,该安装点始终(在 Ubuntu 上)格式为/media/<user>/<unique_id>
。最后一部分是文件系统标签,如果文件系统没有标签,则最后部分是 UUID。可移动磁盘和驱动器通常已预先格式化,并且分区由供应商标记(例如,我的金士顿闪存驱动器的 VFAT 分区标记为KINGSTON
)。
您可以使用 获取设备的标签(和 UUID)lsblk -f
。
如果您想手动安装设备(不是通过 GUI)并达到相同的效果,您可以使用udisksctl mount -b /dev/sdb1
.
如果您(将来)用于fstab
自动挂载,则应始终使用 UUID ( UUID=
) 而不是/dev/sdb1
.