web-dev-qa-db-ja.com

SYSLINUXにNTFSパーティション上のイメージファイルからルートfsをロードさせることはできますか?

SYSLINUXを使用すると、カーネルイメージと初期ram-disk(initrd)イメージをそこからロードすることにより、FAT16USBスティックから起動できます。

より多くのスペースとより高速なアクセスを得るために、起動後にハードディスクからNTFSパーティションをマウントし、ループバックデバイスを使用してそこからファイルシステムイメージをマウントし、/ homeを置き換えたり、chrootしたりすることができますが、それはその後の方法です起動プロセスにより、システムの更新が不可能になります。

SYSLINUX自体にNTFSパーティションからのfs-imageをrootfsとしてマウントさせる方法はありますか?

または、initrdイメージを変更して、起動プロセスのより早い段階で新しいルートfsをマウントできますか?私はそのイメージをマウントして変更する方法を知っていますが、その中のスクリプトで失われ、いつどのように実行されるのかわかりません。

2
Chaos_99

はい、それは可能です。また、組み込み関数でも機能します。 syslinux.cfgを編集して、以下を含めます。

LABEL linux
LINUX /boot/vmlinuz
APPEND root=/dev/disk/by-label/data rootfstype=ntfs loop=images/linux_root.img loopfstype=ext4 rw
INITRD /boot/initrd.img 

明らかに、カーネルイメージ(vmlinuz)と初期RAMディスクイメージ(initrd.img)をSYSLINUXで起動するFATパーティションにコピーする必要があります。 (パスはパーティションルートを基準にしています。)

root=パラメータは、ルートファイルシステムイメージが存在するデバイスとパーティションを指定します。もちろん、/dev/sda1表記または/dev/disk/by-UUID/SOMECRYPTYCNUMBERバージョンを使用することもできます。

rootfstypeは、ファイルシステムイメージが存在するパーティションのファイルシステムを指定します。 NTFSとFATはどちらもすぐにサポートされます。よりエキゾチックなフォーマットの場合は、initrd.imgを編集して、適切なカーネルモジュールを含めてロードする必要があります。

loop=は、ルートファイルシステムイメージが存在するパーティションのベースを基準にしたルートファイルシステムイメージへのパスを示します。 loopfstype=はその内部タイプを指定します。明らかに、起動後に/にマウントされます。イメージがロードされたパーティションは、このフォルダーが存在する場合、自動的に/Hostにマウントされます。 (アトミックにマウントされていない場合、他の場所にマウントすることはできません。ただし、そうである場合は、mount -mを使用して別のマウントポイントに移動できます。)

システムアップデートによって更新されるたびに、カーネルとFATパーティションのinitrd.imgをコピーして上書きすることを忘れないでください。そうしないと、起動時に奇妙なことが起こる可能性があります。

残念ながら、同じ方法でスワップパーティションを含める方法はありません。そのために実際のパーティションを使用するか、実行中のシステムから起動した後にパーティションをアクティブ化する方法を見つける必要があります。

約を期待してください。 NTFSラッパーを介してマウントされたループデバイスに書き込むための10%のCPUオーバーヘッド。

2
Chaos_99