プリマウント起動スクリプトを作成するには?

プリマウント起動スクリプトを作成するには?

/ルートファイルシステムのキャッシュに使用したいので、ルートファイルシステムをマウントする前に実行される起動スクリプトを作成したいと思いますdm-cache。スクリプトにはキャッシュ設定コマンドを含める必要があります。

そのようなスクリプトをどこに置く必要があり、どのような形式が必要ですか?

インターネット検索で役に立つドキュメントが見つかりません。

Fedora 17、カーネル3.9.10を実行しています。

ベストアンサー1

dm-cache githubの指示に従ってキャッシュを作成するには、カーネルモジュールdm_modとdm_cacheをロードする必要があります(すでにパッチされたカーネルがあると仮定してください)。また、dmsetup実行可能ファイルにアクセスする必要があり、おそらく/ devにキャッシュが作成されるデバイスにアクセスできるようにします。

cjmがすでに述べたように、これを行うには、ハードドライブがマウントされる前にメモリにロードされるファイルシステムであるinitramfsを変更する必要があります。

幸いなことに、dmsetupはinitramfsにすでにインストールされています(ボリューム管理で必要なので常にそうする必要がありますが、確認するには "lsinitramfs /initrd.img | grep dmsetup"を使用してください)。

これにより、initramfsに追加する必要がある2つのエントリが残ります。 2つのモジュールとキャッシュを生成するスクリプトです。モジュールの場合は、/usr/share/initramfs-tools/modules または /etc/initramfs-tools/modules を編集してください。

ブートスクリプトを/usr/share/initramfs-tools/local-premountまたは/etc/initramfs-tools/local-premountに入れます。これをlocal-premountサブディレクトリに入れると、モジュールがロードされ、/ devが埋められていますが、/はまだマウントされていないことを確認できます。スクリプトは通常のshスクリプトです。 #!/bin/sh shebangを使用して実行可能にすることを忘れないでください。私はあなたがそれを自分で書く方法を知っていると仮定します。 (そうでない場合は、より多くの情報を提供してください)

update-initramfs -u を実行して変更を適用すると、設定は完了です。問題が発生した場合に備えて、起動できる古いカーネルがまだあることを確認してください。

initramfs-toolsの使い方に関する一般的なガイドラインについては、「man initramfs-tools」を読んでください。

dracutを使う:

dracutはモジュラーシステムを使用して起動プロセスを管理します。 initramfs-toolsと同様に、使用する必要があるプリマウントフックがあります。スクリプトをインストールするには、このフックを使用するモジュールを定義する必要があります。

mkdir /usr/lib/dracut/modules.d/40dm-cache

次に、/usr/lib/dracut/modules.d/40dm-cache/module-setup.sh ファイルを編集します。

#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
check() {
return 0
}

depends() {
return 0
}

install() {
inst_hook pre-mount 91 "$moddir/dm-cache.sh"
}

installkernel() {
instmods dm_mod
instmods dm_cache
}

および/usr/lib/dracut/modules.d/40dm-cache/dm-cache.sh

#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
modprobe dm_mod
modprobe dm_cache
***here you insert your caching code. As before, dmsetup should be available at /sbin/dmsetup***

check() が 0 ではなく 255 を返す場合、dracut の設定ファイルで指定された場合にのみモジュールがロードされます。 (0を返すと無条件にロードされます。)

ここで initrd を更新します。

dracut --force

dracutリファレンスガイド:https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html

おすすめ記事