Add ZFS usage tips to freebsd-tips.

Add a bunch of examples on how to use ZFS features like:
- listing available space,
- setting and displaying a userquota,
- displaying pool I/O statistics and pool history,
- displaying the compression ratio for a dataset,
- various list options (sorting, removing headers),
- performing a dry-run of a snapshot delete,
- removing a range of snapshots,
- setting a custom property,
- preventing removal of a snapshot with ZFS holds,
- permission sets for zfs send/receive.

Additionally, clarify the existing examples a bit when
it comes to displaying space by mentioning UFS explicitly.
Other examples include displaying I/O in top(1), querying
sysctl(8) for active CPUs and available RAM. Mention systat(1)
and its options, too.
While here, reformat the example to upload a dmesg(8) a bit
to wrap properly.

Thanks to Allan Jude for his help with some of the ZFS examples.

Reviewed by:	dru,allanjude
Approved by:	allanjude (earlier version)
MFC after:	3 days
Relnotes:	yes (ZFS examples in freebsd-tips)
Differential Revision:	https://reviews.freebsd.org/D18541
This commit is contained in:
Benedict Reuschling 2019-01-24 18:13:23 +00:00
parent 989321df11
commit 56d417fd5d

View File

@ -270,12 +270,12 @@ To see how long it takes a command to run, type the word "time" before the
command name.
-- Dru <genesis@istar.ca>
%
To see how much disk space is left on your partitions, use
To see how much disk space is left on your UFS partitions, use
df -h
-- Dru <genesis@istar.ca>
%
To see the 10 largest files on a directory or partition, use
To see the 10 largest files on a directory or UFS partition, use
du -h /partition_or_directory_name | sort -rh | head
-- Dru <genesis@istar.ca>
@ -554,9 +554,241 @@ Use "sysrc name=value" to add an entry and "sysrc -x name" to delete an entry.
-- Lars Engels <lme@FreeBSD.org>
%
You can upload the dmesg of your system to help developers get an overview of commonly used hardware and peripherals for FreeBSD.
Use the curl package to upload it in one command:
You can upload the dmesg of your system to help developers get an overview of commonly
used hardware and peripherals for FreeBSD. Use the curl package to upload it like this:
curl -v -d "nickname=$USER" -d "description=FreeBSD/$(uname -m) on \
$(kenv smbios.system.maker) $(kenv smbios.system.product)" -d "do=addd" \
--data-urlencode 'dmesg@/var/run/dmesg.boot' http://dmesgd.nycbug.org/index.cgi
%
Want to know how much memory (in bytes) your machine has available? Let
sysctl(8) tell you with the following command:
sysctl hw.physmem
The number of active CPUs is displayed using this command:
sysctl hw.ncpu
-- Benedict Reuschling <bcr@FreeBSD.org>
%
When using ZFS as the file system the "df" command will display confusing
values. Use the built-in "zfs list" command to get an overview of space usage:
zfs list -o space
-- Benedict Reuschling <bcr@FreeBSD.org>
%
To learn more about what your system is doing, take a look at systat(1). For
example, to get an overview of I/O happening in the system, run:
systat -iostat
Other values are icmp, icmp6, ifstat, ip, ip6, netstat, pigs, sctp, swap, tcp,
vmstat, or zarc. You can switch between displays using :<display> and exit
back to your shell by typing
:quit
-- Benedict Reuschling <bcr@FreeBSD.org>
%
To set a quota of 10 GB for the user named foo on a ZFS dataset, run the
following command:
# zfs set userquota@foo=10G pool/home/foo
The zfs userspace command can display the quota and current space usage:
# zfs userspace pool/home/foo
To unset a quota, assign "none" as the value.
-- Benedict Reuschling <bcr@FreeBSD.org>
%
ZFS can display I/O statistics for a given pool using the iostat subcommand.
By default, it will display one line of current activity. To display stats
every 5 seconds run the following command (cancel with CTRL+C):
zpool iostat 5
To view individual disk activities, specify the -v parameter:
zpool iostat -v
Of course, both can be combined. For more options, see zpool(8).
-- Benedict Reuschling <bcr@FreeBSD.org>
%
FreeBSD's top(1) utility displays CPU statistics by default.
To display I/O activity for each process instead, run top like this:
top -m io
-- Benedict Reuschling <bcr@FreeBSD.org>
%
ZFS keeps a history of commands run against a specific pool using the
history subcommand to zpool:
zpool history
More details are available using the -i and -l parameters. Note that ZFS
will not keep the complete pool history forever and will remove older
events in favor of never ones.
-- Benedict Reuschling <bcr@FreeBSD.org>
%
To display the compression ratio for the ZFS dataset /var/log on the pool
mypool, run the following command:
zfs get refcompressratio mypool/var/log
The refcompressratio will only display the compression ratio for that specific
dataset, not the descendant datasets. To include the child datasets, the
command looks like this:
zfs get compressratio mypool/var
-- Benedict Reuschling <bcr@FreeBSD.org>
%
You can limit the depth of the displayed datasets in the "zfs list" output
using the -d parameter. To display only the first level of datasets below
mypool/usr and not the ones deeper than those, run this command:
zfs list -d 1 mypool/usr
-- Benedict Reuschling <bcr@FreeBSD.org>
%
The "zfs list" command can be filtered in multiple ways. To display just
the dataset name, use the -o parameter:
zfs list -o name mypool/usr
More columns and their order can be defined by separating them with commas:
zfs list -o mountpoint,name,avail
-- Benedict Reuschling <bcr@FreeBSD.org>
%
The output of "zfs list" can be sorted by a specific column using -s. To
sort the datasets by the "used" column in ascending order, run this command:
zfs list -s used
To sort in descending order instead, use -S:
zfs list -S used
-- Benedict Reuschling <bcr@FreeBSD.org>
%
To make the "zfs list" output more script-friendly, you can suppress the
output of the headers for each column by passing the -H parameter:
zfs list -H
Another helpful option for script writers is -p, which displays the numbers
in non-rounded, exact values:
zfs list -p
-- Benedict Reuschling <bcr@FreeBSD.org>
%
Before deleting a dataset or snapshot, perform a dry run using the -n
parameter. This is to make sure you really want to delete just that
dataset/snapshot and not any dependent ones. ZFS will display the resulting
action when -n is combined with the -v option without actually performing
it:
zfs destroy -rvn mypool@mysnap
Once you are sure this is exactly what you intend to do, remove the -n
parameter to execute the destroy operation.
-- Benedict Reuschling <bcr@FreeBSD.org>
%
You can delete a range of ZFS snapshots (a-z) in multiple ways.
The following will delete d and all earlier snapshots:
zfs destroy mypool/data@%d
To delete d and all later snapshots:
zfs destroy mypool/data@d%
To delete all dataset snapshots:
zfs destroy mypool/data@%
Make sure to let ZFS perform a dry run (-n option) first and display (-v) what
it would do to confirm that the delete operation is removing exactly what you
intended.
-- Benedict Reuschling <bcr@FreeBSD.org>
%
To set a custom ZFS property on the mypool pool, you need to provide it
using the "key1:key2=value" syntax, where the colon (:) is used as the
separator and identifier from the built-in ZFS properties:
# zfs set warranty:expires=2038-01-19 mypool
The custom property is applied to all datasets and can be queried like any
built-in properties using zfs get:
zfs get warranty:expires mypool
To reset the value of a custom property, use the inherit subcommand:
# zfs inherit warranty:expires mypool
Removing a custom property from a pool is done using the -r flag to the
"zfs inherit" command:
# zfs inherit -r warranty:expires mypool
-- Benedict Reuschling <bcr@FreeBSD.org>
%
To delete a range of ZFS snapshots, use the % (percent) character after the
full path to the first snapshot that should be included. For example, to
simulate deleting snapshots a through (including) d, use this command:
# zfs destroy -rvn mypool/tmp@a%d
Once you are sure that this is what you want, remove the -n option:
# zfs destroy -rv mypool/tmp@a%d
-- Benedict Reuschling <bcr@FreeBSD.org>
%
You can prevent the removal of a ZFS snapshot by using the hold subcommand.
For example, to prevent the snapshot called milestone from deletion, run the
following command:
# zfs hold milestone_hold mypool/projects@my_milestone
The "zfs holds" command will list all current snapshots that are protected
this way (-r for a recursive list):
# zfs holds -r mypool
The TIMESTAMP column in the output of the above command is from when the
hold was created, not the snapshot it holds. The "zfs destroy" command will
echo a "dataset is busy" message on the console when it encounters a hold.
Use "zfs release" to release the hold on the snapshot:
# zfs release milestone_hold mypool/projects@my_milestone
-- Benedict Reuschling <bcr@FreeBSD.org>
%
A user "sender" needs the following permissions set to send a ZFS dataset:
# zfs allow -u sender send,snapshot txpool
On the receiving side, the user "receiver" requires these permissions:
# zfs allow -u receiver compression,mountpoint,mount,create,receive rxpool
-- Benedict Reuschling <bcr@FreeBSD.org>
%
Don't let your zpool fill up completely by creating a dataset with
reservation.
# zfs create -o refreservation=<5% of total pool space> <poolname>/reserved
You can always shrink the reserve if you need the space, but your pool will
always have space left this way.
-- Benedict Reuschling <bcr@FreeBSD.org>
%