파티션 테이블 파일의 유효성을 확인하기 위해 fdisk를 사용하지 않고 파티션 테이블 파일을 작동하는 방법은 무엇입니까?

파티션 테이블 파일의 유효성을 확인하기 위해 fdisk를 사용하지 않고 파티션 테이블 파일을 작동하는 방법은 무엇입니까?

메모리에 이미지를 생성 중입니다(/tmp는 tmpfs입니다).

$ dd if=/dev/zero of=/tmp/sdcard.img bs=512 count=3147775

파티션 테이블과 장치의 처음 3개 파티션을 보유해야 합니다.

$ losetup /dev/loop0 /tmp/sdcard.img
$ dd if=bootloader.img of=/dev/loop0 bs=512

처음 2048개 섹터에는 파티션 테이블이 포함됩니다.

$ fdisk -l /tmp/sdcard.img
Disk /dev/loop0: 1.5 GiB, 1611660800 bytes, 3147775 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0000de21

Device       Boot   Start     End Sectors  Size Id Type
/dev/loop0p1         2048 1050623 1048576  512M  c W95 FAT32 (LBA)
/dev/loop0p2      1050624 2099199 1048576  512M 83 Linux
/dev/loop0p3      2099200 3147775 1048576  512M 83 Linux

그런데 질문이 있어요.

3147775에서 시작하고 37748724에서 끝나는 네 번째 파티션 /dev/loop0p4를 추가하고 싶습니다.

파티션을 물리적으로 생성하고 싶지는 않지만 드라이브가 존재한다고 생각하도록 파티션 테이블을 수정하고 싶습니다.

그런데 이 목적으로 사용하면 fdisk불평이 나옵니다.Value out of range.

어떻게 fdisk강제로 할 수 있어?해.파티션 테이블이 유효하지 않은지 상관하지 않습니다. 더 큰 디스크에 추가한 다음 나중에 포맷할 계획입니다. 나는 파티션 테이블이 더 큰 디스크에 추가하는 것의 일부가 되기를 원합니다(이유가 있으므로 자세한 내용은 다루지 않겠습니다). 제가 알고 싶은 것은 Hex Editor를 종료하지 않고 이러한 임의의 값으로 파티션 테이블을 작성하는 방법입니다.

답변1

특히 Linux tmpfs에서는 파일을 원하는 만큼 크거나 작게 만들 수 있습니다.

df -h /tmp

Filesystem      Size  Used Avail Use% Mounted on
tmpfs            12G  472K   12G   1% /tmp

희소 파일을 만들 수 있습니다.

for cmd in  \
       'dd bs=1024k seek=20k of=' \
       'ls -slh '
do      eval "$cmd/tmp/file"
        echo
done    </dev/null

0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000152051 s, 0.0 kB/s

0 -rw-r--r-- 1 mikeserv mikeserv 20G Dec 24 20:19 /tmp/file

바라보다? 0 디스크 공간을 사용하지만 겉보기 크기는 20GB입니다.

그럼 가셔도 됩니다 fdisk /tmp/file. 방금 그 위에 파티션 테이블을 만들었습니다. 이것은 fdisk -l:


Disk /tmp/file: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x057d787a

Device     Boot    Start      End  Sectors Size Id Type
/tmp/file1          2048 20973567 20971520  10G 83 Linux
/tmp/file2      20973568 31459327 10485760   5G  5 Extended
/tmp/file3      31459328 41943039 10483712   5G 83 Linux

양식이 작성된 후에는 다음을 사용합니다.작은약간의 공간:

ls -lsh /tmp/file

8.0K -rw-r--r-- 1 mikeserv mikeserv 20G Dec 24 20:21 /tmp/file

그러나 당신은 모를 것입니다.

df -h /tmp

Filesystem      Size  Used Avail Use% Mounted on
tmpfs            12G  480K   12G   1% /tmp

그리고 당신은 드물게 할 수 있습니다연장하다같은 방법으로 파일을 만듭니다.

for cmd in  \
       'dd bs=1024k seek=30k of=' \
       'ls -slh '  'fdisk -l '
do      eval "$cmd/tmp/file"
        echo
done    </dev/null

0+0 records in
0+0 records out
0 bytes (0 B) copied, 9.8239e-05 s, 0.0 kB/s

8.0K -rw-r--r-- 1 mikeserv mikeserv 30G Dec 26 14:24 /tmp/file

Disk /tmp/file: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x057d787a

Device     Boot    Start      End  Sectors Size Id Type
/tmp/file1          2048 20973567 20971520  10G 83 Linux
/tmp/file2      20973568 31459327 10485760   5G  5 Extended
/tmp/file3      31459328 41943039 10483712   5G 83 Linux

답변2

제가 보기엔 3가지 옵션이 있는 것 같습니다.

1) 온전성 검사를 수행하지 않는 다른 도구를 사용하십시오. 당신은 16진수 편집기에 대해 언급했었습니다...

2) 사용 중인 도구(fdisk)를 수정하고 온전성 검사를 제거합니다. fdisk의 소스 코드는 이미 배포판에 포함되어 있을 수도 있습니다.

3) 온전성 검사가 효과적으로 이루어지도록 이미지를 수정하세요. 더 큰 이미지를 만들고 파티션을 만든 다음 dd를 사용하여 이미지의 시작 부분만 원하는 크기의 새 파일에 복사할 수 있습니다.

관련 정보