18.11. 文件系统快照

FreeBSD 提供了一个与软更新相结合的功能:文件系统快照。

UFS 快照允许用户创建指定文件系统的映像,并将其视为一个文件。快照文件必须在执行该操作的文件系统中创建,并且用户可以在每个文件系统中创建不超过 20 个快照。活动快照被记录在超级区块中,因此它们在卸载和重挂操作以及系统重启时都是持久的。当快照不再需要时,可以用 rm(1) 删除它。虽然快照可以以任何顺序被移除,但所有使用过的空间可能不会被获取,因为另一个快照可能会需要一些被释放的块。

不可更改的快照文件标志是由 mksnap_ffs(8) 在最初创建快照文件后设置的。unlink(1) 对快照文件做了例外处理,因为它允许它们被删除。

快照通过 mount(8) 创建。要把 /var 的快照放在 /var/snapshot/snap 文件中,使用下面的命令:

  1. # mount -u -o snapshot /var/snapshot/snap /var

或者使用 mksnap_ffs(8) 来创建快照:

  1. # mksnap_ffs /var /var/snapshot/snap

可以使用 find(1) 在文件系统上找到快照文件,例如 /var:

  1. # find /var -flags snapshot

创建的快照,它有几种用途:

  • 一些管理员会将快照文件用于备份目的,因为快照可以被传输到 CD 或磁带。

  • 文件系统完整性检查器 fsck(8) 可以在快照上运行。假设文件系统在被挂载时是干净的,这应该总是提供一个干净和不变的结果。

  • 在快照上运行 dump(8) 会产生一个与文件系统和快照的时间戳一致的 dump 文件。dump(8) 也可以使用 -L 来获取快照,创建 dump 映像,然后删除快照。

  • 快照可以作为文件系统的冻结镜像被挂载。要挂载快照 /var/snapshot/snap,请运行:

  1. # mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4
  2. # mount -r /dev/md4 /mnt

被冻结的 /var 现在可以通过 /mnt 使用。所有文件最初都将处于快照创建时的状态。唯一的例外是,任何早期的快照将显示为零长度的文件。要解除对快照的挂载,请使用:

  1. # umount /mnt
  2. # mdconfig -d -u 4

有关softupdates和文件系统快照的更多信息,包括技术报告,请访问 Marshall Kirk McKusick 的网站:http://www.mckusick.com/