Ubuntu 10.10システムをPXEブートしています。ここでは、カーネルパラメーターを次のように指定しています。
append root=/dev/nfs initrd=ubuntu-boot/initrd.img-2.6.35-24-generic
nfsroot=11.22.33.44:/data/nfsroot,fsc ip=dhcp rw
FSキャッシュ機能(cachefilesdパッケージ)を使用するには、マウントオプション 'fsc'を使用する必要があります。ただし、これを試みると、起動時に次のエラーが発生します。
nfsmount: bad option 'fsc'
Nfsmountがこのオプションを許可しないのはなぜですか? (起動後にmount -o fsc
を使用して手動でマウントすると正常に機能します。)
Nfsmountをファイルmount -t nfs
で/usr/share/initramfs-tools/scripts/nfs
に変更し、update-initramfs -u
を実行してinitramfsイメージを更新しましたが、まだエラーが発生しているようです:
mount: unknown nfs mount option 'fsc'
私の推測では、これはklibcのマウント機能の制限です。これに対処する最良の方法は何でしょうか? nfsmountプログラムにパッチを適用する必要はありますか?
これはklibcのnfsmountツールの制限のようであるため、/sbin/mount.nfs
をinitramfsイメージに追加し、代わりにこのツールでnfsrootをマウントできると考えていました。 /usr/lib/klibc/bin
フォルダーにコピーし、次のようにスクリプト/usr/share/initramfs-tools/scripts/nfs
を更新しました。
mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
更新されたinitramfsイメージを起動した後、mount.nfsが実行されると長い遅延があり、次のメッセージが表示されます。
mount.nfs: an incorrect mount option was specified
Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done.
ただし、このメッセージは、使用するマウントオプションに関係なく表示されるため、まったく別の問題のように見えます...
私はついにそれを解決しました。手順は次のとおりです。
/usr/lib/klibc/bin folder
にコピーします)。/usr/share/initramfs-tools/scripts/nfs
のnfsmount行を次のように変更します。
mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
mkinitramfs
またはupdate-initramfs
のいずれかでinitramfsイメージを更新します。
これにより、Ubuntu 10.10システムのnfsrootでfscオプションが有効になります。しかし、10.10からmount.nfsを使用できない理由がわからない-おそらく回帰ですか?
最近、16.04に基づいて新しいnfsrootを構築していましたが、nfsrootファイルシステムにcachefilesdを使用することをもう一度検討することにしました。それでも、私はこの投稿につまずいた。正しい方向に向けられるようになったので、うまくいきましたが、ここに掲載されたものよりも良い答えがあると思います。
Meanderixの手順は機能する可能性がありますが、最善の方法とは思いません。だからここに私の手順があります:
/usr/share/initramfs-tools/hooks
で新しいファイルを作成します。私はファイルシステムキャッシュのfsc
を呼び出しました。次のコンテンツをファイルに追加します。
#!/bin/sh
set -e
PREREQ=""
prereqs () {
echo "${PREREQ}"
}
case "${1}" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.nfs /sbin
exit 0
Fscファイルを実行可能にします。
chmod 755 /usr/share/initramfs-tools/hooks/fsc
Meanderixが示唆するように/usr/share/initramfs-tools/scripts/nfs
を修正します。
Initramfsを生成します。例えば:
mkinitramfs -o /fscinitrd
ここでの違いと本当の魔法は、/usr/share/initramfs-tools/hooks/fsc
ファイルです。特にcopy_exec
行。初期RAMディスクが作成されると、mount.nfs
がinitramfsに自動的に追加されます。しかし、もっと待ってください!また、必要なライブラリを決定し、それらも追加します。 Ubuntu 16.04ではlibtirpc.so
が必要だったのでmount.nfs
が必要だったので、それは本当にクールです。
これを実行してcachefilesdを構成すると、NFSROOTのファイルシステムキャッシュができました。
カーネルはそのモジュールでコンパイルされていません(カーネル構成のCONFIG_NFS_FSCACHE)。そして、そのためのガイドへのリンク: buntu Kernel/Compile