GentooがインストールされたVPSがありますが、カーネルオーバーレイファイルシステムが正しく機能しません。
オーバーレイ関連のカーネルオプションです。
カーネルでコンパイル
cat .config | grep -i overlay
CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
CONFIG_OVERLAY_FS=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_INDEX is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
# CONFIG_OVERLAY_FS_METACOPY is not set
モジュロコンパイル
cat .config | grep -i overlay
CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
CONFIG_OVERLAY_FS=m
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_INDEX is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
# CONFIG_OVERLAY_FS_METACOPY is not set
カーネルにロードするときにdmesgから送信されるメッセージ
dmesg | grep -i overlay
[ 10.144242] request_module fs-overlay succeeded, but still no fs?
モジュールにコンパイルするときのdmesgからのメッセージ
dmesg | grep -i overlay
[ 10.000001] request_module fs-overlay succeeded, but still no fs?
モジュールにコンパイルすると、モジュールは正しい場所にあります。
locate overlay.ko
/lib/modules/6.1.46-gentoo/kernel/fs/overlayfs/overlay.ko
/usr/src/linux-6.1.46-gentoo/fs/overlayfs/.overlay.ko.cmd
/usr/src/linux-6.1.46-gentoo/fs/overlayfs/overlay.ko
cat /proc/filesystem | grep -i オーバーレイが空です。
システムは次のとおりです。
uname -a
Linux patito 6.1.31-gentoo #3 SMP PREEMPT_DYNAMIC Sun Jun 25 09:04:44 GMT 2023 x86_64 QEMU Virtual CPU version 2.5+ AuthenticAMD GNU/Linux
システム全体は、別のext4パーティションにある/ bootを除いて、1つのパーティションでのみext4を実行します。
システムには2GBのメモリと十分なスペースがあります。システムのスナップショットをダウンロードし、virt-managerを使って自分のコンピュータで実行し、テスト用のメモリとCPUコアを追加しましたが、同じ結果が得られました。役に立ちますが変更がない場合、qemu-imgは.imgからqcow2に変換されますか?
私は別のカーネルを試して、別のオプションで再コンパイルし、すべてのoverlayfs部分を削除し、再起動して再アクティブ化し、インターネット上で同様の問題を検索しましたが、何も見つかりませんでした.どんな理論にも感謝します。
カーネルのoverlayfsは、上記のようにカーネルの一部としてコンパイルされますが、モジュールにコンパイルしようとしましたが、自動的にロードされず、After lsmodを使用して手動でロードしようとしましたが、modprobe
そこにはありません。もう一度試して、上記のセクションにカーネル設定を追加します。
答え1
で表示したメッセージをGoogleに検索して、dmesg
次のファイルを見つけます。puppet
ソースコード問題の原因を説明してください。
# On a fresh node overlay may be unloaded automatically by the OS
# if no fs needs it. In this case the kern.log should look like:
# kernel: request_module fs-overlay succeeded, but still no fs?
# This may lead to unwanted side effects, like Docker not finding
# the overlay kernel module loaded and falling back to
# the device-mapper storage driver.
# Therefore we explicitly load the overlay module when the overlayfs
# option is true.
kmod::module { 'overlay':
ensure => 'present',
}
したがって、ホストシステムで次のコマンドを実行すると、overlay
カーネルモジュールがロードされていないことがわかります。
lsmod |grep overlay
overlay
したがって、カーネルモジュールを再ロードするだけです。
modprobe overlay
答え2
回答を投稿した後アベイロ、私のカーネルバージョン6.1.46が元のメッセージの6.1.31と異なることに気づきました。これは、質問が投稿された元のウェブサイトからほとんどの情報をコピーしたため、完全に可能です。Docker コミュニティフォーラム, 私はこれを調べるために多くのテストをして努力しましたがロードされるカーネルバージョンについて考えることになりました。
/usr/src/linux
正しいカーネルを指して6.1.46
fsをモジュールにオーバーライドして、元の投稿に関連情報を公開するように再コンパイルされたことを確認してから再起動しmake && make modules_install && make install
ますgrub-mkconfig -o /boot/grub/grub.cfg
。
再起動後に再実行してuname -a
みると、カーネルは6.1.31でしたが、なぜですか?
間違ったパスを使用してmkconfigを実行した可能性があるため、慎重に再実行して再起動しました。それでも6.1.31です。
/boot/grub/grub.cfg
再起動後に正しいオプションを確認しましたが、6.1.46がシステムを起動する最初のオプションでした。そのため、ランダム行の一部が更新されない問題を回避するために実行し、rm /boot/\*6.1.31*
grepgrub-mkconfig -o /boot/grub/grub.cfg
で確認したところ、6.1.31の痕跡はなく、6.1.46のみが見つかりました。
再起動しましたが、6.1.31が再び登場しました。しかし、すべてが大丈夫に見え、6.1.46で起動する必要があります。
その後、再起動して手動でブートプロセスを制御して6.1.46をロードするように手動で数字を編集しましたが、システムが失敗してカーネルが見つかりませんでした。
これが重要です。
6.1.31に戻ってブートした後、マウントポイントを確認しました(/bootは別のパーティションです)。
そこにあります。いいえ、/boot
インストールされていないと言うべきでしょうか。このシステムの寿命のある時点で、私はnoautoに間違えてインストールされませ/etc/fstab
ん/boot
でした。
これを変えましたが、削除済み自動ではありません/boot
b の場合/etc/fsta
システムを再起動するとチャジャン!システムは6.1.46で、overlayfsが動作しています。。
しかし、これは私が理解していない新しい部分です。/boot
パーティションではなくフォルダにもかかわらず、6.1.46カーネルがあり、/boot/grub/grub.cfg
正しい設定を持っていますが、なぜ読み込まれてロードされないのですか?起動時に表示される grub メニューには 6.1.31 というオプションが 1 つしかありませんが、含まれていlocate
ないディスクでは見つかりません。find
どこにありますか。どのようにロードされますか?/boot/grub/grub.cfg
catを使用してディスクから読み取ったデータは6.1.46です。
まあ、この長い話を終えて問題を解決し、新しいミステリーを手に入れましたが、あまりにも多くの時間を費やしたので、今はミステリーが解けていないままです。
助けてくれてありがとう。 aviroの最後のコメントに答えないと解決策が見つかりませんでした。