分割されたディスク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への実際の書き込みは実行されず、inodeを割り当てて、ファイルにホールが含まれているとマークするだけです)。
分割ディスクイメージ(またはパーティションイメージ)をマウントするに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
使用法はここで、いくつかの例はここで説明します。コンパイルおよびインストール後、またはこちらからマンページも利用できます。
PS:私にとってaffuse
は、分割ファイルのサイズが512バイトの倍数である場合にのみ機能しました。
独自のブロックストレージデバイス拡張機能(ヒューズのような拡張機能と考えてください)を記述し、アドレスに応じてシークを実行できます。
ここでは、fuse https://github.com/libfuse/python-fuse/blob/master/example/hello.pyの使用方法の例を見つけることができ ます
私がこれまでソリューションに知っている最も近いものは、VMware VMを作成することです。RescatuxやKnoppixなどのLinuxライブCDを起動し、ホストコンピューターにSMB共有フォルダーを作成し、そのSMB共有をVMにマウントしてからdd
、イメージを仮想HDにマウントします。VMwareはデフォルトでディスクイメージを分割ファイルとして保存するため、これは複数のファイルに分割されたディスクイメージを直接読み取るのに最も近い方法です。
後で、ホストコンピューターからファイルにアクセスする場合は、2番目の仮想HDをイメージに追加して、そこにファイルをコピーしてみてください。次に、VMでSMB共有フォルダーをセットアップし、ホストから接続します。この方法では、たとえば、iPod Classic(fat32のみを扱う)またはスマートフォンのSDカード(通常はカスタムROMを順番にインストールする必要がある)を使用している場合、FAT32の4 GBのファイル制限に違反する可能性があります外部ストレージでExt3またはNTFSを使用するには、SamsungやMotorolaなどの人気メーカーの電話が必要です。そのため、中国のスマートフォンを使用している場合は困惑します。
確かに効率的なソリューションではありませんが、iPod ClassicやストックROMを搭載したSamsungスマートフォンでfat32以外のFSを使用できないことに制限されているため、過去とまだこれに対する効率的な解決策を見つけることができません。私も自分で書く必要があるかもしれません。
PS:Windowsを使用している場合、これが唯一の方法である可能性があることに言及するのを忘れました。
BSDでは、unionオプションを使用してマウントできます。Linuxでは、unionFSを試すことができます。