msdos 파티션 테이블과 fat32를 사용하여 디스크 이미지 만들기

msdos 파티션 테이블과 fat32를 사용하여 디스크 이미지 만들기

단위 테스트에 포함할 디스크 이미지 파일을 만들고 싶습니다. 이 디스크 파일에는 내가 읽고 싶은 일부 파일이 포함되어 있어야 합니다. SD 카드나 USB 스틱에 복사본을 만들면 dd디스크 이미지가 너무 커서 압축해도 크기가 너무 큽니다.

그래서 새 디스크 이미지를 생성하고 나중에 마운트하고 싶습니다. 그런 다음 새 데이터를 추가하고 버전 제어를 위해 디스크 이미지를 압축합니다.

내 현재 단계:

  1. 디스크 이미지 생성:dd if=/dev/zero of=DISK1.img bs=1M count=1200
  2. 별도로 열기:sudo parted DISK1.img
  3. 분할된 테이블 생성(parted 사용):mklabel msdos
  4. 파티션 생성(parted 사용):mkpart primary fat32 1MB 100%
  5. 인쇄:
    (parted) print                                                            
    Modell:  (file)
    Festplatte  <path>/DISK1.img:  1258MB
    Sektorgröße (logisch/physisch): 512B/512B
    Partitionstabelle: msdos
    Disk-Flags: 
    
    Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
     1      1049kB  1258MB  1257MB  primary  fat32        lba
    

이제 parted를 종료하고 다시 열면 파일 시스템이 더 이상 인식되지 않습니다.

(parted) print                                                            
Modell:  (file)
Festplatte  <path>/DISK1.img:  1258MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
 1      1049kB  1258MB  1257MB  primary               lba

처음부터 이미지를 만드는 방법은 무엇입니까?

2024-03-02 수정

@Stephen Kitt의 의견을 사용하여 다음과 같이 작동했습니다.

  1. dd if=/dev/zero of=DISK1.img bs=1M count=1200
  2. parted DISK1.img
  3. 분할된 테이블 생성(parted 사용):mklabel msdos
  4. 파티션 생성(parted 사용):mkpart primary fat32 1MB 100%
  5. 이별 종료
  6. mkfs.vfat -v --offset 2048 DISK1.img

마운트 파티션:

  1. 시작 섹터 찾기: ( fdisk -lu DISK1.img위와 동일)
  2. 오프셋 가져오기(바이트): 512bytes * 2048sectors = 1048576
  3. lopsetup 파티션:sudo losetup -o 1048576 /dev/loop0 DISK1.img
  4. 산:sudo mount /dev/loop0 DISK_MOUNT
  5. 마운트된 파티션에 데이터 복사(루트 필요)
  6. 제거sudo umount /dev/loop0
  7. 분실된 분리:sudo losetup -d /dev/loop0

이제 새 데이터가 디스크 이미지에 있습니다.

답변1

귀하의 단계는 정확합니다. 다음을 추가하십시오.

sudo mkfs.vfat -F 32 DISK1.img절차의 1단계 이후와 2단계 이전.

보다mkfs.vfat 맨페이지

답변2

parted파티션 테이블과 파티션 항목을 생성하되 파일 시스템도 생성해야 합니다. parted5단계를 마친 후 종료한 다음 적절한 오프셋을 사용하여 파일 시스템을 생성합니다( 무엇을 하는지 보여주기 -v위해 이것을 사용하고 있습니다).mkfs.vfat

$ /sbin/mkfs.vfat -v --offset 2048 DISK1.img
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK1.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2455551 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306339 clusters.
There are 32 reserved sectors.
Volume ID is 97413b09, no volume label.

이렇게 하면 첫 번째 파티션(섹터 2048에서 시작)이 FAT32 볼륨으로 포맷됩니다. 이미지를 다시 로드하면 parted다음이 표시됩니다.

$ /sbin/parted DISK1.img
(parted) print
Disk …/DISK1.img: 1258MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1258MB  1257MB  primary  fat32        lba

일반적으로 이미지를 처리할 때 적절한 오프셋을 결정하려면 단위를 parted섹터로 변경할 수 있습니다.

(parted) unit s                                                           
(parted) print                                                            
Model:  (file)
Disk …/DISK1.img: 2457600s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End       Size      Type     File system  Flags
 1      2048s  2457599s  2455552s  primary  fat32        lba

( 자신의 디스크 이미지를 다루고 있으므로 필수는 아니며 전체 sudo경로 partedmkfs.vfat./sbin/usr/sbinPATH

그렇지 않으면필요이미지의 파티션 테이블을 사용하면 전체 디스크 이미지보다 파일 시스템 이미지를 사용하는 것이 더 쉬울 수 있습니다. 단 하나의 명령으로 모든 작업을 수행할 수 있습니다 mkfs.vfat.

$ /sbin/mkfs.vfat -v -C DISK2.img $((1200*1024))
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK2.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2457567 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306591 clusters.
There are 32 reserved sectors.
Volume ID is a452a0bf, no volume label.

관련 정보