web-dev-qa-db-ja.com

マウント前の起動スクリプトを作成するにはどうすればよいですか?

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

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

グーグルで役立つドキュメントが見つかりません。

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

3
Cobra_Fast

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

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

幸い、dmsetupはすでにinitramfsにインストールされています(ボリューム管理に必要なため、これは常に当てはまります。ただし、確認するには、「lsinitramfs /initrd.img | grepdmsetup」を使用してください)

これにより、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の使用方法に関する一般的な手順については、「maninitramfs-tools」をお読みください。

ドラカットの使用:

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

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

5
user247679