起動がUSBドライブにあるループバックファイルホスティングLVMパーティションからシステムを起動したいと思います。
LVM以外の設定とext4ループバックファイルを使用すると正しく起動しますが(オンラインにはいくつかのガイドがあります)、さらに必要です... LVMが必要です!
私のパーティションレイアウトは次のとおりです
- USBドライブ(MBR):Grub 2
- USBドライブ(hd0、msdos1): ext4 512Mb /boot
- ノートブック内部ディスク:ホスト.linux-loops/system0.lvmオペレーティングシステムをインストールしてファイルにマッピングしました。/dev/mapper/vg_system-lv_root。
私のGrub 2メニュー項目は次のとおりです。
set BOOT_PART=(hd0,msdos1)
set HOST_PART=(hd1,gpt5)
set LOOP_FILE=.linux-loops/system0.lvm
set LOOP_DEV=loop0
set LVM_VG=vg_system
set LVM_LV=lv_root
set ROOT_DEV=/dev/mapper/${LVM_VG}-${LVM_LV}
menuentry 'Loopback / 4.10.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os {
echo "Initializing environment..."
set KERN_VER=4.10.0-38-generic
recordfail load_video gfxmode $linux_gfx_mode
echo "Loading partition drivers..."
insmod ext2
insmod gzio
insmod part_msdos
insmod part_gpt
echo Loopback(s) setup...
loopback ${LOOP_DEV} ${HOST_PART}/${LOOP_FILE}
insmod lvm
echo Debug LVM...
ls
ls (lvm/${LVM_VG}/${LVM_LV)/
echo "Loading kernel..."
set root=${BOOT_PART}
linux /vmlinuz-${KERN_VER} root=${ROOT_DEV} rw verbose nosplash debug
initrd /initrd.img-${KERN_VER}
}
二人はエルエスデバッグコマンドは、grubがLVMパーティションをチェックしたことを示していますが、初期化プログラム実行すると、システムはグループを表示します。ボリュームグループシステム見つかりませんでしたLVメタデータまだ実行されていません。
grubスクリプト内のループバック設定がinitスクリプトに伝播できないため、LVMマッパーを再初期化できないようです。
LVMではなくシナリオで(上記のように)vmlinuz...ループ=...問題を解決しました。
質問は:grubがLVMマッパーにループバックファイルを提供できるようにループバックファイルをどのように設定しますか?
とても感謝しています!
答え1
あなたは正しいです。 GRUB はカーネルの代わりに設定できません。
GRUBはディスクアクセスにシステムファームウェア(BIOSまたはUEFI)を使用するため、実行するすべての操作はこれらのファームウェアルーチンに基づいています。カーネルが引き継がれると、これらのファームウェアルーチンは廃止され、OSが同じタスク用に独自のドライバを提供するまで、その上に構築されたものはすべて使用できなくなります。
(BIOSに関する限り、カーネルがプロセッサをフル32/64ビットモードに変換すると、16ビットのBIOSディスクアクセスルーチンは使用できなくなります。UEFIに関する限り、ディスクアクセスサービスは次のいずれかであると思います。UEFI機能は標準です」ブートサービスの終了" UEFI呼び出しを実行して、ハードウェア制御をUEFI側のオペレーティングシステムに渡すプロセスを完了すると、使用できなくなります。
代わりに、非常に早い段階でinitrdで実行されるスクリプトを設定する必要があります。 LVMが起動する前、またはLVMが起動されている場合、またはすでに初期化されている場合は、ループバックデバイスを設定した後に必要なループバックデバイスを有効にする必要がありvgscan --mknodes
ますvgchange -ay <name of the VG containing the root filesystem>
。
使用しているLinuxディストリビューションの名前とバージョンがわからない場合は、より具体的なアドバイスをするのが難しくなります。
答え2
私のソリューションをGitHubに公開しました。
このガイドでは、PCの内部ディスクの起動セクタを変更せずにLVMループバックディスクにLinuxをインストールし、USBドライブ(grubと起動パーティション)から起動する方法について詳しく説明します。
関連部分はこれですhttps://github.com/antonio-petricca/buddy-linux/blob/master/assets/initramfs/lvm-loops-setupスクリプト:
#!/bin/sh -e
# Antonio Petricca <[email protected]> - 17/03/2018
PREREQS=""
# Output pre-requisites
prereqs() {
echo "$PREREQ" }
case "$1" in
prereqs)
prereqs
exit 0
;; esac
. /scripts/functions
MNT=/host ROOT_MNT=${rootmnt}${MNT}
_log_msg "Moving LVM loops host device mount point from \"${MNT}\" to {ROOT_MNT}\"...\n"
mount -o remount,rw ${rootmnt} || panic "Cannot remount \"${rootmnt}\" R/W."
[ -d ${ROOT_MNT} ] || mkdir -p ${ROOT_MNT} || panic "Cannot create \"${ROOT_MNT}\" mount point."
mount -n -o move ${MNT} ${ROOT_MNT} || panic "Cannot move \"${MNT}\" to \"${ROOT_MNT}\"."
log_end_msg "Done"