NTFS 파티션의 GRUB 부팅 ISO/디스크 이미지

NTFS 파티션의 GRUB 부팅 ISO/디스크 이미지

내 PC의 기존 NTFS 파티션에서 Linux 라이브 시스템이 포함된 ISO를 부팅하려고 합니다. PC에는 UEFI가 있고 하드 드라이브는 GPT로 파티션되어 있으므로 GRUB4DOS는 옵션이 아닙니다. 이것이 가능합니까?

나는 이 질문이 이전에 요청되었다는 것을 알고 있습니다.Grub - ntfs 파티션에서 데비안 iso 파일을 부팅하고 설치합니다., 하지만 거기에는 승인된 답변이 없습니다. 그래서 다시 질문하는 것입니다. 또한 고정되고 미리 컴파일된 커널 대신 내 자신의 커널을 사용하고 싶습니다.

다른 답변에 따르면 NTFS 자체에서 나머지 ISO(?)를 로드할 수 있는 일종의 사용자 정의 커널 파일(EFI 파티션에 배치한다고 가정)을 포함해야 하는 것 같습니다.

이 작업은 FAT 파티션에서 이미 수행할 수 있습니다. GRUB 항목만 수행하면 됩니다.

menuentry "Boot LINUX FROM ISO FILE" {
  set iso_path=/path_to/image_on_FAT_filesystem.iso
  loopback loop (hdX,msdosY)$iso_path
  linux (loop)/path_to/vmlinuz nomagic base_only norootcopy from=$iso_path
}

답변1

그래서 해결책으로;

배경: 저는 Arch Linux를 사용하고 있습니다. 그것은 사용한다mkinitcpio이를 생성한 initramfs(및 초기 사용자 공간(!)). NTFS에서 파일 시스템 이미지를 부팅하기 때문에 initramfs를 조정해야 합니다. GRUB 및 해당 ntfs 모듈(GRUB ntfs 모듈은 ro afaik.) 커널 및 initramfs를 사용하여 NTFS 파티션에서 읽을 수 있습니다. 그 후에도 전체 읽기/쓰기 액세스를 위해서는 initramfs에서 NTFS 파티션을 마운트해야 합니다.

솔루션 작동 방식: NTFS 파티션을 마운트할 수 있도록 ntfs-3g 및 퓨즈fs 패키지를 initramfs에 추가했습니다. 저도 새로 만들었어요mkinitcpio 후크후크가 실제로 설치되기 전에 로드되어야 합니다. 후크는 매개변수(이러한 매개변수는 GRUB에서 커널 매개변수로 제공됨)를 가져오는 간단한 쉘 스크립트입니다.

menuentry "Boot LINUX FROM ISO FILE" {
  insmod ntfs
  set root='(hdX,Y)'
  linux /in_ntfs/vmlinuz-linux root=UUID=*GPT_UUID_OF_ROOTFS_ON_DISK_IMAGE* image_path=*path_to_disk_image_on_NTFS* image_hd=*GPT_UUID_OF_NTFS_DISK*
  initrd /in_ntfs/initrd.img
}
  1. NTFS 파티션 내의 디스크 이미지 위치(image_path)
  2. NTFS 파티션 GPT GUID(image_hd)
  3. 디스크 이미지에 여러 파티션이 포함된 경우 rootfs UUID(루트)

디스크 마운팅의 시작 프로세스와 관련하여:

  1. initcpio 후크는 NTFS 파티션을 마운트합니다.
  2. initcpio 후크는 NTFS 파티션에 디스크 이미지를 루프 장치로 마운트합니다.
  3. 이제 일반 마운트 후크가 실행되었으므로 ext4 또는 2단계에서 마운트된 디스크 이미지 내의 Linux rootfs가 포함된 파티션에 제공됩니다.
  4. 시스템은 초기 사용자 공간을 종료합니다. newroot는 NTFS 순환 마운트 이미지 파일의 rootfs 파티션으로 설정됩니다.
  5. 음, 우리는 NTFS 파티션 내부의 디스크 이미지/iso 이미지에서 실행되는 읽기 및 쓰기 권한을 가진 Linux 시스템을 실행하고 있습니다.

관련 정보