일반적인 파일 시스템 이미지는 쉽게 마운트 할 수 있습니다 :
mount system.img /mnt
검사 및 수정 그러나 Raspberry Pi 시스템 이미지 (예 : raspbian)로 이것을 시도하면 다음과 같은 결과가 나타납니다.
mount: unknown filesystem type '(null)'
그리고 내가 무엇을 시도해도 -t
작동하지 않습니다. 이 이미지를 어떻게 마운트합니까?
일반적인 파일 시스템 이미지는 쉽게 마운트 할 수 있습니다 :
mount system.img /mnt
검사 및 수정 그러나 Raspberry Pi 시스템 이미지 (예 : raspbian)로 이것을 시도하면 다음과 같은 결과가 나타납니다.
mount: unknown filesystem type '(null)'
그리고 내가 무엇을 시도해도 -t
작동하지 않습니다. 이 이미지를 어떻게 마운트합니까?
답변:
이 질문은 다른 질문에 대한 답변의 일부로 답변되지만 여기서는 정식 치료가 필요하므로 계속 반복 할 필요가 없습니다.
실제로 두 개의 파티션과 부트 섹터가 포함되어 있기 때문에 이미지를 전체적으로 마운트 할 수 없습니다. 그러나 파일 내부의 오프셋을 알고 있으면 이미지에 개별 파티션을 마운트 할 수 있습니다. 이를 찾으려면를 사용하여 이미지를 블록 장치로 검사하십시오 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
파티션 의 블록을 곱하여 오프셋을 바이트 단위로 찾을 수 있습니다 .
이들은 명령 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
시스템이 실행 중일 때 두 번째 파티션 에 마운트 될 수 있습니다.
kpartx -a whatever.img
적절한 (루프) 노드를 만들어 나중에 자유롭게 마운트 할 수 있습니다. kpartx -d whatever.img
(마운트되지 않은) 루프 노드를 삭제하려면 실행하십시오 .
sizelimit
옵션 으로 파티션 크기를 지정하십시오 . 자세한 정보를 원하시면 unix.stackexchange.com/a/342466/9689 . (. Btw은 위의 대답은 그 옵션의 사용 예를 제공하기 위해 업데이트 될 수 있습니다)
$((8192*512))
.
losetup
를 통해 파티션 검사를 제공합니다 -P
. 이를 사용하면 Raspbian SD 카드 이미지와 같은 전체 디스크 이미지의 파티션을 매우 쉽게 마운트 할 수 있습니다.
losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot
처음에는 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