概要
OpenZFSは、オープンソースのストレージプラットフォームである。
従来のファイルシステムとボリュームマネージャの両方の機能を含んでおり、以下に示すような多くの高度な機能を備えている。
- データ破損からの保護データとメタデータの整合性チェック
- 継続的な整合性検証と自動「自己修復」修復
- ミラーリング、RAID-Z1/2/3 [およびDRAID]によるデータの冗長性
- 最大256兆ヨビバイト(2^128バイト)の大容量ストレージのサポート
- LZ4、GZIP、またはZSTDを使用した透過的圧縮による省スペース化
- ハードウェアアクセラレーションによるネイティブ暗号化
- スナップショットとコピーオンライトクローンによる効率的なストレージ
- 効率的なローカルまたはリモート・レプリケーション - ZFS send and receiveで変更されたブロックのみを送信
ZFSのインストール
詳細を知りたい場合は、OpenZFSの公式ドキュメントを参照すること。
リポジトリを追加してインストール
RHEL
DKMSおよびkABIトラッキング kmodスタイルパッケージは、OpenZFSリポジトリからRHELベースのLinuxディストリビューション向けに提供されている。
これらのパッケージは、新しいバージョンがリリースされるたびに更新されており、現在のメジャーリリースの現在のマイナーバージョンのリポジトリのみが新しいパッケージで更新される。
インストールを簡単にするため、zfs.repo設定ファイルと公開署名キーを含むzfs-releaseパッケージが提供されている。
OpenZFSパッケージは、この鍵を使用して署名されており、yum
またはdnf
は、インストールを許可する前にパッケージの署名を検証する。
ユーザは、ここに記載されているフィンガープリントを使用して、OpenZFS公開鍵の信頼性を検証することを強く推奨する。
sudo dnf install https://zfsonlinux.org/epel/zfs-release-2-3$(rpm --eval "%{dist}").noarch.rpm
zfs-releaseパッケージをインストールして公開鍵を検証した後、DKMSまたはkABIトラッキング kmodスタイルパッケージのどちらかをインストールすることができる。
DKMSパッケージは、非ディストリビューションのカーネルを実行しているユーザや、OpenZFSにローカルなカスタマイズを適用したいユーザに推奨される。
多くのユーザには、カーネルアップデートごとにOpenZFSを再構築する必要がないkABIトラッキング kmodパッケージを推奨する。
- DKMSスタイルのパッケージをインストールする場合
- まず、epel-releaseパッケージをインストールした後、DKMSを提供するEPELリポジトリを追加して、次にkernel-develパッケージとzfsパッケージをインストールする。
- DKMSは、OpenZFSをビルドするためにkernel-develパッケージを必要とするため、実行中のカーネルに一致するkernel-develパッケージがインストールされていることを確認する。
sudo dnf install epel-release
sudo dnf install kernel-devel
sudo dnf install zfs
- kABIトラッキング kmodスタイルのパッケージをインストールする場合
- デフォルトでは、zfs-releaseパッケージはDKMSスタイルのパッケージをインストールするように設定されているため、幅広いカーネルで動作する。
- kABIトラッキング kmodスタイルをインストールする場合は、デフォルトのリポジトリをzfsからzfs-kmodに切り替える必要がある。
- kABIトラッキング kmodスタイルは、Linuxディストリビューションが提供する非Streamカーネルでのみ動作が確認されていることに注意すること。
sudo dnf config-manager --disable zfs
sudo dnf config-manager --enable zfs-kmod
sudo dnf install zfs
- デフォルトでは、OpenZFSカーネルモジュールは、ZFSプールが検出されると自動的にロードされる。
- ブート時に常にモジュールをロードする場合は、/etc/modules-load.dディレクトリに設定ファイルを作成する。
sudo vi /etc/modules-load.d/zfs.conf
# /etc/modules-load.d/zfs.confファイル zfs
DKMSからkABIトラッキング kmodsに切り替える場合、まず、既存のDKMSパッケージをアンインストールする。
これにより、インストールされている全てのカーネルモジュールが削除されて、その後、kABIトラッキング kmodsをインストールすることができる。
※注意
RHELをアップデートする場合、カーネルアップストリームのkABIの変更により、既存のkmodスタイルのパッケージが動作しないことがある。
現在のリリースパッケージの設定により、既に更新されたパッケージが利用可能になっているかもしれないが、
バージョニングが新しいものではない場合、パッケージマネージャはそのパッケージをインストールしない可能性がある。
そのため、アップグレードする場合、ユーザはkmod-zfsパッケージが適切なカーネルモジュールを提供していることを確認して、必要であればkmod-zfsパッケージを再インストールする必要がある。
SUSE
SUSEの公式リポジトリにあるfilesystemを追加する。
# SLE 15 SP 5 sudo zypper addrepo -f https://download.opensuse.org/repositories/filesystems/SLE_15_SP5/ FileSystem # SLE 15 SP 4 sudo zypper addrepo -f https://download.opensuse.org/repositories/filesystems/SLE_15_SP4/ FileSystem # SLE 15 SP 3 sudo zypper addrepo -f https://download.opensuse.org/repositories/filesystems/SLE_15_SP3/ FileSystem # openSUSE Leap sudo zypper addrepo -f 'https://download.opensuse.org/repositories/filesystems/$releasever/' FileSystem
追加したリポジトリを更新する。
sudo zypper --gpg-auto-import-keys refresh
ZFSをインストールする。
sudo zypper install zfs zfs-kmp-default dkms
ソースコードからインストール
ZFSのビルドに必要なライブラリをインストールする。
# SUSE sudo zypper install pkg-config autoconf make zlib-devel libaio-devel libuuid-devel libblkid-devel libtirpc-devel \ pam-devel libgnutls-devel libgcrypt-devel \ kernel-devel kernel-source systemd-devel # Systemdサービスを使用する場合
ZFSのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf zfs-<バージョン>.tar.gz cd zfs-<バージョン>
ZFSをビルドおよびインストールする。
../configure --prefix=<ZFSのインストールディレクトリ> --enable-systemd --enable-nls --enable-linux-builtin make -j $(nproc) sudo make install
~/.profileファイル等に、環境変数を追記する。
vi ~/.profile
# ~/.profileファイル
export PATH="/<ZFSのインストールディレクトリ>/bin:$PATH"
export PATH="/<ZFSのインストールディレクトリ>/sbin:$PATH"
export LD_LIBRARY_PATH="/<ZFSのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
export MANPATH="/<ZFSのインストールディレクトリ>/share/man:$MANPATH"
ZFSのアンインストール
ZFSをアンインストールする。
sudo make uninstall
セキュアブートが有効な場合、署名を削除する。
cd ~/MOK/ZFS sudo mokutil --delete ./ZFS.der --root-pw
PCを再起動して、署名を削除する。
ZFSのカーネルモジュールを削除する。
sudo rm /lib/modules/$(uname -r)/extra/zfs.ko \ /lib/modules/$(uname -r)/extra/spl.ko
カーネルモジュールを再読み込みする。
sudo depmod -a $(uname -r)
MOKの署名
セキュアブートが有効の場合、ZFSモジュールの署名を登録する必要がある。
まず、ZFSモジュールの署名に必要な設定ファイルを作成する。
mkdir -p ~/MOK/ZFS && cd ~/MOK/ZFS vi ZFS.config
# ~/MOK/ZFS/ZFS.configファイル
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
O = SUSE Linux Products GmbH (User Add ZFS) # 任意の名前
CN = SUSE Linux Enterprise Secure Boot (User Add ZFS) # 任意の名前
emailAddress = suse@localhost # 任意のメールアドレス
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
キーペアを作成する。
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./ZFS.config \ -outform DER -out ./ZFS.der -keyout ./ZFS.priv \ -addext "extendedKeyUsage=codeSigning"
次に、MOK(Module owned Key)にキーをインポートする。
--root-pw
オプションを付加することにより、再起動時のZFSモジュールの署名において、rootパスワードが必要となる。
sudo mokutil --import ./ZFS.der --root-pw
PCを再起動して、上記のキーの署名する。
sudo systemctl reboot
ZFSモジュール(spl.koおよびzfs.ko)を署名する。
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./ZFS.priv ./ZFS.der /lib/modules/$(uname -r)/extra/spl.ko sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./ZFS.priv ./ZFS.der /lib/modules/$(uname -r)/extra/zfs.ko
必要であれば、ZFSモジュールをXZ形式またはZstandard形式に圧縮する。(任意)
# XZ形式の場合 cd /lib/modules/$(uname -r)/extra/ sudo xz -f spl.ko sudo xz -f zfs.ko # Zstandard形式の場合 cd /lib/modules/$(uname -r)/extra/ sudo zstd --rm spl.ko sudo zstd --rm zfs.ko
ZFSモジュールを読み込む。
sudo depmod -a $(uname -r) # モジュール依存リストを更新する sudo modprobe -v spl # ZFSモジュールを読み込む sudo modprobe -v zfs # ZFSモジュールを読み込む
ZFSモジュールが正常に読み込まれているかどうかを確認する。
lsmod | grep spl lsmod | grep zfs # または sudo modinfo spl sudo modinfo zfs
ZFSモジュールが正しく署名されているかどうかを確認する。
正常に読み込まれている場合は、"ZFS.der is already enrolled"と表示される。
cd <ZFSモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --test-key ./ZFS.der
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。
作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。
ZFSの起動
ZFSサービスを起動する。
sudo systemctl start zfs.target
ZFSプールの再起動時に自動マウントするように、サービスを有効にする。
sudo systemctl start zfs-import-cache sudo systemctl start zfs-mount sudo systemctl start zfs-import.target
ZFSプールのアップデートが必要かどうかを確認する。
sudo zpool status
もし、action: Upgrade the pool using 'zpool upgrade'.メッセージが表示される場合、アップデートが必要である。
全てのプールをアップデートする。
sudo zpool upgrade -a
これらのSystemdサービスユニットは、/usr/lib/systemd/systemディレクトリに存在する。