단위 테스트에 포함할 디스크 이미지 파일을 만들고 싶습니다. 이 디스크 파일에는 내가 읽고 싶은 일부 파일이 포함되어 있어야 합니다. SD 카드나 USB 스틱에 복사본을 만들면 dd
디스크 이미지가 너무 커서 압축해도 크기가 너무 큽니다.
그래서 새 디스크 이미지를 생성하고 나중에 마운트하고 싶습니다. 그런 다음 새 데이터를 추가하고 버전 제어를 위해 디스크 이미지를 압축합니다.
내 현재 단계:
- 디스크 이미지 생성:
dd if=/dev/zero of=DISK1.img bs=1M count=1200
- 별도로 열기:
sudo parted DISK1.img
- 분할된 테이블 생성(parted 사용):
mklabel msdos
- 파티션 생성(parted 사용):
mkpart primary fat32 1MB 100%
- 인쇄:
(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의 의견을 사용하여 다음과 같이 작동했습니다.
dd if=/dev/zero of=DISK1.img bs=1M count=1200
parted DISK1.img
- 분할된 테이블 생성(parted 사용):
mklabel msdos
- 파티션 생성(parted 사용):
mkpart primary fat32 1MB 100%
- 이별 종료
mkfs.vfat -v --offset 2048 DISK1.img
마운트 파티션:
- 시작 섹터 찾기: (
fdisk -lu DISK1.img
위와 동일) - 오프셋 가져오기(바이트): 512bytes * 2048sectors = 1048576
- lopsetup 파티션:
sudo losetup -o 1048576 /dev/loop0 DISK1.img
- 산:
sudo mount /dev/loop0 DISK_MOUNT
- 마운트된 파티션에 데이터 복사(루트 필요)
- 제거
sudo umount /dev/loop0
- 분실된 분리:
sudo losetup -d /dev/loop0
이제 새 데이터가 디스크 이미지에 있습니다.
답변1
답변2
parted
파티션 테이블과 파티션 항목을 생성하되 파일 시스템도 생성해야 합니다. parted
5단계를 마친 후 종료한 다음 적절한 오프셋을 사용하여 파일 시스템을 생성합니다( 무엇을 하는지 보여주기 -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
경로 parted
를 mkfs.vfat
./sbin
/usr/sbin
PATH
그렇지 않으면필요이미지의 파티션 테이블을 사용하면 전체 디스크 이미지보다 파일 시스템 이미지를 사용하는 것이 더 쉬울 수 있습니다. 단 하나의 명령으로 모든 작업을 수행할 수 있습니다 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.