FreeBSD offers a feature in conjunction with Soft Updates: File system snapshots.
Snapshots allow a user to create images of specified file systems, and treat them as a file. Snapshot files must be created in the file system that the action is performed on, and a user may create no more than 20 snapshots per file system. Active snapshots are recorded in the superblock so they are persistent across unmount and remount operations along with system reboots. When a snapshot is no longer required, it can be removed with the standard rm(1) command. Snapshots may be removed in any order, however all the used space may not be acquired because another snapshot will possibly claim some of the released blocks.
The un-alterable snapshot
file flag is set
by mksnap_ffs(8) after initial creation of a snapshot file.
The unlink(1) command makes an exception for snapshot files
since it allows them to be removed.
Snapshots are created with the mount(8) command. To place
a snapshot of /var
in the file
/var/snapshot/snap
use the following
command:
#
mount -u -o snapshot /var/snapshot/snap /var
Alternatively, you can use mksnap_ffs(8) to create a snapshot:
#
mksnap_ffs /var /var/snapshot/snap
One can find snapshot files on a file system (e.g. /var
)
by using the find(1) command:
#
find /var -flags snapshot
Once a snapshot has been created, it has several uses:
Some administrators will use a snapshot file for backup purposes, because the snapshot can be transfered to CDs or tape.
The file system integrity checker, fsck(8), may be run on the snapshot. Assuming that the file system was clean when it was mounted, you should always get a clean (and unchanging) result. This is essentially what the background fsck(8) process does.
Run the dump(8) utility on the snapshot.
A dump will be returned that is consistent with the
file system and the timestamp of the snapshot. dump(8)
can also take a snapshot, create a dump image and then
remove the snapshot in one command using the
-L
flag.
mount(8) the snapshot as a frozen image of the file system.
To mount(8) the snapshot
/var/snapshot/snap
run:
#
mdconfig -a -t vnode -f /var/snapshot/snap -u 4
#
mount -r /dev/md4 /mnt
You can now walk the hierarchy of your frozen /var
file system mounted at /mnt
. Everything will
initially be in the same state it was during the snapshot creation time.
The only exception is that any earlier snapshots will appear
as zero length files. When the use of a snapshot has delimited,
it can be unmounted with:
#
umount /mnt
#
mdconfig -d -u 4
For more information about softupdates
and
file system snapshots, including technical papers, you can visit
Marshall Kirk McKusick's website at
http://www.mckusick.com/
.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.