カスタム ZFS カーネル モジュール (0.8.x 対提供の 0.7.x) を搭載したサーバー 18.04 があります。
定期的にカーネルを更新するときは、ZFS カーネル モジュールを再コンパイルする必要があります。そうしないと、自動的に無効になります。
前回は、完了するまでにしばらく手間取ったので、今回は正しい手順を事前に知っておきたいと思っています。
私は思う
- カーネルとカーネルソースの更新
- モジュールソースをダウンロードしてコンパイルする
- 以前の kmod パッケージを削除し、新しいものをインストールする
ただし、カーネル モジュールは現在マウントされているいくつかのファイル システムにアクセスする必要があるため、次の手順は何でしょうか。新しいモジュールをマウントするには、単に再起動すればよいのでしょうか。
また、ある時点で自動インポートサービスを有効にするには、https://unix.stackexchange.com/questions/338260/zfs-mounting-only-one-of-my-pools-on-boot
答え1
現在実行中のカーネルのモジュールを更新する場合は、モジュール (つまり、umount
すべてのファイルシステム) の使用を中止し、rmmod zfs
新しいモジュールを使用可能にして、modprobe zfs
再度ロードする必要があります。通常は再起動する方が簡単ですが、必要に応じて、システムの実行中にこれを実行するのに役立つ例が他の場所にある場合もあります。
# # Stop using the module
# rmmod zfs
# modprobe zfs
カーネルを更新するたびにモジュールのアップデートを自動的にコンパイルしてインストールしたい場合は、DKMS素晴らしいDKMS パッケージング ガイドこれについて詳しく説明します。
アイデアとしては、カーネルのアップデートごとに適用したいモジュール、またはカーネルへの何らかの変更があるというものです。カーネルがアップデートされるときに、モジュールのコンパイルとインストールを自動化できますapt
。VirtualBoxでも良い例が見つかります。NVIDIA DKMS ドライバー。
これを設定する方法を示すもう一つの良い例はpatjak の bcwc_pciebcwc_pcie
またはfacetimehd
モジュールを新しいカーネルに対してコンパイルして利用できるようにする手順は、文書化された:
DKMS の設定 (カーネル更新時に自動コンパイル)
これは、Debian/Ubuntu deb パッケージの手順をすでに実行していることを前提としています。dkms.conf
モジュール名facetimehd
とバージョン番号0.1
が正しいことを確認し、 を更新するか、とが使用されているdkms.conf
手順を調整する必要があります。-m
-v
- 必要なパッケージをインストールします:
# apt install debhelper dkms
- 古いパッケージがインストールされている場合は削除します。
# dpkg -r bcwc-pcie
- 作業用のディレクトリを作成します:
# mkdir /usr/src/facetimehd-0.1
- Git リポジトリ ディレクトリに変更します:
$ cd bcwc_pcie
- ファイルをコピー:
# cp -r * /usr/src/facetimehd-0.1/
- 次のディレクトリに変更します:
# cd /usr/src/facetimehd-0.1/
- 以前の deb ファイルとバックアップを削除します。
# rm backup-*tgz bcwc-pcie_*deb
- 以前のコンパイルをクリアします:
# make clean
- 新しいモジュールを DKMS に登録します。
# dkms add -m facetimehd -v 0.1
- モジュールをビルドします。
# dkms build -m facetimehd -v 0.1
- Debian ソース パッケージをビルドします。
# dkms mkdsc -m facetimehd -v 0.1 --source-only
- Debian バイナリ パッケージをビルドします。
# dkms mkdeb -m facetimehd -v 0.1 --source-only
- deb をローカルにコピーします:
# cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
- ローカル ビルド ファイルを削除します。
# rm -r /var/lib/dkms/facetimehd/
- 新しい deb パッケージをインストールします。
# dpkg -i /root/facetimehd-dkms_0.1_all.deb
何か問題がある場合は、DKMS パッケージの作成に関するこのガイドをお読みください。 http://www.xkyle.com/building-linux-packages-for-kernel-drivers/
この例で欠けている唯一の部分bcwc_pcie
は、このコードベースは更新されないが、コンパイルしているモジュールコードは時間の経過とともに変化する可能性があるということです。これは、最新ダウンロードしたバージョンと、コンパイルしようとしているソースの特定のバージョンを比較します。
私たちはdkms.conf
、DKMS コミュニティ ドキュメント:
$ cat dkms.conf
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes
また、ビルドまたはインストールの前後にスクリプトを呼び出すオプションを追加したり、追加の (条件付き) make コマンドや patch コマンドなどを提供したりすることもできます。dkms.conf は実際にはシェル スクリプトにソース化されているため、必要に応じてかなりのトリックを実行できます。これらのオプションなどについては、man dkms の dkms.conf セクションで説明されています。
そしてマニュアルページ:
PRE_BUILD= ビルドを実行する前に実行するスクリプトの名前。パスはソースのルート ディレクトリからの相対パスで指定する必要があります。
ダウンロードして抽出するスクリプトを格納するディレクトリを作成できます。ZFSの最新バージョンビルドの準備として、このプロセスを自動化するのに役立ちます。ソースを使用するgit
か、ダウンロードして抽出することができますlatest
。ZFS の最新のダウンロード URL を確認する方法の例を次に示します。
$ curl -s https://api.github.com/repos/zfsonlinux/zfs/releases/latest | jq '.assets[].browser_download_url' | tr -d '"' | grep -E 'tar.gz$'
https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz
サービスが無効になっていると複雑になる、とおっしゃっていますsystemd
。独自の ZFSdkms
セットアップを行えば、この問題は解決しますか? 競合の原因となる実際のzfs-dkms
パッケージに依存するパッケージがインストールされていませんか? 少なくとも、無効になっているサービスにフックしてPOST_INSTALL
実行するsystemctl enable
ことで、有効にすることができます。
そうは言っても、ZFSは非常に人気のあるファイルシステムであり、DKMSパッケージはすでに利用可能であるはずです。これは事実のようです。zfs-dkms
は、宇宙このパッケージの詳細を調べて、すでに利用可能なこのパッケージがzfs-dkms
自分に適しているかどうかを確認できます。