나는 전체 디스크의 이미지를 만들었습니다.
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 이전의 괜찮은 방법입니다.
loop
Ubuntu 14.04의 커널에 내장된 커널 모듈입니다.
올바르게 구성하면 Linux가 자동으로 장치를 분할합니다.
cat /sys/module/loop/parameters/max_part
장치가 생성할 수 있는 파티션 수를 나타냅니다 loop
.
0
Ubuntu 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
장치에 자동으로 마운트합니다.
따라서 재부팅하려는 경우 이것이 가장 편리한 방법입니다.
또한보십시오
- https://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image
- https://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of-a-block-device-eg-hdd-u
- 전체 디스크(장치) 이미지에서 단일 파티션 마운트
- https://stackoverflow.com/questions/1419489/loopback-mounting-individual-partitions-from-within-a-file-that-contains-a-parti