수정된 Ubuntu 22.04 ISO 이미지를 만들었습니다.최신 데스크톱 ISO 이미지. 새 VirtualBox VM에서 ISO로 올바르게 부팅되고 설치됩니다(UEFI를 활성화하지 않은 경우). 하지만 비교적 새로운 노트북은 수정된 ISO로 포맷된 USB 스틱에서 부팅할 수 없습니다. 인식되어 설치됩니다. 나는 xorriso를 오용하고 있다고 생각하지만 내 실수를 발견할 만큼 충분히 이해하지 못합니다. 내가 뭘 잘못했나요?
xorriso는 원래 Ubuntu 22.04 데스크탑 ISO에 대해 다음 세부 정보를 보고합니다.
$ xorriso -indev jammy-desktop-amd64.iso -report_el_torito as_mkisofs
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 963 nodes read in 1 seconds
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and size: 2007921 * 2048 , 8496 * 512
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'jammy-desktop-amd64.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito , MBR protective-msdos-label grub2-mbr cyl-align-off GPT
Media summary: 1 session, 2010211 data blocks, 3926m data, 1117g free
Volume id : 'Ubuntu 22.04.1 LTS amd64'
-V 'Ubuntu 22.04.1 LTS amd64'
--modification-date='2022080117275700'
--grub2-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:'jammy-desktop-amd64.iso'
--protective-msdos-label
-partition_cyl_align off
-partition_offset 16
--mbr-force-bootable
-append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:8031684d-8040179d::'jammy-desktop-amd64.iso'
-appended_part_as_gpt
-iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7
-c '/boot.catalog'
-b '/boot/grub/i386-pc/eltorito.img'
-no-emul-boot
-boot-load-size 4
-boot-info-table
--grub2-boot-info
-eltorito-alt-boot
-e '--interval:appended_partition_2_start_2007921s_size_8496d:all::'
-no-emul-boot
-boot-load-size 8496
그리고 대부분의 동일한 매개변수를 사용하여 새 ISO를 만듭니다.
$ xorriso -as mkisofs -o my-modified-ubuntu-22.04.iso \
-V 'Modified Ubuntu 22.04 amd64' \
--grub2-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:'jammy-desktop-amd64.iso' \
--protective-msdos-label \
-partition_cyl_align off \
-partition_offset 16 \
--mbr-force-bootable \
-append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b \
--interval:local_fs:7129428d-7137923d::'jammy-desktop-amd64.iso' \
-appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
-c '/boot.catalog' \
-b '/boot/grub/i386-pc/eltorito.img' \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--grub2-boot-info \
-eltorito-alt-boot \
-e '--interval:appended_partition_2_start_1782357s_size_8496d:all::' \
-no-emul-boot \
-boot-load-size 8496 \
<SRC_DIR>
내 <SRC_DIR>
것은 원본 ISO를 기본으로 사용하는 오버레이이지만 루트 디렉터리에서 다음 파일을 수정했습니다.
/casper/filesystem.squashfs
/casper/filesystem.manifest
/casper/filesystem.size
/md5sum.txt
/preseed/ubuntu.seed
다른 모든 파일과 ISO 내용은 원본 파일과 동일합니다.
나는 ISO가거의VirtualBox에서 제대로 실행되고 필요한 수정 사항이 표시되므로 괜찮습니다. 하지만 원래 Ubuntu 22.04 데스크톱 ISO에서 부팅하더라도 랩톱에서 이를 확인하고 부팅하도록 강제할 수는 없습니다. :(
저는 원래 업스트림 ISO에서 설치된 동일한 노트북에 Ubuntu 22.04 데스크탑을 사용하고 있습니다.
그리고 다음을 사용하여 USB 키를 만들었습니다.
$ dd bs=4M \
if=/home/me/my-modified-ubuntu-22.04.iso \
of=/dev/sda \
status=progress \
oflag=sync
$ xorriso --version
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.
xorriso 1.5.4
ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program
Copyright (C) 2019, Thomas Schmitt <[email protected]>, libburnia project.
xorriso version : 1.5.4
Version timestamp : 2021.01.30.150001
Build timestamp : -none-given-
libisofs in use : 1.5.4 (min. 1.5.4)
libjte in use : 2.0.0 (min. 2.0.0)
libburn in use : 1.5.4 (min. 1.5.4)
libburn OS adapter: internal GNU/Linux SG_IO adapter sg-linux
libisoburn in use : 1.5.4 (min. 1.5.4)
Provided under GNU GPL version 3 or later, due to libreadline license.
There is NO WARRANTY, to the extent permitted by law.
답변1
xorriso는 잘 달리고 있는 것 같습니다. ubuntu-22.04-desktop-amd64.iso를 SRC_DIR로 설치한 다음 xorriso가 부팅 장치를 보고하도록 했습니다. 유일하게 중요한 차이점은 볼륨 ID(-V)와 --modification-date입니다. 이론적으로 ISO를 찾으려면 GRUB 또는 부팅 시스템이 둘 다 필요할 수 있습니다. 그러나 GRUB가 ISO를 찾을 수 없는 경우 최소한 GRUB의 일부 메시지 텍스트를 볼 수 있어야 하며 VirtualBox에서는 실제 시스템보다 더 잘 작동하지 않아야 합니다.
보안 부팅이 문제의 잠재적 원인이라고 생각합니다. 하지만 랩톱의 EFI에서 비활성화해 볼 수 있는 것 외에는 실험을 제안할 만큼 이에 대해 충분히 알지 못합니다.
실험할 수 있는 유일한 다른 아이디어는 파일 시스템을 덮어쓰지 않고 ISO를 원래 파일 콘텐츠로 다시 패키지하면 작동하는지 확인하는 것입니다.
(여기에 결과를 게시했는데 답변을 받지 못한 경우 이메일을 보내주세요. [이메일 보호됨])
Trevor가 답변한 후 업데이트되었습니다.
따라서 VirtualBox는 EFI가 아닌 BIOS를 통해 부팅될 수 있습니다.
이러한 오프셋을 자동으로 꺼내는 방법이 있기를 바랍니다.
기본 명령 모드에서 xorriso는 ISO를 로드하고, 로드된 ISO 모델을 조작하고, 이전 ISO의 데이터 및 변경 사항을 기반으로 새 ISO를 작성할 수 있습니다. 번거로운 숫자는 숨겨집니다. 마지막에 xorriso 실행을 참조하세요. https://dev.lovelyhq.com/libburnia/libisoburn/raw/branch/master/test/merge_debian_isos 아니면 내 대답의 끝 사용자 정의 Ubuntu 22.04 이미지에서 부팅 가능한 ISO를 만드는 방법은 무엇입니까? 중요한 것은 -indev, -outdev 및 -boot_image "모든" "재생"입니다.
답변2
@Thomas, 문제는 원래 ISO에서 재사용된 파티션의 위치가 개발 중에 변경되었는데 제가 이를 눈치채지 못했다는 것입니다. 바이트 오프셋을 업데이트해야 합니다. 보다:
@@ -144,7 +144,7 @@ Makefile
-partition_cyl_align off \
-partition_offset 16 \
--mbr-force-bootable \
- -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:7129428d-7137923d::'jammy-desktop-amd64.iso' \
+ -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:8031684d-8040179d::'jammy-desktop-amd64.iso' \
-appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
-c '/boot.catalog' \
-b '/boot/grub/i386-pc/eltorito.img' \
@@ -152,7 +152,7 @@ Makefile
-boot-load-size 4 \
-boot-info-table \
--grub2-boot-info \
- -eltorito-alt-boot -e '--interval:appended_partition_2_start_1782357s_size_8496d:all::' \
+ -eltorito-alt-boot -e '--interval:appended_partition_2_start_2007921s_size_8496d:all::' \
-no-emul-boot \
-boot-load-size 8496 \
iso/overlay
이제 괜찮아. 질문을 게시할 때 xorriso가 보고한 출력에 더 많은 주의를 기울였어야 했습니다. 방해해서 미안 해요.
이러한 오프셋을 하드코딩하는 대신 자동으로 추출할 수 있는 방법이 있기를 바랍니다. 하지만 그건 또 다른 날의 문제인 것 같은데요? :)