나는 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.img
의 startsectors
를 찾으십시오 .
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
이미지에 두 번째 파티션을 원할 경우 예를 들어 마운트 할 수 있습니다 .