マルチブートUSBドライバからisoファイルを起動するために必要な起動パラメータをどのように決定しますか?

マルチブートUSBドライバからisoファイルを起動するために必要な起動パラメータをどのように決定しますか?

これは私の最初の投稿で、「isoファイルの内容に基づいてこれを行うことができ、ターゲットisoファイルが別のUSBに「dd-ed」された一般的なプログラムはありますか?」という一般的な質問をしたかったのです。ドライブ?」入門ツアーに関する情報と感謝の気持ちの質問の種類をどのように解釈するのかよく分からないので、私が悩んでいる具体的な実務質問の3つのうちの1つを質問しました。

長すぎると、あなたは多くの詳細を好むことを知っているからです。あまりにも遠く行ったら、もう一度そのようなことが起こらないように教えてください。

私が持っているマルチブートハイブリッドUSBにVoid Linux isoを追加しようとしています。

テストはBiosシステム(Fujitsu Lifebook)で実行されていますが、次の緊急警告が表示されます。

  • could not boot
  • /dev/root does not exist
  • mount: /sysroot: special device /dev/mapper/live-rw does not exist

USBの構造は次のとおりです。

sdc      8:32   1  57.8G  0 disk 
├─sdc1   8:33   1    33M  0 part # bios boot
├─sdc2   8:34   1   512M  0 part # ESP
├─sdc3   8:35   1     8G  0 part /run/media/anon/artix 
└─sdc4   8:36   1  49.2G  0 part /run/media/anon/ISOs

そのうちsdc3には、Grubを含むartix Linuxの最小基本インストールが含まれています。

sdc4のVoid isoファイルパスは/MocaccinoOS-MATE-0.20220903.isoです。

また、その内容をsdc4のフォルダに拡張しました:/loop_mounting/Void

私はLinuxコマンドラインで(「VOID_LIVE」対「ISOs」)と(「root:live = CDLABEL =)バージョン(iso対拡張)と「root」に割り当てた値を変更してさまざまなメニュー項目を試してきました。」および "root_LABEL=")。

次の出力により「VOID_LINUX」が選択されました。

[esprimo-II wan]# lsblk -f
NAME   FSTYPE FSVER LABEL     UUID                   FSAVAIL FSUSE% MOUNTPOINTS
loop0  iso966 Jolie VOID_LIVE 2022-10-01-18-20-01-00    0     100%    /mnt/iso

My grub.cfg grub.cfgの最初の部分(つまり、項目の前の部分):

# Config for GNU GRand Unified Bootloader (GRUB)# /boot/grub/grub.cfg
# januari 12, 2023
# Timeout for menu
  set timeout=-1
# Default boot entry
  set default=0
# Menu Colours
  set menu_color_normal=white/black
  set menu_color_highlight=white/green
# persistent block device  naming
# define globally (i.e outside any menuentry)
  insmod search_fs_uuid
  insmod gzio
  insmod part_gpg
  insmod part_msdos
  insmod fat
  insmod loopback
  insmod iso9660
  insmod ext2
  insmod all_video
  set gfxpayload=keep
  set root=(hd0,gpt4)

この投稿の初期テストに使用した項目は次のとおりです。

menuentry "void iso" {
  set isofile='/void-live-x86_64-20221001-xfce.iso'
  loopback loop $isofile
  probe --label --set=cd_label (loop)       
  bootoptions="iso-scan/filename=$isofile findiso=$isofile root=live:CDLABEL=$cd_label init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
# bootoptions="iso-scan/filename=$isofile findiso=$isofile root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
# bootoptions="iso-scan/filename=$isofile findiso=$isofile root=live:CDLABEL=ISOs init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
# bootoptions="iso-scan/filename=$isofile findiso=$isofile root=LABEL=ISOs init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
# bootoptions="iso-scan/filename=$isofile findiso=$isofile root=LABEL=VOID_LINUX init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
  linux (loop)/boot/vmlinuz $bootoptions
  initrd (loop)/boot/initrd
}

