명령을 수행 중입니다.여기에 관한 게시물에서Qt, qwt 및 오버클럭 RPI를 컴파일하고 설치하는 방법
sudo mount -o loop,offset=62914560
<date>-wheezy-raspbian.img /mnt/rasp-pi-rootfs
나는 fdisk 2016-02-26-raspbian-jessie.img
하고 나는 얻는다
Disk: 2016-02-26-raspbian-jessie.img geometry: 976/128/63 [7870464 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 0C 0 130 3 - 8 40 32 [ 8192 - 122880] Win95 FAT32L
2: 83 8 40 33 - 489 232 63 [ 131072 - 7739392] Linux files*
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
마운트의 오프셋이 왜 특정합니까?
답변1
62914560은 파일에서 정확히 60MiB를 가리키므로 Raspian 디스크 이미지가 실제로 분할되어 있다고 추측할 수 있습니다. offset은 실제 오프셋을 알려줍니다 mount
(또는 실제로 수행합니다 ).losetup
뿌리파일 시스템(저는 이것이 두 파티션 중 두 번째라고 제안합니다. 첫 번째는 /boot
부트로더/펌웨어 파일일 가능성이 높습니다).
여기서 문제는 loop
드라이버가 실제로 파티션 이미지를 지원하더라도 모듈을 로드할 때(또는 커널 명령줄에서) 장치당 최대 파티션 수를 모듈 매개변수로 지정해야 한다는 것입니다 loop
. 기본적으로 이를 수행하지 않는 배포판이 많기 때문에 이는 ...,offset=XXX
기본 매개변수(0이므로 분할이 지원되지 않음)를 사용할 때 분할된 이미지를 처리하는 가장 안정적인 방법입니다.loop
loop
드라이버를 살펴보면 드라이버에 파티션 지원이 로드되어 있는지 테스트 할 수 있습니다 /sys/module/loop/parameters/max_part
. 현재 시스템(ArchLinux)에서 loop
매개변수 없이 로드하는 방법은 다음과 같습니다.
$ cat /sys/module/loop/parameters/max_part
0
파티션 지원을 활성화하려면 마운트를 해제 loop
하고 원하는 옵션 값으로 다시 로드 해야 합니다 max_part
.
# modprobe -r loop
# modprobe loop max_part=8
그런 다음 다음을 수행하여 이미지의 루핑 장치를 수동으로 설정할 수 있습니다.
# losetup /dev/loop0 /path/to/<date>-wheezy-raspbian.img
/dev/loop0
이제 전체 이미지뿐만 아니라 (내 이론이 올바른 한) 이미지의 모든 파티션 등에 대해서도 볼 수 있습니다 /dev/loop0p1
. (스크립트 참조)/dev/loop0p2
losetup
예).
편집하다:
이 작업을 지루한 방법으로 직접 수행하려면( loop
올바른 max_part
옵션을 사용하여 다시 로드하고 단순히 파티션을 사용하는 것이 좋습니다) fdisk
이미지 파일(ArchLinux ISO가 표시됨)에서 직접 사용하여 필요한 오프셋을 찾을 수 있습니다. 나는 그것을 가지고 있었지만 아이디어는 동일합니다) :
$ fdisk -l archlinux-2016.03.01-dual.iso
Disk archlinux-2016.03.01-dual.iso: 268.3 MiB, 281339392 bytes, 549491 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: 0x2237702c
Device Boot Start End Sectors Size Id Type
archlinux-2016.03.01-dual.iso1 * 0 1452031 1452032 709M 0 Empty
archlinux-2016.03.01-dual.iso2 172 63659 63488 31M ef EFI (FAT-12/16/32)
두 번째 파티션은 섹터 172에서 시작하며 섹터 크기는 512바이트입니다. 두 값을 곱하면 바이트 단위의 오프셋이 제공되므로 파티션을 마운트하려면 다음을 사용합니다.
# mount -o loop,offset=$((172*512)) archlinux-2016.03.01-dual.iso /mnt
# ls -l /mnt
total 4
drwxr-xr-x 4 root root 2048 Mar 1 15:49 EFI
drwxr-xr-x 3 root root 2048 Mar 1 15:49 loader
바라보다.
답변2
"losetup" 매뉴얼 페이지에 따르면.
-o, --offset offset 지정된 파일이나 장치로 오프셋 바이트만큼 데이터 이동을 시작합니다.
예를 들어, 장치의 "dd"가 있는 경우 다음을 사용하여 해당 파티션을 마운트할 수 있습니다.오프셋옵션.
오프셋 값은 파티션의 시작 값에 섹터 크기를 곱하여 계산됩니다.
예를 들어
SHW@SHW:/tmp # fdisk -lu 040614.dd
Disk 040614.dd: 1.9 GiB, 2048385024 bytes, 4000752 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: 0x5324798e
Device Boot Start End Sectors Size Id Type
040614.dd1 * 2048 30719 28672 14M 83 Linux
040614.dd2 30720 1054719 1024000 500M 83 Linux
040614.dd3 1054720 1095679 40960 20M 83 Linux
SHW@SHW:/tmp # mount -o loop,offset=`echo 1054720 \* 512|bc` 040614.dd1 /mnt/loop
고쳐 쓰다:
040614.dd다음 명령으로 생성되었습니다.
SHW@SHW:/tmp # fdisk -l /dev/sdb
Disk /dev/sdb: 1.9 GiB, 2048385024 bytes, 4000752 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: 0x5324798e
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 30719 28672 14M 83 Linux
/dev/sdb2 30720 1054719 1024000 500M 83 Linux
/dev/sdb3 1054720 1095679 40960 20M 83 Linux
SHW@SHW:/tmp # dd if=/dev/sdb of=040614.dd