|
|||
1. Solaris ZFS File System (Introduction) 3. ZFS and Traditional File System Differences 6. Working With ZFS Snapshots and Clones 7. Using ACLs to Protect ZFS Files 8. ZFS Delegated Administration |
Saving and Restoring ZFS DataThe zfs send command creates a stream representation of a snapshot that is written to standard output. By default, a full stream is generated. You can redirect the output to a file or to a different system. The zfs receive command creates a snapshot whose contents are specified in the stream that is provided on standard input. If a full stream is received, a new file system is created as well. You can save ZFS snapshot data and restore ZFS snapshot data and file systems with these commands. See the examples in the next section. The following solutions for saving ZFS data are provided:
Consider the following when choosing a solution for saving ZFS data:
Saving ZFS Data With Other Backup ProductsIn addition to the zfs send and zfs receive commands, you can also use archive utilities, such as the tar and cpio commands, to save ZFS files. All of these utilities save and restore ZFS file attributes and ACLs. Check the appropriate options for both the tar and cpio commands. For up-to-date information about issues with ZFS and third-party backup products, please see the Solaris Express Developer Edition release notes. http://opensolaris.org/os/community/zfs/faq/#backupsoftware Saving a ZFS SnapshotThe most common use of the zfs send command is to save a copy of a snapshot and receive the snapshot on another system that is used to store backup data. For example: host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana When sending a full stream, the destination file system must not exist. You can save incremental data by using the zfs send -i option. For example: host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana Note that the first argument is the earlier snapshot and the second argument is the later snapshot. In this case, the newtank/dana file system must exist for the incremental receive to be successful. The incremental snapshot1 source can be specified as the last component of the snapshot name. This shortcut means you only have to specify the name after the @ sign for snapshot1, which is assumed to be from the same file system as snapshot2. For example: host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana This syntax is equivalent to the above example of the incremental syntax. The following message is displayed if you attempt to generate an incremental stream from a different file system snapshot1: cannot send 'pool/fs@name': not an earlier snapshot from the same fs If you need to store many copies, you might consider compressing a ZFS snapshot stream representation with the gzip command. For example: # zfs send pool/fs@snap | gzip > backupfile.gz Restoring a ZFS SnapshotKeep the following key points in mind when you restore a file system snapshot:
For example: # zfs send tank/gozer@0830 > /bkups/gozer.083006 # zfs receive tank/gozer2@today < /bkups/gozer.083006 # zfs rename tank/gozer tank/gozer.old # zfs rename tank/gozer2 tank/gozer You can use zfs recv as an alias for the zfs receive command. If you make a change to the file system and you want to do another incremental send of a snapshot, you must first rollback the receiving file system. For example, if you make a change to the file system as follows: host2# rm newtank/dana/file.1 And you do an incremental send of tank/dana@snap3, you must first rollback the receiving file system to receive the new incremental snapshot. You can eliminate the rollback step by using the -F option. For example: host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana When you receive an incremental snapshot, the destination file system must already exist. If you make changes to the file system and you do not rollback the receiving file system to receive the new incremental snapshot or you do not use the -F option, you will see the following message: host1# zfs send -i tank/dana@snap4 tank/dana@snap5 | ssh host2 zfs recv newtank/dana cannot receive: destination has been modified since most recent snapshot The following checks are performed before the -F option is successful:
Sending and Receiving Complex ZFS Snapshot StreamsThis section describes how to use the zfs send -I and -R options to send and receive more complex snapshot streams. Keep the following points in mind when sending and receiving ZFS snapshot streams:
A group of incremental snapshots can be combined into one snapshot by using the zfs send -I option. For example: # zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I Remove snapshots B, C, and D. # zfs destroy pool/fs@snapB # zfs destroy pool/fs@snapC # zfs destroy pool/fs@snapD Restore the combined snapshot. # zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - You can also use the zfs send -I command to combine a snapshot and a clone snapshot to create a combined dataset. For example: # zfs create pool/fs # zfs snapshot pool/fs@snap1 # zfs clone pool/fs@snap1 pool/clone # zfs snapshot pool/clone@snapA # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I # zfs destroy pool/clone@snapA # zfs destroy pool/clone # zfs receive -F pool/clone < /snaps/fsclonesnap-I Use the zfs send -R command to replicate a ZFS file system and all descendent file systems, up to the named snapshot. When received, all properties, snapshots, descendent file systems, and clones are preserved. In the following example, snapshots are created of user file systems. One replication stream is created of all user snapshots. Then, the original file systems and snapshots are destroyed and recovered. # zfs snapshot -r users@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 187K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - # zfs send -R users@today > /snaps/users-R # zfs destroy -r users # zfs receive -F -d users < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 196K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - You can use the zfs send R command to replicate the users dataset and its descendents and send the replicated stream to another pool, users2. # zfs create users2 mirror c0t1d0 c1t1d0 # zfs receive -F -d users2 < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 224K 33.2G 22K /users users@today 0 - 22K - users/user1 33K 33.2G 18K /users/user1 users/user1@today 15K - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - users2 188K 16.5G 22K /users2 users2@today 0 - 22K - users2/user1 18K 16.5G 18K /users2/user1 users2/user1@today 0 - 18K - users2/user2 18K 16.5G 18K /users2/user2 users2/user2@today 0 - 18K - users2/user3 18K 16.5G 18K /users2/user3 users2/user3@today 0 - 18K - Remote Replication of ZFS DataYou can use the zfs send and zfs recv commands to remotely copy a snapshot stream representation from one system to another system. For example: # zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today This command saves the tank/cindy@today snapshot data and restores it into the sandbox/restfs file system and also creates a restfs@today snapshot on the newsys system. In this example, the user has been configured to use ssh on the remote system. |
||
|