여러 개의 img 파일을 단일 루프 장치로 마운트


19

디스크 img 파일을 여러 부분으로 나누어 단일 루프 장치로 마운트하는 방법이 있습니까?


1
어떻게 부러 졌습니까? 어떤 형식입니까? 특별한 형식이라면 이것에 대한 퓨즈 마술이있을 수 있지만 대답은 그것들을 함께 모으는 것입니다!
Caleb

장치의 형식에 따라 4 기가 적은 파일로 제한됩니다. 장치에 대한 루트 액세스 권한이 있습니다. LVM으로 할 수있는 것이 있습니까
MageProspero

답변:


16

나는 당신이 그 자리에서 그것을 할 수 있다고 생각하지 않지만 충분한 공간이 있다면 이것이 효과가 있습니다.

# 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를 초과하는 파일을 처리 할 수없는 경우 정상 파일로 전환하면됩니다.


장치 매퍼로도 가능할 수 있지만 위가 더 쉽습니다.
Wodin

너무 오래 받아 들여서 죄송합니다. 정상적인 상황에서는 모험 모드 질문이 아닙니다.
MageProspero

2
당신은 아마 사용하려면 truncate대신 dd(단지 포함 구멍으로 FS에 대한 실제 쓰기하지만 단지 할당 된 아이 노드와 마크 파일을 수행하지 않습니다) 훨씬 더 빨리 때문이다.
Maciej Piechotka

좋은. 나는 몰랐다.
stribika

당신이 CrashPlan 또는 유료 Google 드라이브와 같은 대용량 클라우드 기반 백업 또는 동기화 솔루션을 사용하는 경우 경험에서,이다 매우 대신에 하나의 큰 파일의 작은 분할 파일을 사용하는 것이 좋습니다. 파일 다운로드에 실패한 경우 전체 100GB 대신 1GB 만 다시 다운로드하면됩니다.
RAKK

3

분할 디스크 이미지 (또는 파티션 이미지)를 마운트하려면 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 바이트의 배수 인 경우에만 나에게 효과적이었습니다.


4
방금이 방법을 시도했습니다. 주요 경고 사항이 있습니다. 이미지를 읽기 전용으로 만 마운트 할 수 있습니다.
RAKK

파일 청크가 수백 개에 불과하고 수백 개가 아닌 한 잘 작동합니다. mdadm을 사용하여 선형 RAID 파티션을 만드는 것이 좋습니다. unix.stackexchange.com/a/98779/22709
Jay Taylor


0

지금까지 솔루션에 대해 가장 알고있는 것은 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를 사용하는 경우 이것이 유일한 방법 일 수 있음을 언급하지 않았습니다.


이 문제를 방문한 지 얼마되지 않았습니다. 나는 아직도 그것을 가지고 있습니다. 또한 당신과 똑같은 이유가 있습니다. 자체 사용자 정의 파일 시스템이있는 프로세스를 가져올 수 있는지 궁금합니다. 솔직히 시도해보고 싶습니다. 노드에서 할 수 있다는 것을 알고 있습니다. 나는 통역사를 뿌리 내리는 데 성공했습니다. 그래도 문제가 해결되는지 모르겠습니다. 내 하드웨어 삼성 갤럭시에서 이것은 괜찮습니다. 이 문제를 함께 해결하기 위해 노력하고 싶습니다.
MageProspero

-1

BSD에서 union 옵션을 사용하여 마운트 할 수 있습니다. Linux에서는 unionFS를 사용해 볼 수 있습니다.


2
이것은 원격으로 관련이 없습니다. 질문을 잘못 읽었습니까?
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.