하드 드라이브의 / bin / dd로 만든`img`를 어떻게 마운트합니까? -s sdb.img sdb.img: x86 boot

나는 80GB 드라이브 dd를 백업하는 데 사용

dd if=/dev/sdb of=~/sdb.img

이제 해당 드라이브의 일부 파일에 액세스해야하지만 “.img”를 드라이브에 다시 복사하고 싶지 않습니다.

mount ~/sdb.img /mnt/sdb작동하지 않습니다. 다음을 반환합니다.

mount: you must specify the filesystem type

나는 파일 시스템 유형을 찾으려고 노력했다. file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

마운트가 가능 sdb.img합니까, 아니면 dd드라이브를 복원하는 데 사용해야 합니까?



답변

당신이 사용하는 경우 dd/dev/sdb대신 /dev/sdb1또는 /dev/sdb2, 당신은 복사 모든 파티션 에 상기 드라이브에서 하나 개의 파일입니다.

각 파티션을 별도로 마운트해야합니다.


파일 에서 파티션 을 마운트 하려면 먼저 파일에서 파티션이있는 위치를 찾아야합니다.

귀하의 출력을 사용하여 각 파티션 file -s sdb.imgstartsectors를 찾으십시오 .

sdb.img : x86 부트 섹터; 파티션 1 : ID = 0x12, 시작 헤드 1 , 시작 섹터 63 , 10233342 섹터; 파티션 2 : ID = xc, 활성, 시작 헤드 0 , 시작 섹터 10233405 , 72517410 섹터; 파티션 3 : ID = 0xc, 시작 헤드 0 , 시작 섹터 82750815 , 73545570 섹터, 코드 오프셋 0xc0

파티션 시작      섹터
1 63
2 10233405
3 82750815

해당 파티션 X 의 시작 섹터 인 단일 파티션을 마운트하려면 다음을 실행하십시오.

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

따라서 두 번째 파티션 을 마운트하려면 다음을 실행해야합니다.

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

참고 :/mnt/sdb2 실행하기 전에 존재 하는지 확인하십시오 .

즐기세요!


업데이트 : 대답에서 이미지의 섹터 크기가이라고 가정 했습니다.이를 계산하는 방법에 대한 이 질문512참조하십시오 .


답변

Linux에서 허용 된 응답 내의 마운트 명령 은 내재적으로 루프 장치를 만듭니다. 전체 디스크 이미지에 올바른 파티션 테이블 (커널이 이해할 수있는)이 있다고 가정하면 losetup(8)직접 오프셋 을 사용 하여 저장 하는 것이 좋습니다 . 또한 kpartx다른 답변 에서 제안한 것과 같은 추가 도구가 필요하지 않습니다 . 기본적으로 다음과 같은 작업을 수행합니다.

losetup -Prf sdb.img첫 번째 사용 가능한 루프 장치 ( -f)를 읽기 전용 ( -r)으로 이미지 파일과 연결합니다 sdb.img. 이 -P옵션은 커널이이 루프 장치의 파티션 테이블을 스캔하도록 강제하고 각 파티션에 대해 루프 장치를 만듭니다.

따라서 다음과 같은 것을 얻을 수 있습니다.

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

이제 원하는 마운트 지점에서 각 파티션을 읽기 전용으로 마운트 할 수 있습니다.

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

모든 것을 읽기 전용으로 유지하는 것은 선택 사항이지만 백업 이미지를 위해 수행하는 것이 좋습니다.

update : -P옵션은 2012 년에 util-linux-2.21과 함께 추가 되었습니다. 따라서 허용 된 답변을 작성할 당시에는 사용할 수 없었습니다. 또한이 답변과 다른 답변은 Linux에만 해당됩니다. OpenBSD와 NetBSD는 vnode 디스크를 관리 vnconfig(8)하고 FreeBSD는 메모리 디스크를 관리합니다 mdconfig(8).


답변

또는라는 멋진 도구를 사용할 수 있습니다 kpartx. 매뉴얼 페이지에서 :

kpartx-파티션 테이블에서 장치 맵 생성

즉, img 파일에서 장치 파티션을 사용하여 “의사 장치”를 만들 수 있습니다.

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

그런 다음 /dev/mapper/loop0p2이미지에 두 번째 파티션을 원할 경우 예를 들어 마운트 할 수 있습니다 .