20.8. 通过 GEOM 实现 UFS 日志

随着 FreeBSD 7.0 的发布, 提供了长期为人们所期待的日志功能的实现。 这个实现采用了 GEOM 子系统, 可以很容易地使用 gjournal(8) 工具来进行配置。

日志是什么? 日志的作用是保存文件系统事务的记录, 换言之, 完成一次完整的磁盘写入操作所需的变动, 这些记录会在元数据以及文件数据写盘之前, 写入到磁盘中。 这种事务日志可以在随后用于重放并完成文件系统事务, 以避免文件系统出现不一致的问题。

这种方法是另一种阻止文件系统丢失数据并发生不一致的方法。 与 Soft Updates 追踪并确保元数据更新顺序这种方法不同, 它会实际地将日志保存到指定为此项任务保留的磁盘空间上, 在某些情况下可全部存放到另外一块磁盘上。

与其他文件系统的日志实现不同, gjournal 采用的是基于块, 而不是作为文件系统的一部分的方式 - 它只是作为一种 GEOM 扩展实现。

如果希望启用 gjournal, FreeBSD 内核需要下列选项 - 这是 FreeBSD 7.0 以及更高版本系统上的默认配置:

options UFS_GJOURNAL

如果使用日志的卷需要在启动的时候被挂载, 还需加载 geom_journal.ko 内核模块, 将以下这行加入 /boot/loader.conf

geom_journal_load="YES"

这个功能也可被编译进一个定制的内核, 需在内核配置文件中加入以下这行:

options GEOM_JOURNAL

现在, 可以为空闲的文件系统创建日志了。 对于新增的 SCSI 磁盘 da4, 具体的操作步骤为:

# gjournal load# gjournal label /dev/da4

这样, 就会出现一个与 /dev/da4 设备节点对应的 /dev/da4.journal 设备节点。 接下来, 可以在这个设备上建立文件系统:

# newfs -O 2 -J /dev/da4.journal

这个命令将建立一个包含日志设备的 UFS2 文件系统。

然后就可以用 mount 命令来挂接设备了:

# mount /dev/da4.journal /mnt

注意:

当磁盘包含多个 slice 时, 每个 slice 上都会建立日志。 例如, 如果有 ad4s1ad4s2 这两个 slice, 则 gjournal 会建立 ad4s1.journalad4s2.journal

出于性能考虑, 可能会希望在其他磁盘上保存日志。 对于这类情形, 应该在启用日志的设备后面,给出日志提供者或存储设备。 在暨存的文件系统上, 可以用 tunefs 来启用日志; 不过, 在尝试修改文件系统之前, 您应对其进行备份。 多数情况下, 如果无法创建实际的日志, gjournal 就会失败, 并且不会防止由于不当使用 tunefs 而造成的数据丢失。

对于 FreeBSD 系统的启动磁盘使用日志也是可能的。 请参阅 Implementing UFS Journaling on a Desktop PC 以获得更多详细信息。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.