분할된 루프 파일의 파일 시스템을 포맷하면 파티션 테이블이 손상됩니다.

분할된 루프 파일의 파일 시스템을 포맷하면 파티션 테이블이 손상됩니다.

test라는 이름의 약 3GB 파일을 생성하고 fdisk. 그런 다음 두 번째 파티션에서 ext4 파일 시스템을 포맷하기 위해 해당 파일(및 오프셋)로 루프 장치를 설정했습니다. 그러나 이 작업을 수행한 후에는 파티션 테이블이 잘린 것 같습니다! 오프셋을 제대로 계산했다고 확신합니다.

왜 이런 일이 발생합니까?

이 파티션 테이블에는 많은 파티션이 있습니다. 나는 max_loop일반적인 8 루프 장치보다 더 많은 것을 얻기 위해 커널 설정을 늘려야 했습니다 . 현재는 max_loop32로 설정되어 있습니다.

다음은 정확히 무슨 일이 일어나고 있는지 보여주는 캡처된 출력입니다.

steve@steve-VirtualBox:/s/src/scripted/image$ ls -l test
-rw-r--r-- 1 root root 3072000000 Jul 21 17:13 test
steve@steve-VirtualBox:/s/src/scripted/image$ fdisk -l test

Disk test: 3072 MB, 3072000000 bytes
255 heads, 63 sectors/track, 373 cylinders, total 6000000 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
Disk identifier: 0x4b8bbe0f

Device Boot      Start         End      Blocks   Id  System
 test1   *        2048       67583       32768    c  W95 FAT32 (LBA)
 test2           67584      133119       32768   83  Linux
 test3          133120     5999999     2933440    5  Extended
 test5          135168     1708031      786432   83  Linux
 test6         1710080     3282943      786432   83  Linux
 test7         3284992     3416063       65536   83  Linux
 test8         3418112     3428351        5120   83  Linux
 test9         3430400     3440639        5120   83  Linux
 test10        3442688     3452927        5120   83  Linux
 test11        3454976     3465215        5120   83  Linux
 test12        3467264     3991551      262144   83  Linux
 test13        3993600     4255743      131072   83  Linux
 test14        4257792     4268031        5120   83  Linux
 test15        4270080     4280319        5120   83  Linux
 test16        4282368     5999999      858816   83  Linux
steve@steve-VirtualBox:/s/src/scripted/image$ sudo losetup /dev/loop0 test -o 34603008
steve@steve-VirtualBox:/s/src/scripted/image$ sudo mkfs.ext4 /dev/loop0
mke2fs 1.42 (29-Nov-2011)
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
185472 inodes, 741552 blocks
37077 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=763363328
23 block groups
32768 blocks per group, 32768 fragments per group
8064 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

steve@steve-VirtualBox:/s/src/scripted/image$ sudo losetup -d /dev/loop0
steve@steve-VirtualBox:/s/src/scripted/image$ fdisk -l test
Warning: invalid flag 0x0000 of partition table 5 will be corrected by w(rite)

Disk test: 3072 MB, 3072000000 bytes
255 heads, 63 sectors/track, 373 cylinders, total 6000000 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
Disk identifier: 0x4b8bbe0f

Device Boot      Start         End      Blocks   Id  System
 test1   *        2048       67583       32768    c  W95 FAT32 (LBA)
 test2           67584      133119       32768   83  Linux
 test3          133120     5999999     2933440    5  Extended
steve@steve-VirtualBox:/s/src/scripted/image$ 

답변1

명령 에 블록 수를 추가해 보세요 mkfs.ext4.

sudo mkfs.ext4 /dev/loop0 32768

이것이 없으면 mkfs는 최대 크기의 파일 시스템을 생성하고 파일 끝에서 losetup -o [offset]시작하여 끝나는 장치를 생성합니다 . [offset]따라서 다른 파티션이 손상됩니다. 해당 파티션 위치에 나머지 파티션 정보를 저장하는 확장 파티션을 사용하고 있기 때문에 파티션 테이블이 손상됩니다.

또 다른 요점은 파티션 수를 제한하지 않아 확장 파티션이 필요하지 않은 GUID 파티션 테이블(GPT)을 사용하는 것입니다. 이렇게 해도 문제가 해결되지는 않지만 해당 파티션을 관리하는 것이 더 쉬울 수 있습니다. (LVM도 그럴 수도 있겠지만, 잘 모르겠습니다.)

관련 정보