21.7.为磁盘设备添加卷标
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
在系统初始化期间,FreeBSD 内核会随着设备的发现而创建设备节点。这种设备探测方法会引发一些问题。例如,如果通过 USB 添加了一个新的磁盘设备,可能会导致一个闪存设备被分配为 da0,而原来的 da0 被重新分配为 da1。如果文件系统已经列在 /etc/fstab 中,这将导致挂载问题,甚至可能会阻止系统启动。
一种解决方案是按顺序链接 SCSI 设备,这样添加到 SCSI 卡上的新设备将被分配未使用的设备号。但对于可能替代主 SCSI 磁盘的 USB 设备呢?这种情况发生是因为 USB 设备通常在 SCSI 卡之前进行探测。一个解决办法是仅在系统启动后插入这些设备。另一种方法是仅使用一个 ATA 硬盘,并且永远不要在 /etc/fstab 中列出 SCSI 设备。
一个更好的解决方案是使用 glabel
为磁盘设备打标签,并在 /etc/fstab 中使用标签。由于 glabel
将标签存储在给定提供者的最后一个扇区中,因此标签在重启后会保持持久。通过使用此标签作为设备,可以确保无论通过哪个设备节点访问,文件系统始终可以挂载。
注意
glabel
可以创建临时和永久标签。只有永久标签在重启后是一致的。有关标签之间差异的更多信息,请参阅 。
永久标签可以是通用标签或文件系统标签。永久文件系统标签可以使用 或 创建。这些类型的标签会在 /dev 的子目录中创建,并根据文件系统类型命名。例如,UFS2 文件系统标签将在 /dev/ufs 中创建。通用永久标签可以使用 glabel label
创建。这些标签不特定于文件系统,会在 /dev/label 中创建。
临时标签会在下次重启时销毁。这些标签创建在 /dev/label 中,适合实验用途。可以使用 glabel create
创建临时标签。
要为 UFS2 文件系统创建永久标签而不销毁任何数据,请执行以下命令:
此时应在 /dev/ufs 中创建一个标签,可以将其添加到 /etc/fstab 中:
注意
在运行
tunefs
时,文件系统不能被挂载。
现在,可以挂载该文件系统:
从此以后,只要 geom_label.ko 内核模块在启动时加载(通过 /boot/loader.conf 或启用 GEOM_LABEL
内核选项),设备节点的变化不会对系统产生不良影响。
以下命令可以用于销毁标签:
以下示例展示了如何标记引导磁盘的分区。
示例 1. 标记引导磁盘上的分区
通过永久标记引导磁盘上的分区,即使磁盘被移动到其他控制器或转移到不同的系统,系统仍应能够继续正常启动。此示例假设使用的是单个 ATA 硬盘,并且该硬盘目前被系统识别为 ad0。还假设使用的是标准 FreeBSD 分区方案,其中包括 /、/var、/usr 和 /tmp,以及一个交换分区。
系统将继续进入多用户模式启动。启动完成后,编辑 /etc/fstab,将常规设备名称替换为其各自的标签。最终的 /etc/fstab 文件将如下所示:
现在可以重新启动系统。如果一切顺利,系统将正常启动,mount
命令将显示:
在上述示例中,ad4s1d 代表 /var,而 ad4s1f 代表 /usr。使用显示的 ufsid
值,可以使用以下条目在 /etc/fstab 中挂载这些分区:
所有带有 ufsid
标签的分区都可以以这种方式挂载,从而消除了手动创建永久标签的需要,同时仍享受设备名称独立挂载的好处。
文件系统也可以通过在创建文件系统时使用 newfs
命令的 -L
选项来创建默认标签。有关更多信息,请参阅 。
重启系统,在 提示符下,按 4 进入单用户模式。然后输入以下命令:
类支持基于文件系统唯一标识符(ufsid
)的 UFS 文件系统标签。这些标签可以在 /dev/ufsid 中找到,并在系统启动时自动创建。可以使用 ufsid
标签通过 /etc/fstab 挂载分区。使用 glabel status
获取文件系统及其对应的 ufsid
标签列表: