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


117

전체 디스크 이미지를

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를 업데이트했으며 그대로 유지하고 싶습니다)

답변:


142

이미지의 파티션 레이아웃을 가져옵니다

$ 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

정말 고맙습니다! 매력처럼 일했다! 당신은 내 일을했다 (그리고 잔인하게 삭제되는 무고한 오셀롯을 저장, P)
니콜라 Feltrin

8
적어도 배쉬에서 쉘은 심지어 당신을 위해 수학을 할 수 있습니다.sudo losetup -o $((56*512)) /dev/loop0 sda.img
Enno Gröper

1
이것은 단지 도움이되는 것이 아니라 절대적으로 훌륭합니다.
andho

.img1 및 .img2가 있으면 어떻게됩니까? "win8.raw1 * 2048 718847 358400 7"및 "win8.raw2 718848 52426751 25853952 7"
Enkouyami

6
더 간단합니다 : mount -o loop,offset=$((56 * 512)) sda.img /mnt. 출처 : madduck.net/blog/…
ostrokach

105

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

이것은 생성 loop0p1loop0p2아래 /dev/mapper. 출력에서 파티션의 크기를 식별하여 파티션을 식별하는 데 도움이됩니다. 원하는 것을 마운트 할 수 있습니다 :

$ sudo mount /dev/mapper/loop0p2 /mnt

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

여기에 이미지 설명을 입력하십시오

완료되면 마운트 한 것을 마운트 해제하고 장치 맵핑을 제거하십시오.

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

곱셈 단계를 피하면서 빠르고 쉽게 훌륭한 답변
Geek

sudo apt-get install kpartx-kpartx에 액세스합니다. kpartx게시물의 시작 부분에 링크는 내 의견에 '함정'입니다. 소프트웨어 설치를 암시하는 링크는 없습니다.
Hannu

1
@Hannu, Software Center와 통합되는 링크는 askubuntu에 대한 일반적인 관행 이지만,이 경우 일반적인 아이콘을 추가하고 URL을 업데이트해야합니다.
Joni

losetup -Pf이전에 askubuntu.com/a/496576/52975에서 언급 했으므로 최소한 해당 답변에 연결하는 것이 좋습니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
참고로,이 losetup -Pf ..명령은 /dev/loopXpY여전히 마운트해야하는 장치를 만듭니다 . 명령 X의 출력을 보면를 찾을 수 있습니다 losetup. 는 Y파티션 번호입니다.
Gunchars

26

편집 : util-linux> = 2.21 과 함께 작동합니다 . 우분투 작성 당시 버전 2.20 에만 제공

에서 남자 losetup을 :

       -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평소와 같이 마운트 할 수있게됩니다.


2
이 버전은 어디에서 찾을 수 있습니까 losetup? Ubuntu 14.04에있는 것은 2003 년 7 월 (util-linux) 맨 페이지를 가지고 있으며 파티션을 스캔하기위한`-P 옵션 (또는 다른 것)이 없습니다.
Hannu

1
죄송합니다, 실수했습니다. 최신 버전의 util-linux 패키지와 함께 제공되는 Arch Linux에서이 옵션을 사용하고 있습니다. 우분투는 슬프게도 2012 년 1 월에 릴리스 된 버전 2.20.1에 붙어있는 것 같습니다! 이 --partscan옵션은 util-linux 2.21
Ludovic

1
음, gnome-disks디스크 이미지를 마운트 할 수있는 옵션을 가지고 있으며 파티션입니다. (<-즉 Disks, 대시에서 설치 및 bash / 터미널 사용 을위한 것입니다).
Hannu

2
이것은 받아 들일
만한

@matthid 허용되는 답변을 변경할 있습니까? 이것은 좋으며 (kpartx 답변은 실제로이 버전에 의존합니다 losetup), 그러나 당시에는 그렇게하는 것이 받아 들여진 답변보다 거의 3 년이 더 새롭습니다.
Auspex

9

시도 gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

sudo필요 하지 않습니다. /media/your_user_name/partition_nameUSB 드라이브와 마찬가지로에 마운트됩니다 .


1
16.04에서 잘 작동했습니다. 방금 새 18.04를 설치했고 도구가 / dev / loopXX 가상 장치에 액세스하기 위해 sudo 암호를 묻습니다. (
Laurent

7

losetup -P 오토메이션

losetup -Phttps://askubuntu.com/a/496576/52975에 언급 된 것처럼 Ubuntu 16.04부터 시작하는 가장 좋은 방법이며, 추가 기능을 자동화하는 기능이 있습니다. 용법:

$ 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 이전의 적절한 방법입니다.

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

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

cat /sys/module/loop/parameters/max_part

loop디바이스가 생성 할 수있는 파티션 수를 나타냅니다.

그것은이다 0더 자동 분할이 발생하지 이유입니다 우분투 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장치에 자동으로 마운트합니다 .

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

또한보십시오


5

losetup을 사용하여 전체 디스크 이미지를 첨부하십시오.

# sudo losetup /dev/loop2 sda.img

그런 다음 mdadm을 사용하여 md 장치를 작성하면 모든 파티션에 대해 블록 장치가 작성됩니다.

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.

이제 파티션 장치가 나타납니다.

nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk   9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1

즉 재미있는 트릭 :)이다
요한 보울에게

4

내 생각에 가장 간단한 방법 은 StackOverflow에 대한이 답변에서mount -o loop,offset=... 언급 한대로 사용 하는 것 입니다. 아이디어는 다음과 같습니다.

fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT

이 방법은 마운트 된 파티션을 마운트 해제 한 후 루프 장치를 삭제할 필요가 없기 때문에 가장 좋습니다.

작업을 더 단순화하기 위해 (자주 필요한 경우 필요) 내 스크립트 mountimg를 사용 하여 모든 작업을 수행 할 수 있습니다. https://github.com/AlexanderAmelkin/mountimg 에서 가져 와서 다음 과 같이 사용하십시오.

mountimg /media/external_media/sda.img 2 /media/sda_image

다음과 같은 경우 파일 시스템 유형 및 기타 추가 마운트 옵션을 지정할 수도 있습니다.

mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8

파티션이 끝나면 간단히 umount다음 과 같이 하십시오.

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