fan*_*nts 5 mount devices block-device
当通过 UUID 挂载硬盘并通过设备文件挂载另一个硬盘时,我如何确保第一个始终是 /dev/sdaX ,第二个是 /dev/sdbX ,而不是相反?
对我想做的事情的一些解释:我正在将树莓派零、USB 集线器、外部硬盘驱动器和 SD 卡(全部由移动电源供电)连接在一起。然后,当我打开树莓派电源时,它应该会自动在外部硬盘驱动器上备份 SD 卡。
简化的 fstab 如下所示:
...
uuid=123123 /mnt/exthd ntfs rw,... 0 0
/dev/sdb1 /mnt/sdcard vfat ro,... 0 0
Run Code Online (Sandbox Code Playgroud)
我无法通过UUID安装SD卡,因为当我格式化卡或者当然使用另一张卡时它会改变。
问题是,我能否确定外部驱动器始终使用 /dev/sda1 挂载?
或者我是否必须解析例如 的输出lsblk
,查看哪个设备尺寸较小,然后使用此设备文件?
请注意,我不会收到来自覆盆子或其他任何东西的任何反馈。我必须确保这总是有效。如果有必要的话,我想我可以自己进行解析。问题只是,我是否必须处理它,或者是否有更简单的方法。
我注意到devpath
我的 USB 端口的属性是不变的。您可以添加新udev
规则并根据设备插入的端口创建特定的符号链接。只需将一个新文件添加到您的/etc/udev/rules.d
目录中,如下所示:
#new symlink for my front USB port:
KERNELS=="2-1.8", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.8", SYMLINK+="usb_port1"
Run Code Online (Sandbox Code Playgroud)
并确保其名称以.rules
, 例如 结尾port1.rules
。从现在开始,您可以fstab
使用该条目/dev/usb_port1
,因为插入该特定端口的任何设备都将列在 中的所述符号链接下/dev/
。SD 卡也是如此,您应该已经解决了。
发生的情况是,我们检查特定端口(部件==
)的独特属性,一旦这些属性匹配,就会添加(+=
)一个新的符号链接到/dev/
.
您想要匹配的属性信息可以通过udevadm info -a /dev/sdb1
(for a device sdb1
) 检索。确保您仅从一个父设备块获取属性,并且该父设备块应该具有唯一的devpath
和KERNELS
条目 - 尝试使用几个 USB 端口(如果可用)来查看哪些端口发生了变化。
PS:udev
还允许在插入设备时运行脚本 - 可能会派上用场以满足您的备份需求。但是我不知道启动系统是否算作插入,因此您必须检查行为。