전체 디스크(장치) 이미지에서 단일 파티션 마운트

전체 디스크(장치) 이미지에서 단일 파티션 마운트

나는 전체 디스크의 이미지를 만들었습니다.

dd if=/dev/sda of=/media/external_media/sda.img

이제 문제는 해당 디스크에 있던 ext4 파일 시스템을 마운트하고 싶지만

mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image

이미지에는 필요한 파티션뿐만 아니라 전체 디스크(MBR, 기타 파티션)가 포함되어 있으므로 분명히 슈퍼블록 오류가 발생합니다. 그래서 디스크 이미지가 폴더에 표시되도록 하는 방법을 찾아야 할 것 같습니다 /dev/...

그 방법을 아는 사람이 있나요?

추신: 언제든지 이미지를 원본 디스크에 백업할 수 있지만 dd매우 불편할 것입니다. (OS를 업데이트했는데 그대로 유지하고 싶습니다.)

답변1

이미지의 파티션 레이아웃 가져오기

$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
  Device Boot      Start         End      Blocks   Id  System
sda.img1   *          56     6400000     3199972+   c  W95 FAT32 (LBA)

이미지 시작부터 파티션 시작까지의 오프셋을 계산합니다.

섹터 크기*시작= (이 경우) 512 * 56 =28672

오프셋을 사용하여 /dev/loop0에 마운트합니다.

sudo losetup -o 28672 /dev/loop0 sda.img

이제 파티션은 다음 위치에 있습니다./dev/loop0. 당신은 할 수 있습니다fsck그것, 마운트 등

sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt

마운트 해제

sudo umount /mnt
sudo losetup -d /dev/loop0

답변2

Ubuntu 16.04용 업데이트:새로운 기능을 사용하면 losetup이제 더 쉬워졌습니다.

sudo losetup -Pf disk_image.raw

이전 버전의 Ubuntu에 대한 나머지 답변을 참조하세요.


쉬운 해결책은 다음과 같습니다.kpartx: 파티션 레이아웃을 파악하고 각각을 블록 장치에 매핑합니다. 그런 다음 원하는 것을 마운트하기만 하면 됩니다.

터미널을 열고 디스크 이미지를 찾은 후 다음 명령을 입력합니다.

$ sudo kpartx -av disk_image.raw 
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288

이 생성 loop0p1되고 loop0p2아래에 있습니다 /dev/mapper. 출력에서 파티션 크기를 확인할 수 있어 파티션을 식별하는 데 도움이 됩니다. 다음을 사용하여 원하는 것을 마운트할 수 있습니다.

$ sudo mount /dev/mapper/loop0p2 /mnt

또는 노틸러스가 블록 장치를 감지하고 사이드 바에서 마운트할 수 있습니다.

여기에 이미지 설명을 입력하세요

완료되면 마운트한 것을 마운트 해제하고 장치 매핑을 제거합니다.

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw

답변3

편집하다: 와 일하다유틸리티-리눅스 >=2.21. 버전이 포함된 우분투 배송을 작성할 당시2.20오직

에서남자는 실패:

       -P, --partscan
          force kernel to scan partition table on newly created loop device

그러니 그냥 달리세요

$ sudo losetup -f --show -P /path/to/image.img

첫 번째 사용되지 않은 루프 장치에서 디스크 이미지의 모든 파티션에 대한 장치 노드를 생성하고 이를 stdout으로 인쇄합니다. 장치를 사용하는 경우 /dev/loop0최소한 /dev/loop0p1평소처럼 마운트할 수 있는 장치가 생성됩니다.

답변4

losetup -P오토메이션

losetup -P언급된 대로 Ubuntu 16.04에서 시작하는 가장 좋은 방법입니다.https://askubuntu.com/a/496576/52975, 추가로 자동화할 기능은 다음과 같습니다. 용법:

$ 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"
)

루프 모듈 max_part 구성

이것은 16.04 이전의 괜찮은 방법입니다.

loopUbuntu 14.04의 커널에 내장된 커널 모듈입니다.

올바르게 구성하면 Linux가 자동으로 장치를 분할합니다.

cat /sys/module/loop/parameters/max_part

장치가 생성할 수 있는 파티션 수를 나타냅니다 loop.

0Ubuntu 14.04에서는 기본적으로 자동 분할이 발생하지 않습니다 .

이를 변경하려면 다음 중 하나를 추가하면 됩니다.

options loop max_part=31

의 파일로 /etc/modprobe또는:

GRUB_CMDLINE_LINUX="loop.max_part=31"

/etc/default/grub그리고 그 다음에는 sudo update-grub.

모듈 매개변수를 설정하는 방법도 다음에서 다룹니다.커널 모듈 매개변수를 추가하는 방법은 무엇입니까?

재부팅 후 수행할 작업:

sudo losetup -f --show my.img

이미지를 장치에 마운트 /dev/loopX하고 파티션을 /dev/loopXpY장치에 자동으로 마운트합니다.

따라서 재부팅하려는 경우 이것이 가장 편리한 방법입니다.

또한보십시오

관련 정보