==== List the sizes and available space in all filesystems on ZFS appliance ====
* [[https://docs.oracle.com/cd/E51475_01/html/E52872/user_interface__cli__scripting__interacting_with_the_system.html#scrolltoc|ZFS Appliance scripting]]\\
Make sure to be in the root context before running this.
script
run('shares');
projects = list();
printf('%-40s %-10s %-10s\
', 'SHARE', 'USED', 'AVAILABLE');
for (i = 0; i < projects.length; i++) {
run('select ' + projects[[i]]);
shares = list();
for (j = 0; j < shares.length; j++) {
run('select ' + shares[[j]]);
share = projects[[i]] + '/' + shares[[j]];
used = run('get space_data').split(/\\s+/)[[3]];
avail = run('get space_available').split(/\\s+/)[[3]];
printf('%-40s %-10s %-10s\
', share, used, avail);
run('cd ..');
}
run('cd ..');
}
.
and the same information but "machine readable" sizes
script
fmt = '%-40s %-15s %-15s\
';
printf(fmt, 'SHARE', 'USED', 'AVAILABLE');
run('cd /');
run('shares');
pools = choices('pool');
for (p = 0; p < pools.length; p++) {
set('pool', pools[[p]]);
projects = list();
for (i = 0; i < projects.length; i++) {
run('select ' + projects[[i]]);
shares = list();
for (j = 0; j < shares.length; j++) {
run('select ' + shares[[j]]);
share = pools[[p]] + ':' + projects[[i]] + '/' + shares[[j]];
printf(fmt, share, get('space_data'),
get('space_available'));
run('cd ..');
}
run('cd ..');
}
}
.
==== Create a pool ====
[[sudo]] zfs create datapool mirror /dev/sdc /dev/sdd
[[sudo]] zfs list
==== Create a ZFS filesystem / dataset in the pool ====
[[sudo]] zfs create datapool/scripts -o mountpoint=/scripts
[[sudo]] zfs list -r datapool
==== Create a snapshot of the filesystem ====
[[sudo]] zfs snapshot datapool/scripts@snap1
[[sudo]] zfs list -t snapshot
==== Destroy a snapshot ====
[[sudo]] zfs destroy datapool/scripts@snap1
[[sudo]] zfs list -t snapshot
==== Rollback a snapshot ====
=== Create a file followed by a snapshot to preserve situation ===
[[sudo]] echo "hello" >/scripts/test1.txt
[[sudo]] cat /scripts/test1.txt
[[sudo]] zfs snapshot datapool/scripts@before
[[sudo]] zfs list -t snapshot
=== Change the contents of the file ===
[[sudo]] echo "goodbee" >/scripts/test1.txt
[[sudo]] cat /scripts/test1.txt
=== Rollback to previous snapshot and see original file contents ===
[[sudo]] zfs list -t snapshot
[[sudo]] zfs rollback datapool/scripts@before
[[sudo]] cat /scripts/test1.txt
[[sudo]] zfs list -t snapshot
==== Rename a snapshot ====
[[sudo]] zfs rename datapool/scripts@before datapool/scripts@after
[[sudo]] zfs list -t snapshot
==== Destroy a filesystem ====
[[sudo]] zfs destroy datapool/scripts
[[sudo]] zfs list -r datapool
If there are snapshots of the filesystem, add -r to force the destruction
[[sudo]] zfs destroy -r datapool/scripts
[[sudo]] zfs list -t snapshot
==== Create a clone ====
Clones can only be created from a snapshot.\\
Snapshots cannot be deleted unless the clone is deleted.\\
Clone the snapshot datapool/scripts@before
[[sudo]] zfs clone datapool/scripts@before datapool/clone1
zfs list
ls /datapool/clone1
=== Attempt to destroy underlying snapshot ===
=== Attempt to destroy underlying snapshot ===
[[sudo]] zfs destroy datapool/scripts@before
=== Destroy clone first ===
[[sudo]] zfs destroy datapool/clone1
=== Attempt to destroy underlying snapshot again ===
[[sudo]] zfs destroy datapool/scripts@before