Table of Contents
Zpool Administration
- Install ZFS on Debian GNU/Linux
- VDEVs
- RAIDZ
- The ZFS Intent Log (ZIL)
- The Adjustable Replacement Cache (ARC)
- Exporting and Importing Storage Pools
- Scrub and Resilver
- Getting and Setting Properties
- Best Practices and Caveats
ZFS Administration
- Copy-on-write
- Creating Filesystems
- Compression and Deduplication
- Snapshots and Clones
- Sending and Receiving Filesystems
- ZVOLs
- iSCSI, NFS and Samba
- Getting and Setting Properties
- Best Practices and Caveats
Appendices
Best Practices
As with all recommendations, some of these guidelines carry a great amount of weight, while others might not. You may not even be able to follow them as rigidly as you would like. Regardless, you should be aware of them. I’ll try to provide a reason why for each. They’re listed in no specific order. The idea of “best practices” is to optimize space efficiency, performance and ensure maximum data integrity.
- Always enable compression. There is almost certainly no reason to keep it disabled. It hardly touches the CPU and hardly touches throughput to the drive, yet the benefits are amazing.
- Unless you have the RAM, avoid using deduplication. Unlike compression, deduplication is very costly on the system. The deduplication table consumes massive amounts of RAM.
- Avoid running a ZFS root filesystem on GNU/Linux for the time being. It’s a bit too experimental for /boot and GRUB. However, do create datasets for /home/, /var/log/ and /var/cache/.
- Snapshot frequently and regularly. Snapshots are cheap, and can keep a plethora of file versions over time. Consider using something like the zfs-auto-snapshot script.
- Snapshots are not a backup. Use “zfs send” and “zfs receive” to send your ZFS snapshots to an external storage.
- If using NFS, use ZFS NFS rather than your native exports. This can ensure that the dataset is mounted and online before NFS clients begin sending data to the mountpoint.
- Don’t mix NFS kernel exports and ZFS NFS exports. This is difficult to administer and maintain.
- For /home/ ZFS installations, setting up nested datasets for each user. For example, pool/home/atoponce and pool/home/dobbs. Consider using quotas on the datasets.
- When using “zfs send” and “zfs receive”, send incremental streams with the “zfs send -i” switch. This can be an exceptional time saver.
- Consider using “zfs send” over “rsync”, as the “zfs send” command can preserve dataset properties.
Caveats
The point of the caveat list is by no means to discourage you from using ZFS. Instead, as a storage administrator planning out your ZFS storage server, these are things that you should be aware of, so as not to catch you with your pants down, and without your data. If you don’t head these warnings, you could end up with corrupted data. The line may be blurred with the “best practices” list above. I’ve tried making this list all about data corruption if not headed. Read and head the caveats, and you should be good.
- A “zfs destroy” can cause downtime for other datasets. A “zfs destroy” will touch every file in the dataset that resides in the storage pool. The larger the dataset, the longer this will take, and it will use all the possible IOPS out of your drives to make it happen. Thus, if it take 2 hours to destroy the dataset, that’s 2 hours of potential downtime for the other datasets in the pool.
- Debian and Ubuntu will not start the NFS daemon without a valid export in the /etc/exports file. You must either modify the /etc/init.d/nfs init script to start without an export, or create a local dummy export.
- Debian and Ubuntu, and probably other systems use a parallized boot. As such, init script execution order is no longer prioritized. This creates problems for mounting ZFS datasets on boot. For Debian and Ubuntu, touch the “/etc/init.d/.legacy-bootordering file, and make sure that the /etc/init.d/zfs init script is the first to start, before all other services in that runlevel.
- Do not create ZFS storage pools from files in other ZFS datasets. This will cause all sorts of headaches and problems.
- When creating ZVOLs, make sure to set the block size as the same, or a multiple, of the block size that you will be formatting the ZVOL with. If the block sizes do not align, performance issues could arise.
- When loading the “zfs” kernel module, make sure to set a maximum number for the ARC. Doing a lot of “zfs send” or snapshot operations will cache the data. If not set, RAM will slowly fill until the kernel invokes OOM killer, and the system becomes responsive. I have set in my /etc/modprobe.d/zfs.conf file “options zfs zfs_arc_max=2147483648″, which is a 2 GB limit for the ARC.

{ 6 } Comments
Awesome series! You just helped me to learn and plan deployment of ZFS for my Home NAS in a day. I have gone through the whole series and it’s been easy to follow while also providing details on necessary parts! Thank you!
18 Parts – enough stuff for a small book. Thank you very much for your efforts
great tips…
thank you very much!
Nice series !!!
I looked and my rhel6/oel6 box doesn’t have a “/etc/modprobe.d/zfs.conf ” file anywhere. Is that something you added & just put that one command in (options zfs zfs_arc_max=2147483648)?
I was also curious how you came up with 2GB as your limit & how much RAM your storage box has and whether you are using the box for anything else?
My box is currently dedicated to just ZFS & currently has 16GB and I was considering expanding to 32GB. If that scenario any idea what a good arc max is?
Thanks again !!!
Yeah. the /etc/modprobe.d/zfs.conf is manually created. The 2 GB is just an example. It’s up to how much RAM you have in your system. You should keep it under 1/4 your RAM size, IMO.
Just want to add my thanks for a great series and all the obvious effort that went into it. While I have enough desktop experience, I am a complete newbie to servers in general and ZFS in particular. You’ve given me the confidence to proceed.
{ 4 } Trackbacks
[...] Best Practices and Caveats [...]
[...] Best Practices and Caveats [...]
[...] Best Practices and Caveats [...]
[...] Best Practices and Caveats [...]
Post a Comment