Raspberry Pi Linux 배포판 이미지를 마운트하려면 어떻게해야합니까?


37

일반적인 파일 시스템 이미지는 쉽게 마운트 할 수 있습니다 :

mount system.img /mnt

검사 및 수정 그러나 Raspberry Pi 시스템 이미지 (예 : raspbian)로 이것을 시도하면 다음과 같은 결과가 나타납니다.

mount: unknown filesystem type '(null)'

그리고 내가 무엇을 시도해도 -t작동하지 않습니다. 이 이미지를 어떻게 마운트합니까?


답변:


71

이 질문은 다른 질문에 대한 답변의 일부로 답변되지만 여기서는 정식 치료가 필요하므로 계속 반복 할 필요가 없습니다.

실제로 두 개의 파티션과 부트 섹터가 포함되어 있기 때문에 이미지를 전체적으로 마운트 할 수 없습니다. 그러나 파일 내부의 오프셋을 알고 있으면 이미지에 개별 파티션을 마운트 할 수 있습니다. 이를 찾으려면를 사용하여 이미지를 블록 장치로 검사하십시오 fdisk -l whatever.img. 출력에는 다음과 같은 테이블이 포함되어야합니다.

Device         Boot     Start       End  Blocks  Id System
whatever.img1            8192    122879   57344   c W95 FAT32 (LBA)
whatever.img2          122880   5785599 2831360  83 Linux

이들은 두 개의 파티션입니다. 첫 번째는 "FAT32"이고 다른 하나는 "Linux"입니다. 이 표 위에는 다음을 포함하여 장치 전체에 대한 다른 정보가 있습니다.

Units: sectors of 1 * 512 = 512 bytes

이 단위 크기에 Start파티션 의 블록을 곱하여 오프셋을 바이트 단위로 찾을 수 있습니다 .

  • 첫 번째 파티션 512 * 8192 = 4194304
  • 두 번째 파티션 512 * 122880 = 62914560

이들은 명령 offset옵션 과 함께 사용할 수 있습니다 mount. 또한 각 파티션 의 유형 에 대한 단서가 있습니다 fdisk. 따라서 디렉토리가 /mnt/img/one있고 /mnt/img/two마운트 지점으로 사용할 수 있다고 가정합니다 .

mount -v -o offset=4194304 -t vfat whatever.img /mnt/img/one
mount -v -o offset=62914560 -t ext4 whatever.img /mnt/img/two

여기서 "중복 루프"오류가 발생 mount하면 버전 에 따라 첫 번째 파티션의 오프셋과 크기를 지정해야합니다. 마운트를 해제하고 블록 수 (57344) * 512 (= 29360128)를 사용하십시오.

mount -v -o offset=4194304,sizelimit=29360128 \
    -t vfat whatever.img /mnt/img/one  

두 번째 파티션은 이미지에 아무것도 없기 때문에 크기 제한이 필요하지 않습니다.

이제 두 파티션에 액세스 할 수 있습니다. 그중 아무것도 바꾸지 않으려면 -r(읽기 전용) 스위치도 사용하십시오. 아무것도 변경하지 않으면 해당 변경 사항이 .img파일에 포함 됩니다.

첫 번째 파티션은 /boot시스템이 실행 중일 때 두 번째 파티션 에 마운트 될 수 있습니다.


12
kpartx를 사용하면 훨씬 쉽게 사용할 수 있습니다. kpartx -a whatever.img적절한 (루프) 노드를 만들어 나중에 자유롭게 마운트 할 수 있습니다. kpartx -d whatever.img(마운트되지 않은) 루프 노드를 삭제하려면 실행하십시오 .


루트와 부트 파티션을 동시에 마운트하는 방법 : unix.stackexchange.com/q/342463/9689 ?
Grzegorz Wierzowiecki

1
추신 두 파티션을 동시에 마운트하려면 "오버랩"오류를 피하려면 sizelimit옵션 으로 파티션 크기를 지정하십시오 . 자세한 정보를 원하시면 unix.stackexchange.com/a/342466/9689 . (. Btw은 위의 대답은 그 옵션의 사용 예를 제공하기 위해 업데이트 될 수 있습니다)
그르 Wierzowiecki

2
수동으로 곱하는 대신 bash의 산술 확장을 사용할 수 있습니다 $((8192*512)).
Ruslan

20

losetup를 통해 파티션 검사를 제공합니다 -P. 이를 사용하면 Raspbian SD 카드 이미지와 같은 전체 디스크 이미지의 파티션을 매우 쉽게 마운트 할 수 있습니다.

losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot

이것은 사람의 실수에 덜 취약 해 보입니다. 마운트 명령에 레이블을 사용할 수도 있습니까?
ctrl-alt-delor

1

처음에는 awk / grep을 사용하여 fdisk를 구문 분석하고 오프셋을 가져 왔지만 나중에 조금 이해하기 어려울 수 있습니다. 내가 찾은 가장 쉬운 방법 :

IMAGE_FILE="YOUR IMAGE FILE GOES HERE"
TMP=$(mktemp -d)
LOOP=$(sudo losetup --show -fP "${IMAGE_FILE}")
sudo mount ${LOOP}p2 $TMP
sudo mount ${LOOP}p1 $TMP/boot/

# do stuff to ${TMP}/ which is rpi filesystem

# cleanup
umount ${TMP}/boot/
umount ${TMP}
rmdir ${TMP}

이것은로 다음 루프 장치와 세트 그것을를 자동 할당, 당신을 위해 임시-디렉토리를 생성 p1하고 p2부팅 및 루트 파티션 장치를 마운트합니다.

정리 부분을 출구 트랩에 넣을 수도 있습니다. 따라서 문제가 발생하면 마운트 / 파일이 매달려 있지 않습니다.

set -e
function cleanup {
  sudo umount -f $TMP/boot/
  sudo umount -f $TMP
  rmdir $TMP
}
trap cleanup EXIT

0

fdisk -l이 Arch linux에서 블록 대신 섹터와 함께 나타나는 경우 ... "중복 루프 오류"인 경우 블록 수를 찾는 또 다른 방법은 두 번째 파티션에서 첫 번째 파티션의 오프셋을 바이트 단위로 빼는 것입니다 2로 나눕니다. 예를 들어 (62914560-4194304) / 2 = 29360128

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.