menuentry "void expanded" {  
  bootoptions="root=live:CDLABEL=ISOs init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8
# bootoptions="root=LABEL=ISOs init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
# bootoptions="root=live:CDLABEL=VOID_LINUX init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
# bootoptions="root=LABEL=VOID_LINUX init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8"
  linux /loop_mounting/Void/boot/vmlinuz $bootoptions
  initrd /loop_mounting/Void//boot/initrd
}

a) 'root=live:CDLABEL=$cd_label' は dracut 警告で終わります。

  • 「起動できません」
  • "/dev/disk/by-label/VOID_LIVEが存在しません。"
  • "/dev/rootが存在しません。"詳細については、rdsosreport_1_0117(添付ファイル)を参照してください。

b) 'root=live:CDLABEL=VOID_LIVE' - 上記の実験で 'cdlabel\' の値が "VOID_LIVE" として報告されたため、これを実行しませんでした。

c) 'root=live:CDLABEL=ISOs' - dracut 警告: "マウント: /sysroot: 特殊デバイス /dev/mapper/live-rw が存在しません。"以降、「ルートファイルシステムをマウントできません」、詳細についてはrdsosreport_3_0117をご覧ください。 (追加。)

d) 'root=LABEL=VOID_LIVE' - dracut 警告:

  • 「起動できません」
  • "/dev/disk/by-label/VOID_LIVEが存在しません。"詳細については、rdsosreport_4_0117(添付ファイル)を参照してください。

e) 'root=LABEL=ISOs' - - 上記のrdsosreport_5_0117のIcと同じ結果(添付ファイル)

II)「void Expanded」から始めたとき:

a) 'root=live:CDLABEL=VOID_LIVE' - Ia と同じで、rdsosreport_6_0117 (添付) により多くの結果があります。

b) 'root=live:CDLABEL=ISOs' は rdsosreport_7_0117 (添付ファイル) の Ic more と同じ結果を持ちます。

c) 'root=LABEL=VOID_LIVE' - -dracut 警告:

  • 「起動できません」
  • "/dev/disk/by-label/VOID_LIVEが存在しません。"詳細については、rdsosreport_8_0117(添付ファイル)を参照してください。

d) 'root=LABEL=ISOs' - dracut 警告: 'ルートファイルシステムをマウントできません。'詳細については、rdsosreport_9_0117(添付ファイル)を参照してください。

dd-ed isoファイルを含む他のUSBドライブは正常に起動し、ターゲットマルチUSBドライブのisoには正しいチェックサムがあります。

ループマウント中のisoファイルの構造は次のとおりです。

├── boot
│   ├── grub
│   │   ├── efiboot.img
│   │   ├── fonts
│   │   │   └── unicode.pf2
│   │   ├── grub.cfg
│   │   └── grub_void.cfg
│   ├── initrd
│   ├── isolinux
│   │   ├── boot.cat
│   │   ├── chain.c32
│   │   ├── isolinux.bin
│   │   ├── isolinux.cfg
│   │   ├── ldlinux.c32
│   │   ├── libcom32.c32
│   │   ├── libutil.c32    
│   │   ├── splash.png    
│   │   └── vesamenu.c32
    │   └── vmlinuz
    └── LiveOS
        └── squashfs.img

lsblkが循環的にマウントされたisoファイルを一覧表示する方法は次のとおりです。

 NAME    LABEL      MOUNTPOINT
loop0   VOID_LIVE  /mnt/iso

以下は、ループマウントISO(ターゲットUSBにコピーした)の3つのブートエントリです。

1 - /boot/isolinux/isolinux.cfg:

LABEL linux
MENU LABEL Void Linux 5.19.10_1 x86_64
KERNEL /boot/vmlinuz
APPEND initrd=/boot/initrd 
root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8  rd.live.overlay.overlayfs=1 
LABEL linuxram

2 - /boot/grub/grub_void.cfg

set pager="1"
set locale_dir="(${voidlive})/boot/grub/locale"
if [ -e "${prefix}/${grub_cpu}-${grub_platform}/all_video.mod" ]; then
    insmod all_video
else
    insmod efi_gop
    insmod efi_uga
    insmod video_bochs
    insmod video_cirrus
fi

insmod font

if loadfont "(${voidlive})/boot/grub/fonts/unicode.pf2" ; then
    insmod gfxterm
    set gfxmode="auto"
    terminal_input console
    terminal_output gfxterm
    insmod png
    background_image "(${voidlive})/boot/isolinux/splash.png"
