diff --git a/posts/misc/a_quick_zfs_overview.rst b/posts/misc/a_quick_zfs_overview.rst new file mode 100644 index 0000000..65a5a27 --- /dev/null +++ b/posts/misc/a_quick_zfs_overview.rst @@ -0,0 +1,173 @@ +.. title: A quick ZFS overview on Linux +.. date: 2020-01-27 +.. slug: a-quick-zfs-overview-on-linux +.. updated: 2020-01-27 +.. status: published +.. tags: misc, zfs, file system +.. category: misc +.. authors: Elia El Lazkani +.. description: A overview of Linux on ZFS root +.. type: text + +I have, for years, been interested in *file systems*. Specifically a *file system* to run my personal systems on. +For most people **Ext4** is good enough and that is totally fine. But, as a power user, I like to have more control, more features and more options out of my file system. + +I have played with most of file sytsems on Linux, and have been using **Btrfs** for a few years now. I have worked with NAS systems running on **ZFS** and have been very impressed by it. +The only problem is that **ZFS** wasn't been well suppored on Linux at the time. **Btrfs** promissed to be the **ZFS** replacement for Linux nativetly, especially that it was backed up by a bunch of the giants like Oracle and RedHat. +My decision at that point was made, and yes that was before RedHat's support for **XFS** which is impressive on its own. +Recently though, a new project gave everyone hope. `OpenZFS `_ came to life and so did `ZFS on Linux `_. + +.. TEASER_END + +Linux has had **ZFS** support for a while now but mostly to manage a **ZFS** *file system*, so I kept watching until I saw a blog post by **Ubuntu** entitled `Enhancing our ZFS support on Ubuntu 19.10 – an introduction `_. + +In the blog post above, I read the following: + + We want to support ZFS on root as an experimental installer option, initially for desktop, + but keeping the layout extensible for server later on. The desktop will be the first + beneficiary in Ubuntu 19.10. Note the use of the term ‘experimental’ though! + +My eyes widened at this point. I know that **Ubuntu** has had native **ZFS** support since 2016 but now I could install it with one click. At that point I was all in, and I went back to **Ubuntu**. + + +Ubuntu on root ZFS +================== + +You heard me right, the **Ubuntu** installer offers an 'experimental' install on **ZFS**. I made the decision based on the well tested stability of **ZFS** in production environments and its ability to offer me the flexibility and the ability to backup and recover my data easily. +In other words, if **Ubuntu** doesn't work, **ZFS** is there and I can install whatever I like on top and if you are familiar with **ZFS** you know exactly what I mean and I have barely scratched the ice on its capabilities. + + +So here I was with **Ubuntu** installed on my laptop on root **ZFS**. So I had to do it. + +.. code:: text + + # zpool status -v + pool: bpool + state: ONLINE + status: The pool is formatted using a legacy on-disk format. The pool can + still be used, but some features are unavailable. + action: Upgrade the pool using 'zpool upgrade'. Once this is done, the + pool will no longer be accessible on software that does not support + feature flags. + scan: none requested + config: + + NAME STATE READ WRITE CKSUM + bpool ONLINE 0 0 0 + nvme0n1p4 ONLINE 0 0 0 + + errors: No known data errors + + pool: rpool + state: ONLINE + scan: none requested + config: + + NAME STATE READ WRITE CKSUM + rpool ONLINE 0 0 0 + nvme0n1p5 ONLINE 0 0 0 + + errors: No known data errors + +.. note:: + + I have read somewhere in a blog about **Ubuntu** that I should not run an upgrade on the boot pool. + +and it's running on... + +.. code:: text + + # uname -s -v -i -o + Linux #28-Ubuntu SMP Wed Dec 18 05:37:46 UTC 2019 x86_64 GNU/Linux + +Well that was pretty easy. + + +ZFS Pools +========= + +Let's take a look at how the installer has configured the *pools*. + +.. code:: text + + # zpool list zo 23:21 + NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT + bpool 1,88G 158M 1,72G - - - 8% 1.00x ONLINE - + rpool 472G 7,91G 464G - - 0% 1% 1.00x ONLINE - + +So it creates a *boot* pool and a *root* pool. Maybe looking at the **datasets** would give us a better idea. + + +ZFS Datasets +============ + +Let's look at the sanitized version of the datasets. + +.. code:: text + + # zfs list + NAME USED AVAIL REFER MOUNTPOINT + bpool 158M 1,60G 176K /boot + bpool/BOOT 157M 1,60G 176K none + bpool/BOOT/ubuntu_xxxxxx 157M 1,60G 157M /boot + rpool 7,92G 449G 96K / + rpool/ROOT 4,53G 449G 96K none + rpool/ROOT/ubuntu_xxxxxx 4,53G 449G 3,37G / + rpool/ROOT/ubuntu_xxxxxx/srv 96K 449G 96K /srv + rpool/ROOT/ubuntu_xxxxxx/usr 208K 449G 96K /usr + rpool/ROOT/ubuntu_xxxxxx/usr/local 112K 449G 112K /usr/local + rpool/ROOT/ubuntu_xxxxxx/var 1,16G 449G 96K /var + rpool/ROOT/ubuntu_xxxxxx/var/games 96K 449G 96K /var/games + rpool/ROOT/ubuntu_xxxxxx/var/lib 1,15G 449G 1,04G /var/lib + rpool/ROOT/ubuntu_xxxxxx/var/lib/AccountServices 96K 449G 96K /var/lib/AccountServices + rpool/ROOT/ubuntu_xxxxxx/var/lib/NetworkManager 152K 449G 152K /var/lib/NetworkManager + rpool/ROOT/ubuntu_xxxxxx/var/lib/apt 75,2M 449G 75,2M /var/lib/apt + rpool/ROOT/ubuntu_xxxxxx/var/lib/dpkg 36,5M 449G 36,5M /var/lib/dpkg + rpool/ROOT/ubuntu_xxxxxx/var/log 11,0M 449G 11,0M /var/log + rpool/ROOT/ubuntu_xxxxxx/var/mail 96K 449G 96K /var/mail + rpool/ROOT/ubuntu_xxxxxx/var/snap 128K 449G 128K /var/snap + rpool/ROOT/ubuntu_xxxxxx/var/spool 112K 449G 112K /var/spool + rpool/ROOT/ubuntu_xxxxxx/var/www 96K 449G 96K /var/www + rpool/USERDATA 3,38G 449G 96K / + rpool/USERDATA/user_yyyyyy 3,37G 449G 3,37G /home/user + rpool/USERDATA/root_yyyyyy 7,52M 449G 7,52M /root + +.. note:: + + The installer have created some random IDs that I have not figured out if they are totally random or mapped to something so I have sanitized them. + I also sanitized the user, of course. ;) + +It looks like the installer created a bunch of datasets with their respective mountpoints. + + +ZFS Properties +============== + +**ZFS** has a list of features and they are tunable in different ways, one of them is through the properties, let's have a look. + +.. code:: text + + # zfs get all rpool + NAME PROPERTY VALUE SOURCE + rpool type filesystem - + rpool creation vr jan 24 23:04 2020 - + rpool used 7,91G - + rpool available 449G - + rpool referenced 96K - + rpool compressratio 1.43x - + rpool mounted no - + rpool quota none default + rpool reservation none default + rpool recordsize 128K default + rpool mountpoint / local + ... + +This gives us an idea on properties set on the dataset specified, in this case, the *rpool* root dataset. + + +Conclusion +========== + +I read in a blog post that the **Ubuntu** team responsible for the **ZFS** support has followed all the **ZFS** best practices in the installer. +I have no way of verifying that as I am not a **ZFS** expert but I'll be happy to take their word for it until I learn more. +What is certain for now is that I am running on **ZFS**, and I will be enjoying its features to the fullest. \ No newline at end of file