예전에 한 번 dd
백업해둔 적이 있는데80GB운전하다
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
답변1
또는 대신 dd
on을 사용하면 복사됩니다./dev/sdb
/dev/sdb1
/dev/sdb2
모두이것분할위의 드라이브에서 입력하나문서.
각 파티션을 개별적으로 설치해야 합니다.
도착하다산파티션문서, 먼저 파일에서 파티션이 있는 위치를 찾아야 합니다.
출력을 사용하여 각 파티션 file -s sdb.img
에 대해 다음을 찾습니다 .startsectors
sdb.img: x86 부트 섹터;파티션 1:ID=0x12, 헤더 1 시작,부트 섹터 63, 10233342 섹터;파티션 2: ID=0xc, 활동, 시작 헤더 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
다음과 같다고 가정합니다.이 문제계산방법에 대해서.
답변2
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
모든 것을 읽기 전용으로 유지하는 것은 선택 사항이지만 백업 이미지에는 좋을 수 있습니다.
고쳐 쓰다: -P
추가된 옵션util-linux-2.21을 사용하는 2012. 따라서 허용된 답변을 작성할 때는 사용할 수 없었습니다. 또한 이 답변과 다른 답변은 Linux에만 해당됩니다. OpenBSD와 NetBSD에는 다음으로 구성된 vnode 디스크가 있습니다.vnconfig(8)
FreeBSD의 메모리 디스크는 다음과 같이 구성됩니다.mdconfig(8)
.
답변3
또는 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
예를 들어 이미지에 두 번째 파티션이 필요한 경우 이를 마운트할 수 있습니다.