web-dev-qa-db-ja.com

複数のimgファイルを単一ループデバイスとしてマウント

分割されたディスクのimgファイルを単一のループデバイスとしてマウントする方法はありますか?

19
MageProspero

私はあなたがそれをその場で行うことができるとは思いませんが、十分なスペースがあればこれはうまくいくはずです:

# 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を超えるファイルを処理できない場合は、正常なファイルに切り替える必要があります。

16
stribika

分割ディスクイメージ(またはパーティションイメージ)をマウントするには、現在ここで管理されているafftoolsのaffuseを使用する必要があります。 https://github.com/sshock/AFFLIBv

したがって、ファイルがある場合は、いくつかのサブファイルに分割してください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

使い方は ここ といくつかの例 ここ で説明されています。コンパイルしてインストールした後、または here のマンページも利用できます。

PS:私にとってaffuseは、分割ファイルのサイズが512バイトの倍数である場合にのみ機能しました。

3
erik

独自のブロックストレージデバイス拡張機能(Fuseのような拡張機能と考えてください)を作成し、アドレスに応じてシークを実行できます。

ここにFuseの使用例 https://github.com/libfuse/python-Fuse/blob/master/example/hello.py があります。

1
test30

これまで私が知っている解決策に最も近いのは、VMware VMを作成することです。 RescatuxやKnoppixのようなLinuxライブCDを起動し、SMB共有フォルダーをホストコンピューターに作成し、そのSMB共有をVMにマウントします。次に、イメージを仮想HDにddします。デフォルトでは、VMwareはディスクイメージを分割ファイルとして保存するため、これは複数のファイルに分割されたディスクイメージを直接読み取るのに最も近いものです。

後で、ホストコンピューターからファイルにアクセスする場合は、2番目の仮想HDをイメージに追加して、そこにファイルをコピーしてみてください。次に、SMB共有フォルダをVMに設定し、ホストからそのフォルダに接続します。これにより、たとえば、4 GBファイルに違反することができます。 iPodクラシック(fat32のみ)を使用している場合のFAT32の制限、またはスマートフォンのSDカード(通常、Ext3を使用するには、カスタムROMをインストールする必要があります)外部ストレージ上のNTFS。これには、SamsungやMotorolaなどの人気メーカーの電話が必要になるため、中国のスマートフォンを使用していると困ります。

それは確かに効率的な解決策ではありませんが、私がiPod ClassicまたはストックROMを備えたSamsungスマートフォンでfat32以外のFSを使用できないことによって制限されているため、私は過去にインターネット全体を精査してきましたが、これに対する効率的な解決策を見つけることがまだできていません。

PS:Windowsを使用している場合、これがこれを行う唯一の方法である可能性があることに言及するのを忘れていました。

0
RAKK