從 ISO 引導壓縮的檔案系統

從 ISO 引導壓縮的檔案系統

我正在嘗試從虛擬機器建立一個具有壓縮檔案系統的 UEFI 可啟動 CD ISO,我為其配置了我需要的東西。

解釋:

  1. 我使用打包程式和 kickstart 檔案來安裝 CentOS 7
  2. 我使用打包程式提供腳本來編譯圖像上需要的一些二進位內容
  3. 我按照以下指示進行操作這裡在我需要的一切都在作業系統中之後創建壓縮的檔案系統映像:
mkdir -p /mnt/squashfs /squashfs
mount -o bind / /mnt/squashfs

mksquashfs /mnt/squashfs /squashfs/filesystem.squashfs -comp gzip -no-exports -xattrs -noappend -no-recovery -e /mnt/squashfs/squashfs/filesystem.squashfs
find /boot -name 'vmlinuz-*' -type f -exec cp {} /squashfs/vmlinuz \;
find /boot -name 'init*' -type f -exec cp {} /squashfs/initrd.img \;
  1. 之後我拿了一些腳本這裡建構 ISO:
yum -y install xorriso dosfstools grub2-efi-modules mtools

mkdir -p /iso /iso_src/ /iso_src/live
find /boot -name 'vmlinuz-*' -type f -exec cp {} /iso_src/vmlinuz \;
find /boot -name 'init*' -type f -exec cp {} /iso_src/initrd.img \;
cp /squashfs/filesystem.squashfs /iso_src/live/
touch /iso_src/LINUX_CUSTOM

cat <<'EOF' >grub.cfg

search --set=root --file /LINUX_CUSTOM

insmod all_video

set default="0"
set timeout=30

menuentry "Custom Linux" {
    linux /vmlinuz boot=live toram=filesystem.squashfs quiet nomodeset
    initrd /initrd.img
}
EOF

grub2-mkstandalone \
    --format=x86_64-efi \
    --output=bootx64.efi \
    --locales="" \
    --fonts="" \
    "boot/grub/grub.cfg=grub.cfg"

 (dd if=/dev/zero of=efiboot.img bs=1M count=10 && \
    mkfs.vfat efiboot.img && \
    mmd -i efiboot.img efi efi/boot && \
    mcopy -i efiboot.img ./bootx64.efi ::efi/boot/
)

xorriso \
    -as mkisofs \
    -iso-level 3 \
    -full-iso9660-filenames \
    -volid "LINUX_CUSTOM" \
    -eltorito-alt-boot \
        -e EFI/efiboot.img \
        -no-emul-boot \
    -append_partition 2 0xef efiboot.img \
    -output "/iso/image.iso" \
    -graft-points \
        "/iso_src" \
        /EFI/efiboot.img=efiboot.img

現在我嘗試在啟用 UEFI 的情況下在 VirtualBox 中啟動該 ISO,但失敗並顯示

Failed to switch root: Specified switch root path '/sysroot' does not seem to be an OS tree

據我了解我的squashfs尚未安裝?我對此有點陌生,所以我對所有步驟都有部分了解,感覺好像我錯過了一些東西,因為唯一告訴 grub 而不是我製作圖像的機器(其中有一個實際的塊設備)現在我需要我的文件系統來自squashfs檔案就是這樣toram

任何人都可以提供有關如何解決此問題並啟動此系統的指示/範例嗎?我讀了很多,dracut但不明白如何在這種情況下使用它?或者這只是一個 grub 設定檔問題?

更新

經過一番谷歌搜尋後,我切換到 dracut,現在在我的配置腳本中,我使用 dracut 生成 initrd,如下所示:

dracut -a dmsquash-live -N -m "kernel-modules base" --filesystems "squashfs" /dracut/initrd.dracut.img

並使用以下grub啟動項目(這裡的initrd.img是先前建立的initrd.dracut.img):

menuentry "Custom Linux" {
    linux /vmlinuz root=live:/dev/sr0 rd.live.debug=1
    initrd /initrd.img
}

這似乎更進一步​​,但失敗了Warning: /dev/mapper/live-rw does not exist

更新2

CentOS 7 似乎附帶了一個較舊的 dracut,僅支援 Live CD 模式(請參閱The filesystem structure is traditionally expected to be:下文Booting live images,我的結構不符合該模式)。所以我從 CentOS 8 開始,這是一個較新的 dracut,它可以處理我所擁有的結構,現在我啟動時唯一的問題是/etc/fstab從原始機器上啟動,我希望 Google 能幫助我解決這個問題:D

更新3

在製作squashfs時簡單地忽略/etc/fstab沿和/proc`就可以了-最終的ISO在UEFI模式下成功啟動。/dev

相關內容