Adding a new post on the Ubuntu ZFS installation
This commit is contained in:
parent
30a82b41d3
commit
a098670a30
1 changed files with 173 additions and 0 deletions
173
posts/misc/a_quick_zfs_overview.rst
Normal file
173
posts/misc/a_quick_zfs_overview.rst
Normal file
|
@ -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 <http://www.open-zfs.org/wiki/Main_Page>`_ came to life and so did `ZFS on Linux <https://zfsonlinux.org/>`_.
|
||||||
|
|
||||||
|
.. 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 <https://ubuntu.com/blog/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.
|
Reference in a new issue