指定されたバイトオフセットでファイルシステムを生成する方法

指定されたバイトオフセットでファイルシステムを生成する方法

ディスクの先頭から始まるbtrfsを含む3TBディスクがあります(例:/dev/sdx1の代わりに/dev/sdx)。同時にLukを使用してディスクを完全に暗号化することにしましたが、データをインポートするための空きディスクはありません。幸いなことに、このディスクは約1TBしか満たされず、ファイルシステムも縮小されました。バイトオフセットでファイルシステムをマウントすることは可能ですが、バイトオフセットからファイルシステムを生成する方法はありますか?

私の問題を解決するために、1.5TBのファイルシステムを作成し、そこにデータを移動し、ディスクの先頭にあるluksファイルシステムに1TBのbtrfsを作成し、データを再移動してbtrfsを拡張したいと思います。追加のディスク/スペースを必要としない他のソリューションはありますか?このソリューションはSSDで動作しますか? (好奇心の最後の質問です。ハードドライブがあります。)

注:ディスクの他の部分にcp btrfsを使用しますが、dd同じuidまたは異なる理由でbtrfsがこれをうまく処理できないと聞きました。

答え1

ディスクのオフセットにあるファイルシステムにアクセスする一般的な方法は、パーティションを使用することです。ただし、ディスクの先頭にはパーティションテーブル用のスペースがないため、より複雑なアクセスを必要とします。

あなたはそれを使用することができます循環装置。ループデバイスは主にファイルをブロックデバイスとして表示するために使用されますが、ブロックデバイスがオフセットで始まりオフセットで終わるようにすることができ、基本ファイル自体がブロックデバイスになる可能性があるため、次のような結果が得られます.セグメントに対応するブロックデバイスと同じ効果です。ループ装置を動作させる命令は次の通りである。losetup

losetup -o 1600g /dev/loop0 /dev/sda

ループデバイスが起動する前に、ファイルシステムが実際にシャットダウンしていることを確認してください。その後、一括でコピーできます。なぜ別のファイルシステムを作成するのか理解できません。コピーbtrfsファイルシステムは同じシステムにありますが、移動する1つ(つまり、同時に両方にアクセスできない)は可能です。

head -c 1100g /dev/sda >/dev/loop0
mount -r /dev/loop0 /mnt
# Check that the filesystem looks fine
umount /mnt
losetup -d /dev/loop0

適切な呼び出しを使用してこれを実行することもできますが、ddこれはエラーが発生しやすいです。ブロックデバイスを最初に設定してからデータを混在させる場合は、データを削除する前に段階的に進んでサイズを確認する方が簡単です。

ファイルシステムを移動したので、この問題が再度発生しないようにパーティションを作成してください。

fdisk /dev/sda

上記と同じオフセットで始まるパーティションを作成しますlosetup。変更を記録し、パーティションをマウントできることを確認します。

LUKSボリュームのパーティションを作成し、LUKSボリューム(cryptsetup luksFormat)を作成してから、btrfsファイルシステムをLUKSボリュームに戻します。ファイルシステムがまだ良好であることを確認してください。ディスクの最後のパーティションを削除し、ディスクの先頭のパーティションを展開します。 LUKSボリューム(cryptsetup resize)を展開し、ファイルシステムを展開します。

¹これは簡単ですが、  mkfs.btrfs /dev/loop0問題に対する最善の解決策ではありません。

関連情報