在系统初始化的过程中, FreeBSD 内核会为检测到的设备创建设备节点。 这种检测方式存在一些问题, 例如, 在通过 USB 添加设备时应如何处理? 很可能有闪存盘设备最初被识别为 da0 而在这之后, 则由 da0 变成了 da1。 而这则会在挂接 /etc/fstab 中的文件系统时造成问题, 这些问题, 还可能在系统引导时导致无法正常启动。
解决这个问题的一个方法是以连接拓扑方式链式地进行 SCSI 设备命名, 这样, 当在 SCSI 卡上增加新设备时, 这些设备将使用一个未用的编号。 但如果 USB 设备取代了主 SCSI 磁盘的位置呢? 由于 USB 通常会在 SCSI 卡之前检测到, 因此很可能出现这种现象。 当然, 可以通过在系统引导之后再插入这些设备来绕过这个问题。 另一种绕过这个问题的方法, 则是只使用 ATA 驱动器, 并避免在 /etc/fstab 中列出 SCSI 设备。
还有一种更好的解决方法。 通过使用 glabel 工具, 管理员或用户可以为磁盘设备打上标签, 并在 /etc/fstab 中使用这些标签。 由于 glabel 会将标签保存在对应 provider 的最后一个扇区, 在系统重启之后, 它仍会持续存在。 因此, 通过将具体的设备替换为使用标签表示, 无论设备节点变成什么, 文件系统都能够顺利地完成挂接。
注意: 这并不是说标签一定是永久性的。 glabel 工具既可以创建永久性标签, 也可以创建临时性标签。 在重启时, 只有永久性标签会保持。 请参见联机手册 glabel(8) 以了解两者之间的差异。
有两种类型的标签, 一种是普通标签, 另一种是文件系统标签。 两者的差异体现在是否能够自动检测, 以及是否在重启后保持。 这些标签会放到 /dev 中的特殊目录中, 这些目录的名字取决于文件系统类型。 例如, UFS2 文件系统的标签会创建到 /dev/ufs 目录中。
普通标签在系统下次重启时会消失, 这些标签会创建到 /dev/label 目录中, 很适合测试之用。
永久性标签可以使用 tunefs 或 newfs 工具来创建。 要为 UFS2 文件系统创建标签, 而不破坏其上的数据, 可以使用下面的命令:
# tunefs -L home /dev/da3
警告: 如果文件系统满了, 这可能会导致数据损坏; 不过, 如果文件系统快满了, 此时应首先删除一些无用的文件, 而不是增加标签。
现在, 您应可以在 /dev/ufs 目录中看到标签, 并将其加入 /etc/fstab:
/dev/ufs/home /home ufs rw 2 2
注意: 当运行 tunefs 时, 应首先卸下文件系统。
现在可以像平时一样挂接文件系统了:
# mount /home
现在, 只要在系统引导时通过 /boot/loader.conf 配置加载了内核模块 geom_label.ko, 或在联编内核时指定了 GEOM_LABEL 选项, 设备节点由于增删设备而顺序发生变化时, 就不会影响文件系统的挂接了。
通过使用 newfs 命令的 -L
参数, 可以在创建文件系统时为其添加默认的标签。 请参见联机手册 newfs(8)
以了解进一步的详情。
下列命令可以清除标签:
# glabel destroy home
本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.