UbuntuでZFSを使ってみよう 第7回 Ubuntu 20.04 LTS でZFS bootが可能になりました(宮崎悟氏)
2020年4月23日、Ubuntu 20.04 LTS (Focal Fossa) がリリースされました。この20.04 LTS のDesktop版イメージでは、ZFS bootが実験的機能として組み込まれています。Server 版ではまだ使用できないので注意してください。これを機に、「UbuntuでZFSを使ってみよう」の連載も再開します。
ZFS boot でインストールする方法
まず、Ubuntu 20.04 LTS のisoイメージをダウンロードします。実験するためには、VirtualBox/Hyper-V/KVMなどの仮想マシンを使うほうが良いでしょう。適当な仮想マシンを用意し、ダウンロードしたisoイメージからブートします。
1. grubメニューで先頭のインストールを選び、しばらくするとインストール画面が表示されます。ここで言語を選び、「Ubuntuをインストール」を選択します。
2.キーボードレイアウトを設定し、「続ける」ボタンを押します。
3.インストールの種類で、「高度な機能」を選択します。
4.「実験的機能:ディスクを全消去してZFSを使用する」を選択し、「OK」ボタンを押します。
5.ディスクに変更を書き込みます。パーティションがESP、swap、bpool、rpool の4つに分けられることがわかります。
6.タイムゾーンを選択します。インストール言語に「日本語」を設定していると、あらかじめ「Tokyo」が選択されます。
7.ユーザリアルネーム、マシン名、ユーザ名、パスワードを入力します。
8.以下続けると、インストールが完了します。再起動を行います。
インストールされたZFSの内容
まず、マウントされたディレクトリを確認します。ファイルシステムが vfat もしくは ZFS のファイルシステムを抜き出したものが、以下になります。
$ mount | grep -e vfat -e zfs | sort
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/sda1 on /boot/grub type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
bpool/BOOT/ubuntu_f1xlv2 on /boot type zfs (rw,nodev,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2 on / type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/srv on /srv type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/usr/local on /usr/local type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/games on /var/games type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/lib on /var/lib type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/lib/AccountsService on /var/lib/AccountsService type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/lib/NetworkManager on /var/lib/NetworkManager type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/lib/apt on /var/lib/apt type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/lib/dpkg on /var/lib/dpkg type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/log on /var/log type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/mail on /var/mail type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/snap on /var/snap type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/spool on /var/spool type zfs (rw,relatime,xattr,posixacl)
rpool/ROOT/ubuntu_f1xlv2/var/www on /var/www type zfs (rw,relatime,xattr,posixacl)
rpool/USERDATA/root_z0ox2d on /root type zfs (rw,relatime,xattr,posixacl)
rpool/USERDATA/s-miyaza_z0ox2d on /home/s-miyaza type zfs (rw,relatime,xattr,posixacl)
最初の/boot/efi
はUEFIブート時に、 /boot/grub
はGrub使用時の領域です。/boot が bpool、それ以外の 領域が rpool という zpoolに分けられています。
/etc/fstab
を確認すると、以下のようになっています。ZFSはファイルシステム自体にマウントポイントが設定されているので、fstabに書いていなくても問題ありません。
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=BD28-5382 /boot/efi vfat umask=0022,fmask=0022,dmask=0022 0 1
/boot/efi/grub /boot/grub none defaults,bind 0 0
UUID=4ff87ebd-fdd6-48a0-bed1-bb2a531d6d26 none swap discard 0 0
bpool
は以下のような構成になっています。御存知のように、boot領域にはinitrd
とvmlinuz-*
が配置されています。bpool
が/boot
をマウントしているように見えますが、実際にはマウントされていません。/boot
はbpool/BOOT/ubuntu_f1xlv2
をマウントしています。
$ zpool status bpool
pool: bpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
bpool ONLINE 0 0 0
sda3 ONLINE 0 0 0
errors: No known data errors
$ zfs list -r bpool
NAME USED AVAIL REFER MOUNTPOINT
bpool 360M 1.40G 96K /boot
bpool/BOOT 353M 1.40G 96K none
bpool/BOOT/ubuntu_f1xlv2 353M 1.40G 185M /boot
$ zfs get mountpoint,mounted bpool
NAME PROPERTY VALUE SOURCE
bpool mountpoint /boot local
bpool mounted no -
$ zfs get mountpoint,mounted bpool/BOOT/ubuntu_f1xlv2
NAME PROPERTY VALUE SOURCE
bpool/BOOT/ubuntu_f1xlv2 mountpoint /boot local
bpool/BOOT/ubuntu_f1xlv2 mounted yes -
rpool
は以下のような構成になっています。rpool/ROOT
に/
以下の主要領域が、rpool/USERDATA
以下にユーザのデータが配置されます。
$ zpool status rpool
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
sda4 ONLINE 0 0 0
errors: No known data errors
$ zfs list -r rpool
NAME USED AVAIL REFER MOUNTPOINT
rpool 17.4G 879G 96K /
rpool/ROOT 12.3G 879G 96K none
rpool/ROOT/ubuntu_f1xlv2 12.3G 879G 3.27G /
rpool/ROOT/ubuntu_f1xlv2/srv 96K 879G 96K /srv
rpool/ROOT/ubuntu_f1xlv2/usr 15.0M 879G 96K /usr
rpool/ROOT/ubuntu_f1xlv2/var/games 96K 879G 96K /var/games
rpool/ROOT/ubuntu_f1xlv2/var/lib 6.36G 879G 1010M /var/lib
rpool/ROOT/ubuntu_f1xlv2/var/lib/AccountsService 656K 879G 112K /var/lib/AccountsService
rpool/ROOT/ubuntu_f1xlv2/var/lib/NetworkManager 5.30M 879G 160K /var/lib/NetworkManager
rpool/ROOT/ubuntu_f1xlv2/var/lib/apt 69.0M 879G 56.4M /var/lib/apt
rpool/ROOT/ubuntu_f1xlv2/var/lib/dpkg 91.8M 879G 37.2M /var/lib/dpkg
rpool/ROOT/ubuntu_f1xlv2/var/log 499M 879G 133M /var/log
rpool/ROOT/ubuntu_f1xlv2/var/mail 96K 879G 96K /var/mail
rpool/ROOT/ubuntu_f1xlv2/var/snap 384K 879G 144K /var/snap
rpool/ROOT/ubuntu_f1xlv2/var/spool 2.34M 879G 120K /var/spool
rpool/ROOT/ubuntu_f1xlv2/var/www 96K 879G 96K /var/www
rpool/USERDATA 4.55G 879G 96K /
rpool/USERDATA/root_z0ox2d 476K 879G 168K /root
rpool/USERDATA/s-miyaza_z0ox2d 4.55G 879G 4.03G /home/s-miyaza
ZFS boot 構成にすると、rpool/ROOT/ubuntu
やユーザ名の末尾に6文字のランダム文字列が付いています。これは、外部からファイルシステムへのアクセスを容易にさせない意図があると思われます。
インストール直後にしておいたほうが良いこと
インストール直後のZFSは、初期状態のままです。最初のうちからファイルシステムに対して、重複排除(dedup) オプションを on にしておくことをお勧めします。必要に応じて圧縮や暗号化を行うなら、ファイルを書き込み始める前に行っていたほうが良いでしょう。
重複排除を有効にするには、以下のように実施します。対象ファイルシステムとして rpool を指定すると、zpool以下のすべてのZFSファイルシステムに対して設定が継承されます。dedup オプションについては後日説明します。
$ sudo zfs set dedup=on bpool rpool
圧縮を有効にするには、以下のように実施します。圧縮オプションはgzip以外も存在します。以下のように /root のみを圧縮することも可能です。
$ sudo zfs set compression=gzip rpool/USERDATA/root_z0ox2d
暗号化を有効にするには、以下のように実施します。暗号化方式はaes-256-gcm 以外も存在します。
$ sudo zfs set encryption=aes-256-gcm rpool/USERDATA
終わりに
今回は、Ubuntu 20.04 LTSをZFS boot状態でインストールして、ZFSの状態を確認しました。次回は、ZFS bootの採用で、どのような利点があるかを説明します。次回をお楽しみに。
さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス