ZFS Cheatsheet
This is a quick and dirty cheatsheet on Sun's ZFS
Directories and Files
| |
error messages | /var/adm/messages console |
States
| |
DEGRADED | One or more top-level devices is in the degraded state because they have become offline. Sufficient replicas exist to keep functioning |
FAULTED | One or more top-level devices is in the faulted state because they have become offline. Insufficient replicas exist to keep functioning |
OFFLINE | The device was explicity taken offline by the "zpool offline" command |
ONLINE | The device is online and functioning |
REMOVED | The device was physically removed while the system was running |
UNAVAIL | The device could not be opened |
Storage Pools
| |
displaying | zpool list zpool list -o name,size,altroot Note: there are a number of properties that you can select, the default is: name, size, used, available, capacity, health, altroot |
status | zpool status ## Show only errored pools with more verbosity zpool status -xv |
statistics | zpool iostat -v 5 5 Note: use this command like you would iostat |
history | zpool history -il |
creating | ## performing a dry run but don't actual perform the creation zpool create -n data01 c1t0d0s0 # you can persume that I created two files called /zfs1/disk01 and /zfs1/disk02 using mkfile zpool create data01 /zfs1/disk01 /zfs1/disk02 # using a standard disk slice zpool create data01 c1t0d0s0 ## using a different mountpoint than the default /<pool name> zpool create -m /zfspool data01 c1t0d0s0 # mirror and hot spare disks examples zpool create data01 mirror c1t0d0 c2t0d0 mirror c1t0d1 c2t0d1 zpool create data01 mirror c1t0d0 c2t0d0 spare c3t0d0 ## setting up a log device and mirroring it zpool create data01 mirror c1t0d0 c2t0d0 log mirror c3t0d0 c4t0d0 ## setting up a cache device zpool create data 01 mirror c1t0d0 c2t0d0 cache c3t0d0 c3t1d0 |
destroying | zpool destroy /zfs1/data01 ## in the event of a disaster you can re-import a destroyed pool zpool import -f -D -d /zfs1 data031 |
adding | zpool add data01 c2t0d0 Note: make sure that you get this right as zpool only supports the removal of hot spares and cache disks |
removing | zpool remove data01 c2t0d0 Note: zpool only supports the removal of hot spares and cache disks |
clearing faults | zpool clear data01 ## Clearing a specific disk fault zpool clear data01 c2t0d0 |
attaching | ## c2t0d0 is an existing disk that is not mirrored, by attaching c3t0d0 both disks will become a mirror pair zpool attach data01 c2t0d0 c3t0d0 |
detaching | zpool detach data01 c2t0d0 Note: see above notes is attaching |
onlining | zpool online data01 c2t0d0 |
offlining | zpool offline data01 c2t0d0 ## Temporary offlining (will revent back after a reboot) zpool offline data01 -t c2t0d0 |
Replacing | ## replacing like for like zpool replace data03 c2t0d0 ## replacing with another disk zpool replace data03 c2t0d0 c3t0d0 |
scrubbing | zpool scrub data01 ## stop a scrubbing in progress, check the scrub line using "zpool status data01" to see any errors zpool scrub -s data01 Note: Only one of scrubbing or resilvering can be running at the sametime scrubbing - examines all data to discover hardware faults or disk failures resilvering - examines only data that ZFS knows to be out of date |
exporting | zpool export data01 |
importing | ## when using standard disk devices i.e c2t0d0 zpool import data01 ## if using files in say the /zfs filesystem zpool import -d /zfs ## importing a destroyed pool zpool import -f -D -d /zfs1 data03 |
getting parameters | zpool get all data01 Note: the source column denotes if the value has been change from it default value, a dash in this column means it is a read-only value |
setting parameters | zpool set autoreplace=on data01 Note: use the command "zpool get all <pool>" to obtain list of current setting |
upgrade | ## List upgrade paths zpool upgrade -v ## upgrade all pools zpool upgrade -a ## upgrade specific pool, use "zpool get all <pool>" to obtain version number of a pool zpool upgrade data01 ## upgrade to a specific version zpool upgrade -V 10 data01 |
Filesystem
| |
displaying | zfs list ## list different types zfs list -t filesystem zfs list -t snapshot zfs list -t volume ## recursive display zfs list -r data01/oracle ## complex listing zfs list -o name,sharenfs,mountpoint Note: there are a number of attributes that you can use in a complex listing, so use the man page to see them all |
creating | ## persuming i have a pool called data01 create a /data01/apache filesystem zfs create data01/apache ## using a different mountpoint zfs create -o mountpoint=/oracle data01/oracle ## create a volume - the device can be accessed via /dev/zvol/[rdsk|dsk]/data03/swap zfs create -V 50mb data01/swap swap -a /dev/zvol/dsk/data01/swap Note: don't use a zfs volume as a dump device it is not supported |
destroying | zfs destroy data01/oracle ## using the recusive options -r = all children, -R = all dependants zfs destroy -r data01/oracle zfs destroy -R data01/oracle |
mounting | zfs mount data01 Note: there are all the normal mount options that you can apply i.e ro/rw, setuid |
unmounting | zfs umount data01 |
share | zfs share data01 ## Persist over reboots zfs set sharenfs=on data01 |
unshare | zfs unshare data01 ## persist over reboots zfs set sharenfs=off data01 |
snapshotting | ## creating a snapshot zfs snapshot data01@10022010 ## destroying a snapshot zfs destroy data01@10022010 |
rollback | zfs rollback data01@10022010 |
cloning/promoting | zfs clone data01@10022010 data03/clone ## promoting a clone zfs promote data03/clone Note: the clone must reside in the same pool |
renaming | ## the dataset must be kept within the same pool zfs rename data03/ora_disk01 data03/ora_d01 Note: you have two options -p creates all the non-existing parent datasets -r recursively rename the sanpshots of all descendent datasets (used with snapshots only) |
getting parameters | ## List all the properties zfs get all data03/oracle ## get a specific property zfs get setuid data03/oracle ## get a list of a specific properites for all datasets zfs get compression Note: the source column denotes if the value has been change from it default value, a dash in this column means it is a read-only value |
setting parameters | ## set and unset a quota zfs set quota=50M data03/oracle zfs set quota=none data03/oracle Note: use the command "zfs get all <dataset> " to obtain list of current settings |
inherit | ## set back to the default value zfs inherit compression data03/oracle |
upgrade | ## List the upgrade paths zfs upgrade -v ## List all the datasets that are not at the current level zfs upgrade ## upgrade a specific dataset upgrade -V <version> data03/oracle |
send/receive | ## here is a complete example of a send and receive with incremental update ## create some test files mkfile -v 100m /zfs/master mkdir -v 100m /zfs/slave ## create mountpoints mkdir /master mkdir /slave ## Create the pools zpool create master zpool create slave ## create the data filesystem zfs create master/data ## create a test file echo "created: 09:58" > /master/data/test.txt ## create a snapshot and send it to the slave, you could use SSH or tape to transfer to another server (see below) zfs snapshot master/data@1 zfs send master/data@1 | zfs receive slave/data ## set the slave to read-only because you can cause data corruption, make sure if do this before accessing anything the ## slave/data directory zfs set readonly=on slave/data ## update the original test.txt file echo "`date`" >> /master/data/text.txt ## create a second snapshot and send the differences, you may get an error message saying that the desination had been ## modified this is because you did not set the slave/data to ready only (see above) zfs snapshot master/data@2 zfs send master/data@1 master/data@2 | zfs receive slave/data --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ## using SSH zfs send master/data@1 | ssh backup_server zfs receive backups/data@1 ## using a tape drive, you can also use cpio zfs send master/data@1 > /dev/rmt/0 zfs receive slave/data2@1 < /dev/rmt/0 zfs rename slave/data slave/data.old zfs rename slave/data2 slave/data ## you can also save incremental data zfs send master/data@12022010 > /dev/rmt/0 zfs send -i master/data@12022010 master/data@13022010 > /dev/rmt/0 ## Using gzip to compress the snapshot zfs send master/fs@snap | gzip > /dev/rmt/0 |
allow/unallow | ## dislay the permissions set zfs allow master ## create permission set zfs allow -s @permset1 create,mount,snapshot,clone,promote master ## grant a user permissions zfs allow vallep @permset1 master ## revoke a user permissions zfs unallow vallep @permset1 master Note: there are many permissions that you can set so see the man page or just use the "zfs allow" command |