디스크 이미지 레이아웃 및 파일 복사

디스크 이미지 레이아웃 및 파일 복사

여기에 질문하기 전에 SU/SE와 Google에서 검색을 시도했지만 성공하지 못했습니다.이것이 내가 얻은 가장 가까운 것입니다.

기본적으로 다음을 수행하려고 합니다.
- 약 128MB의 디스크 이미지를 생성합니다.
- GPT를 생성합니다.
- 처음 32MB에 FAT32 파티션을 생성합니다(UEFI라고 부르겠습니다).
- 나머지 바이트에 FAT32 파티션을 생성합니다(SYSTEM이라고 부르겠습니다).
- UEFI 파티션에 다음 하위 디렉터리를 생성합니다: /EFI/BOOT/;
- 하위 디렉토리에 파일을 복사합니다.
- SYSTEM 파티션에 다른 파일을 복사합니다.


지금까지 내가 한 일은 다음과 같습니다.

dd if=/dev/zero of=disk.img bs=1M 개수=128

parted disk.img
(parted) mktable gpt
(parted) mkpart Primary fat32 2048s 65535s
(parted) mkpart Primary fat32 65536s 100%
(parted) 정렬 확인 최적 1
(parted) 정렬 확인 최적 2
(parted) 이름 1 UEFI
(parted ) ) 이름 2 SYSTEM

이것은 내 결과입니다.

디스크 disk.img: 134MB  
섹터 크기(논리적/물리적): 512B/512B  
파티션 테이블: gpt  
디스크 플래그:  

번호 시작 끝 크기 파일 시스템 이름 플래그  
 1 1049kB 33,6MB 32,5MB UEFI msftdata
 2 33,6MB 134MB 101MB 시스템 msftdata



또 다른 방법은 두 개의 서로 다른 파티션을 만들고 나중에 병합하는 것입니다.

dd if=/dev/zero of=uefi.img bs=1M 개수=32
mformat -i uefi.img -v UEFI -f 1440 -c 1 ::
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT
dd if=/dev/zero of=system.img bs=1M 개수=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



이전 방식에서는 "파일 시스템" 열이 비어 있는 이유(fat32라고 표시되어야 함)와 하위 디렉터리를 만들고 파일을 복사하는 방법을 알 수 없습니다.
후자의 경우 mformat에 -F를 추가하면 두 이미지에 대해 적절한 FAT32 파일 시스템을 만들 수 없습니다.

이 뚱뚱한 크기에 비해 클러스터가 너무 적습니다. /etc/mtools.conf 또는 .mtoolsrc 파일에서 16비트 fat을 선택하십시오.

성공하더라도 GPT를 설정하고 두 이미지를 단일 파일로 병합하는 방법을 여전히 모릅니다.

어떻게 이를 달성할 수 있나요? 도움이나 힌트를 주시면 감사하겠습니다.

답변1

몇시간 고생한 끝에 혼자서 해결했습니다. 다음과 같은 경우에 대비하여 여기에 해결책을 게시하겠습니다.

# 256MB의 빈 디스크 이미지를 생성하고 GPT를 생성한 다음
# 두 개의 파티션: 첫 번째 파티션은 약 60MB, 두 번째 파티션은 채워집니다.
# 남은 바이트. 두 파티션이 모두 정렬됩니다.
dd if=/dev/zero of=disk.img bs=1M 개수=256
분리된 disk.img
mktable gpt
mkpart 기본 fat32 2048s 131071s
mkpart 기본 fat32 131072s 100%
정렬 확인 최적 1
정렬 확인 최적 2
이름 1 UEFI
이름 2 시스템
그만두다

# 33MB의 빈 디스크 이미지를 생성합니다.
dd if=/dev/zero of=uefi.img bs=1M 개수=33
# 디스크 이미지를 FAT32로 포맷합니다.
mkfs.vfat uefi.img -F 32
# 요청된 하위 디렉터리를 생성합니다.
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# 부팅 파일을 복사합니다.
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# 100MB의 빈 디스크 이미지를 생성합니다.
dd if=/dev/zero of=system.img bs=1M 개수=100
# 디스크 이미지를 FAT32로 포맷합니다.
mkfs.vfat system.img -F 32
# OS 파일을 복사합니다.
mcopy -i system.img SYSTEM.EFI ::

# 만일의 경우에 kpartx가 요청한 커널 모듈을 활성화합니다.
sudo modprobe dm-mod
# disk.img의 두 파티션을 /dev/mapper/loop0p1에 매핑하고 마운트합니다.
# /dev/mapper/loop0p2
sudo kpartx -av disk.img
# UEFI 부분을 디스크 이미지에 복사합니다.
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# SYSTEM 부분을 디스크 이미지에 복사합니다.
sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M
# 두 파티션을 마운트 해제합니다.
sudo kpartx -dv disk.img

관련 정보