随着 FreeBSD 7.0 的发布, 提供了长期为人们所期待的日志功能的实现。 这个实现采用了 GEOM 子系统, 可以很容易地使用 gjournal(8) 工具来进行配置。
日志是什么? 日志的作用是保存文件系统事务的记录, 换言之, 完成一次完整的磁盘写入操作所需的变动, 这些记录会在元数据以及文件数据写盘之前, 写入到磁盘中。 这种事务日志可以在随后用于重放并完成文件系统事务, 以避免文件系统出现不一致的问题。
这种方法是另一种阻止文件系统丢失数据并发生不一致的方法。 与 Soft Updates 追踪并确保元数据更新顺序这种方法不同, 它会实际地将日志保存到指定为此项任务保留的磁盘空间上, 在某些情况下可全部存放到另外一块磁盘上。
与其他文件系统的日志实现不同,
gjournal
采用的是基于块, 而不是作为文件系统的一部分的方式 -
它只是作为一种
GEOM 扩展实现。
如果希望启用 gjournal
,
FreeBSD 内核需要下列选项 - 这是 FreeBSD 7.0 以及更高版本系统上的默认配置:
如果使用日志的卷需要在启动的时候被挂载, 还需加载
geom_journal.ko
内核模块,
将以下这行加入 /boot/loader.conf
:
这个功能也可被编译进一个定制的内核, 需在内核配置文件中加入以下这行:
现在, 可以为空闲的文件系统创建日志了。 对于新增的 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 以获得更多详细信息。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.