디스크 img 파일을 여러 부분으로 나누어 단일 루프 장치로 마운트하는 방법이 있습니까?
디스크 img 파일을 여러 부분으로 나누어 단일 루프 장치로 마운트하는 방법이 있습니까?
답변:
나는 당신이 그 자리에서 그것을 할 수 있다고 생각하지 않지만 충분한 공간이 있다면 이것이 효과가 있습니다.
# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k
# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01
# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>
# Mount the new filesystem
mount /dev/md0 /mnt
RAID 디스크에는 디스크 수, RAID 레벨 등이 저장되는 특정 헤더가 있으므로 원본 파일에서 RAID 배열을 만들 수 없습니다. 그렇게하면 원본 파일의 해당 부분을 덮어 씁니다.
를 사용하여 mdadm --build
메타 데이터없이 배열을 만들 수 있지만 실제로 백업을 먼저 만들어야합니다. 또는 읽기 전용 마운트이면 충분합니다.
losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt
왜 이러고 싶니? 파일 시스템이 4GB를 초과하는 파일을 처리 할 수없는 경우 정상 파일로 전환하면됩니다.
truncate
대신 dd
(단지 포함 구멍으로 FS에 대한 실제 쓰기하지만 단지 할당 된 아이 노드와 마크 파일을 수행하지 않습니다) 훨씬 더 빨리 때문이다.
분할 디스크 이미지 (또는 파티션 이미지)를 마운트하려면 affuse
현재 여기에서 유지 관리되는 afftools에서 사용해야합니다 . https://github.com/sshock/AFFLIBv3
따라서 파일이 있으면 여러 서브 파일로 분할하십시오. test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009
그럼 당신은 사실상 그들과 함께 할 수 있습니다 affuse
# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw
(이것은 파일 000부터 001, 002 등으로 시작하는 모든 파일을 결합합니다.)
그런 다음 이미지를 마운트하십시오.
mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test
사용법은 여기 및 일부 예는 여기에 설명되어 있습니다 . 맨 페이지는 컴파일 및 설치 후 또는 여기 에서도 사용할 수 있습니다 .
추신 : affuse
분할 파일의 크기가 512 바이트의 배수 인 경우에만 나에게 효과적이었습니다.
자신의 블록 스토리지 장치 확장을 작성하고 (퓨즈와 같은 확장을 생각) 주소가 무엇인지에 따라 검색을 수행 할 수 있습니다.
여기에서 https://github.com/libfuse/python-fuse/blob/master/example/hello.py 퓨즈 사용 방법의 예를 찾을 수 있습니다
지금까지 솔루션에 대해 가장 알고있는 것은 VMware VM을 만드는 것입니다. Rescatux 또는 Knoppix와 같은 Linux 라이브 CD를 시작하고 호스트 컴퓨터에 SMB 공유 폴더를 생성 한 후 해당 SMB 공유를 VM에 마운트 한 다음 dd
이미지를 가상 HD에 넣습니다. VMware는 기본적으로 디스크 이미지를 분할 파일로 저장하므로 여러 파일로 분할 된 디스크 이미지를 직접 읽는 가장 가까운 방법입니다.
나중에 호스트 컴퓨터에서 파일에 액세스하려면 이미지에 두 번째 가상 HD를 추가하고 파일을 복사 해보십시오. 그런 다음 VM에서 SMB 공유 폴더를 설정하고 호스트에서 연결합니다. 예를 들어, iPod Classic (fat32 만 포함) 또는 스마트 폰의 SD 카드 (보통 사용자 정의 ROM을 순서대로 설치해야 함)를 사용하는 경우 FAT32의 4GB 파일 제한을 위반할 수 있습니다. 외부 저장소에서 Ext3 또는 NTFS를 사용하려면 삼성이나 모토로라와 같은 유명한 제조업체의 전화가 필요합니다.
그것은 효율적인 해결책은 아니지만, 아이팟 클래식이나 스톡 ROM이있는 삼성 스마트 폰에서 fat32 이외의 다른 FS를 사용할 수 없기 때문에 제한되어 왔기 때문에 과거에도 여전히 효과적인 해결책을 찾을 수 없습니다. 나는 그것을 직접 써야 할 수도 있습니다.
추신 : Windows를 사용하는 경우 이것이 유일한 방법 일 수 있음을 언급하지 않았습니다.
BSD에서 union 옵션을 사용하여 마운트 할 수 있습니다. Linux에서는 unionFS를 사용해 볼 수 있습니다.