20.8. 通过 GEOM 实现 UFS 日志
上一页 | 第 20 章 GEOM： 模块化磁盘变换框架 | 下一页

## 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 上都会建立日志。 例如， 如果有 `ad4s1` 和 `ad4s2` 这两个 slice， 则 `gjournal` 会建立 `ad4s1.journal` 和 `ad4s2.journal`。

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

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

上一页 | 上一级 | 下一页
20.7. 为磁盘设备添加卷标 | 起始页 | 第 21 章 文件系统 Support

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

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.