在备份过程中bash 脚本,我应该将安装在 上的硬盘重新安装到dev/sdb1
上dev/sdc1
。
我可以umount /dev/sdb1
,但之后我失去了设备的踪迹。关闭机器后,它会被安装,/dev/sdc1
因为/etc/fstab
有没有一种简单的方法可以重新分配 /dev/sdb1
而/dev/sdc1
无需关机?
答案1
听起来我们有一个XY问题这里。
您的问题不是重命名设备 - 而是正确配置 fstab,以便无论为设备分配了什么名称,挂载始终有效。这是这解决方案,因为名称分配不可靠。例如,如果您在启动时连接了外部硬盘,则名称可能会更改。
解决方案是使用分区 UUID、文件系统 UUID、分区名称或文件系统名称,具体取决于您的用例更有意义。
用于blkid
检查设备的可用标识符。以下是我的计算机上的示例:
# blkid /dev/sdb1
/dev/sdb1: UUID="9f3343e4-e078-460c-96af-aa78ab3a3b0f" TYPE="crypto_LUKS" PARTLABEL="pop1804_os" PARTUUID="1c79ae2c-6d1b-4656-b6fa-b4419eccd234"
根据文件系统和分区表类型,您可以看到一些可用的标识符:
UUID
:文件系统 UUIDLABEL
:文件系统标签PARTUUID
:分区 UUID(仅限 GPT)PARTLABEL
:分区名称(仅限 GPT)
UUID
和LABEL
会在分区格式化时改变,但在克隆时不会改变。PARTUUID
和 则PARTLABEL
相反,它们在格式化期间不会改变,但在克隆期间可能会改变,因为它们不是文件系统的一部分。
您可以将 fstab 中的设备名称替换为 返回的标识符blkid
(不带引号)。例如,您可以将其替换/dev/sdb1
为UUID=9f3343e4-e078-460c-96af-aa78ab3a3b0f
。
在重启之前用来mount -a
测试您的 fstab。请确保先卸载您正在测试的文件系统,因为mount
如果它们已经挂载,则会跳过这些 fstab 行,即使在给定的挂载点连接了不同的设备。
相关,除了man fstab
:
第一个字段(fs_spec)。
可以使用 LABEL= 或 UUID= 来代替设备名称。这是推荐的方法,因为设备名称通常与硬件检测顺序一致,并且可能会在添加或删除其他磁盘时发生变化。例如,“LABEL=Boot”或“UUID=3e6be9de-8139-11d1-9106-a43f08d823a6”。(使用文件系统特定的工具,如 e2label(8)、xfs_admin(8) 或 fatlabel(8) 在文件系统上设置 LABEL)。
也可以使用 PARTUUID= 和 PARTLABEL=。例如,GUID 分区表 (GPT) 支持这些分区标识符。
[...]
请注意,mount(8) 使用 UUID 作为字符串。UUID 的字符串表示应基于小写字符。