Linux에서 파티션 테이블 없이 파티션을 수동으로 마운트

Linux에서 파티션 테이블 없이 파티션을 수동으로 마운트

파티션 테이블을 사용하여 Linux에서 파티션 테이블을 프로그래밍 방식으로 마운트하려고 합니다.

Lostup을 사용하여 손상된 드라이브의 파티션(파티션 테이블이 삭제된 상태)을 백업에 마운트할 수 있는지 확인하기 위해 지금까지 수행한 작업은 다음과 같습니다. 여기에서 시작 및 끝 섹터를 찾을 수 있을 것이라고 가정합니다.

다음 명령을 사용하여 2개의 파티션이 있는 새 파일을 만들었습니다.

sudo dd if=/dev/zero of=backup.img bs=1M count=100

sudo fdisk backup.imgbackup.img두 개의 파티션 으로 나누어 sudo fdisk -lu backup.img다음과 같이 표시됩니다.

Device   Boot  Start   End   Sectors   Size Id   Type
backup.img1       2048  104447  102400    50M 83   Linux
backup.img2     104448  204799  100352    49M 83   Linux

존재하지 않는 파티션 테이블을 사용하여 파티션을 마운트할 수 있는지 테스트 중이기 때문에 여기에 있는 파티션은 ext3및 파티션입니다.ext4losetup

그런 다음 이것을 시도했습니다.

sudo losetup -r -o 1048576 /dev/loop0 backup.img효과가 있고 나중에 할 수 있습니다 sudo mount /dev/loop0 /mnt/test.

하지만 파티션 테이블이 없는 원시 이미지가 있다고 가정하므로 파티션 테이블을 수동으로 제공해야 합니다. 또한 디스크가 더 손상될 수 있으므로 기존 백업을 엉망으로 만들고 싶지 않습니다.

sudo losetup -o 1048576 --sizelimit 52428288 /dev/loop0 backup.img일하다.

그러나 다음을 사용하여 루프 장치를 설치하려고 하면

sudo mount /dev/loop0 /mnt/test, 그것은 말하지 않는다

mount: /mnt/test: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program or other error

크기 제한을 제공했는데 losetup파티션이 인식되지 않는 이유는 무엇입니까 ?

여기서 뭔가 빠졌나요?

답변1

이론적으로 루프 장치를 설정하는 데 사용하는 명령에는 아무런 문제가 없습니다. 내 빌드 스크립트에서 비슷한 것을 사용하여 이미지를 생성합니다.

내 생각엔 실수로 테스트 이미지의 형식을 잘못 지정하여 ext 파일 시스템을 원래 크기보다 크게 만든 것 같습니다.

루프 장치는 파일의 일부를 가리키는 블록 장치일 뿐이며 파티션 테이블에 대해서는 아무것도 모릅니다. 마찬가지로 파티션은 디스크에서의 위치를 ​​설명하는 테이블 항목이 있는 디스크의 섹션에 지나지 않습니다.

분할된 블록 장치를 얻는 가장 쉬운 방법은 파티션 테이블을 사용하는 것입니다.~해야 한다모든 디스크에 존재합니다.

이미지에 이미 파티션 테이블이 있는 경우 실제로 Linux에 라운드 로빈 파티션을 추가하도록 요청할 수 있습니다.

loop_device=$(losetup --show -f my image.img)
partx -a $loop_device

이렇게 하면 예를 들어 장치 세트가 생성됩니다 /dev/loop2 /dev/loop2p1 /dev/loop2p2. 이렇게 하면 오프셋을 계산하는 데 어려움을 겪지 않아도 됩니다.

답변2

sudo명령 에는 필요하지 않습니다 dd. 다음이 수행됩니다.

dd if=/dev/zero of=backup.img bs=1M count=100

마찬가지로 분할된 테이블을 생성/편집하려면 다음이 필요하지 않습니다 sudo.

$ gdisk backup.img 
GPT fdisk (gdisk) version 1.0.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-204766, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-204766, default = 204766) or {+-}size{KMGTP}: 102400
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): c
Using 1
Enter name: Test_1

Command (? for help): n
Partition number (2-128, default 2):  
First sector (34-204766, default = 104448) or {+-}size{KMGTP}: 
Last sector (104448-204766, default = 204766) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): c
Partition number (1-2): 2
Enter name: Test_2

Command (? for help): p
Disk backup.img: 204800 sectors, 100.0 MiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 61A000F6-7F51-4615-B1B6-82D4C9E305B3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 204766
Partitions will be aligned on 2048-sector boundaries
Total free space is 4061 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          102400   49.0 MiB    8300  Test_1
   2          104448          204766   49.0 MiB    8300  Test_2

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to backup.img.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

파티션 테이블을 표시할 때도 마찬가지입니다. no sudo:

$ fdisk -l backup.img 
Disk backup.img: 100 MiB, 104857600 bytes, 204800 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: gpt
Disk identifier: 61A000F6-7F51-4615-B1B6-82D4C9E305B3

Device       Start    End Sectors Size Type
backup.img1   2048 102400  100353  49M Linux filesystem
backup.img2 104448 204766  100319  49M Linux filesystem

이제 이 파티션에 일부 파일 시스템을 생성하려고 합니다. 두 가지 파일 시스템 유형을 생성하겠습니다 ext4. 지금은 그것이 중요하지 않다고 생각합니다.

$ sudo kpartx -a backup.img

$ losetup --list | grep backup.img
/dev/loop19         0      0         0  0 /home/vlastimil/partition-experiments/backup.img       0     512

$ sudo mkfs.ext4 -L Test_ext4_1 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/loop19p1 
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done                            
Creating filesystem with 12544 4k blocks and 12544 inodes

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

# The same command for /dev/mapper/loop19p2

그 후에는 디스크 이미지를 생성한 후 항상 섹터 곱셈을 사용하여 마운트하지만 kpartx위에서 사용한 것처럼 단순화됩니다.

$ mkdir mntpoint
$ sudo mount /dev/mapper/loop19p1 mntpoint1/
$ sudo mount /dev/mapper/loop19p2 mntpoint2/

이제 두 개의 파티션이 마운트되었을 것입니다.

관련 정보