fi

if [ cpuid -l ]; then
    menuentry "Void Linux 5.19.10_1 (x86_64)" {
        set gfxpayload="keep"

        linux (${voidlive})/boot/vmlinuz \
        root=live:CDLABEL=VOID_LIVE ro init=/sbin/init \
        rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 gpt add_efi_memmap \
        vconsole.unicode=1 vconsole.keymap=us \
        locale.LANG=en_US.UTF-8  rd.live.overlay.overlayfs=1 
        initrd (${voidlive})/boot/initrd
    }

    menuentry "Void Linux 5.19.10_1 (x86_64) (RAM)" {
        set gfxpayload="keep"

        linux (${voidlive})/boot/vmlinuz \
        root=live:CDLABEL=VOID_LIVE ro init=/sbin/init \
        rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 gpt add_efi_memmap \
        vconsole.unicode=1 vconsole.keymap=us \
        locale.LANG=en_US.UTF-8  rd.live.overlay.overlayfs=1  rd.live.ram
        initrd (${voidlive})/boot/initrd
    }
fi

3-/boot/grub/grub.cfg

insmod usbms 
insmod usb_keyboard
insmod part_gpt
insmod part_msdos
insmod fat
insmod iso9660
insmod udf
insmod ext2
insmod reiserfs
insmod ntfs
insmod hfsplus
insmod linux
insmod chain
search --file --no-floppy --set=voidlive "/boot/grub/grub_void.cfg"
source "(${voidlive})/boot/grub/grub_void.cfg"

lsblk が dd-ed('VOID-LIVE') USB をリストする方法は次のとおりです。

NAME    LABEL      MOUNTPOINT
sdc     VOID_LIVE  
├─sdc1  VOID_LIVE  /run/media/arthur/VOID_LIVE
└─sdc2  grub_uefi  ‮

元のisoファイルのループインストールバージョンとLIVE(つまりddバージョン)バージョンのツリー構造との間で識別できる唯一の違いは、ツリー構造にgrub-uefiパーティションがあることです。 LIVE USBとそのパスがファイルマネージャボックスに表示されます。

私の直感は、パスの違いがラベルに関連している必要があることです。ラベルは私のisosを指すために使用することです。

「e」を押すと、LIVE USB用のGRUBメニューが表示されます。

set gfxpayload="keep"
linux (${voidlive})/boot/vmlinuz root=live:CDLABEL=VOID_LABEL ro init=/sbin/init rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 gpt add_efi_memmap vconsole.unicode=1 locale.LANG=en_us.UTF-8 rd.live.overlay.overlayfs=1
initrd (${voidlive})/boot/initrd

「voidlive」変数(ソリューションが含まれていると疑われる)がどのように値を取得するかを知りたいです。 「/boot/grub/grub.cfg」と「/boot/grub/grub_void.cfg」ファイルの間をネゴシエートしていること以外は何も知りません。

この投稿を書き始めてからもう少し試してみましたが、必要に応じてここに報告できます。

今日使用されている項目は次のとおりです。

menuentry "Void ISO-Live"{
  set root='hd0,gpt4'
  set gfxpayload="keep"
  linux /loop_mounting/Void/boot/vmlinuz root=live:CDLABEL=ISOs ro init=/sbin/init \
  rd.luks=0 rd.md=0 rd.dm=0 rd.debug=1 loglevel=4 gpt add_efi_memmap vconsole.unicode=1 \
  locale.LANG=en_us.UTF-8 rd.live.overlay.overlayfs=1
   sleep 3
  initrd /loop_mounting/Void/boot/initrd
}

上記のように、「rdsosreport_12_230120.txt」が生成されます。これは投稿に含めるには大きすぎます。添付リンクがまったく見えないので、オンラインで投稿できる場所を探す必要があるようです。

ここでは、私が最も興味深いと思う部分を簡単に引用します。

1)

