[unix] 디스크 이미지에서 여러 파티션을 동시에 마운트하는 방법은 무엇입니까?

Raspbian 이미지 의 루트 및 부팅 파티션마운트 하려고합니다 .

mount -v -o offset="70254592" -t ext4 /mnt/X/raspbian-jessie.img /tmp/raspbian
mount -v -o offset="4194304" -t vfat /mnt/X/raspbian-jessie.img /tmp/boot

루트가 마운트 될 때 마운트 부팅 :

mount: /mnt/X/raspbian-jessie.img: overlapping loop device exists

하나의 디스크 이미지에 여러 파티션을 동시에 마운트하는 방법은 무엇입니까? (디스크의 경우 파일이 아닌 이유는 무엇입니까?)



답변

losetup 2.21 -P 옵션

losetup -P -f --show my.img

/dev/loopXpY파티션 당 하나를 만듭니다 .

장점 : 많은 배포판에 사전 설치된 실행 파일 (util-linux 패키지).

단점 : kpartx를 사용하기 전에 Ubuntu 14.04에없는 매우 최근의 옵션 : https://unix.stackexchange.com/a/405639/32558

losetup -P 오토메이션

용법:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

출처:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)


답변

겹치지 않도록 파티션의 길이를 지정해야합니다. 옵션 sizelimit을 참조 man mount, man losetup.


답변

kpartx도구를 사용하십시오 . /dev/mapper직접 마운트 할 수있는 이미지 파티션을 매핑 합니다.

$ sudo kpartx -a disk.img
$ sudo mount -o loop /dev/mapper/loop0p2 /mnt

추신. 완료된 후 맵핑을 제거하는 것을 잊지 마십시오.sudo kpartx -d disk.img


답변