//lib/dracut/hooks/mount/99-mount-root.sh@130(mount_root): '[' -f /sysroot/forcefsck ']'
//lib/dracut/hooks/mount/99-mount-root.sh@131(mount_root): '[' -f /sysroot/.autofsck ']'
/init@249(): ismounted /sysroot
/lib/dracut-lib.sh@568(ismounted): findmnt /sysroot
/init@250(): usable_root /sysroot
/lib/dracut-lib.sh@742(usable_root): local _i
/lib/dracut-lib.sh@744(usable_root): '[' -d 
/sysroot ']'
/lib/dracut-lib.sh@746(usable_root): for _i in "$1"/usr/lib*/ld-*.so "$1"/lib*/ld-*.so
/lib/dracut-lib.sh@747(usable_root): '[' -e '/sysroot/usr/lib*/ld-*.so' ']'
/lib/dracut-lib.sh@746(usable_root): for _i in "$1"/usr/lib*/ld-*.so "$1"/lib*/ld-*.so
/lib/dracut-lib.sh@747(usable_root): '[' -e '/sysroot/lib*/ld-*.so' ']'
/lib/dracut-lib.sh@750(usable_root): for _i in proc sys dev
/lib/dracut-lib.sh@751(usable_root): '[' -e /sysroot/proc ']'
/lib/dracut-lib.sh@751(usable_root): return 1
/init@251(): warn '/sysroot has no proper rootfs layout, ignoring and removing offending mount hook'
/lib/dracut-lib.sh@66(warn): check_quiet
/lib/dracut-lib.sh@488(check_quiet): '[' -z yes ']'
/lib/dracut-lib.sh@67(warn): echo '<28>dracut Warning: /sysroot has no proper rootfs layout, ignoring and removing offending mount hook'
/lib/dracut-lib.sh@68(warn): echo 'dracut Warning: /sysroot has no proper rootfs layout, ignoring and removing offending mount hook'
dracut Warning /sysroot has no proper rootfs layout, ignoring and removing offending mount hook
/init@252(): umount /sysroot
/init@253(): rm -f -- /lib/dracut/hooks/mount/99-mount-root.sh
/init@257(): _i_mount=20
/init@258(): '[' 20 -gt 20 ']'
/init@242(): :
/init@243(): ismounted /sysroot
/lib/dracut-lib.sh@568(ismounted): findmnt /sysroot
/init@247(): for f in $hookdir/mount/*.sh
/init@248(): '[' -f '/lib/dracut/hooks/mount/*.sh' ']'
/init@249(): ismounted /sysroot
/lib/dracut-lib.sh@568(ismounted): findmnt /sysroot
/init@257(): _i_mount=21
/init@258(): '[' 21 -gt 20 ']'
/init@259(): flock -s 9
/init@259(): emergency_shell 'Can'''t mount root filesystem'
/lib/dracut-lib.sh@1094(emergency_shell): local _ctty
/lib/dracut-lib.sh@1095(emergency_shell): set +e
/lib/dracut-lib.sh@1096(emergency_shell): local _rdshell_name=dracut action=Boot hook=emergency
/lib/dracut-lib.sh@1097(emergency_shell): local _emergency_action
/lib/dracut-lib.sh@1099(emergency_shell): '[' 'Can'''t mount root filesystem' = -n ']'
/lib/dracut-lib.sh@1102(emergency_shell): '[' 'Can'''t mount root filesystem' = --shutdown ']'
/lib/dracut-lib.sh@1112(emergency_shell): echo
/lib/dracut-lib.sh@1112(emergency_shell): echo
/lib/dracut-lib.sh@1113(emergency_shell): warn 'Can'''t mount root filesystem'
/lib/dracut-lib.sh@66(warn): check_quiet
/lib/dracut-lib.sh@488(check_quiet): '[' -z yes ']'
/lib/dracut-lib.sh@67(warn): echo '<28>dracut Warning: Can'''t mount root filesystem'
/lib/dracut-lib.sh@68(warn): echo 'dracut Warning: Can'''t mount root filesystem'
dracut Warning: Can't mount root filesystem
/lib/dracut-lib.sh@1114(emergency_shell): echo

上記のように、別のUSBドライブにdd-edすると、同じISOファイルが正しく起動し、ターゲットUSBドライブのISOファイルがチェックされ、正しいチェックサムが得られます。

関連情報