web-dev-qa-db-ja.com

小さいものから作られた仮想ファイル(Macのようなスパースバンドルソリューション用)

スパースバンドル (小さなファイルで作成されたディスクイメージで、小さな変更後のバックアップが簡単になる)というMac OSXの機能を再現したいと思います。そのために、小さいファイルを連結して作成された単一のファイルを「仮想的に」作成する方法を探しています(big.fileはこのスペースをすべて使用するのではなく、linkから.files):

4096 0.file
4096 1.file
4096 2.file
4096 3.file
4096 4.file
20480 big.file

ループデバイスを使用してbig.fileをマウントし、btrfsとしてフォーマットし、このディスクに書き込むときに、データを特定の.fileにのみ書き込む必要があるため、簡単にバックアップできます。

どうすればそれを達成できるか提案はありますか?おそらくヒューズ関連の何か?

5
anon94943

これを行う1つの方法は、各ファイルをLVM物理ボリュームにし、それらの物理ボリュームをボリュームグループに結合して、そのスペースを使用してLVM論理ボリュームを作成することです。ただし、面倒です。ファイルをループデバイスに関連付ける必要があります。

dd if=/dev/zero of=0.file bs=1024k count=4
losetup /dev/loop0 0.file
pvcreate /dev/loop0
# … repeat for all parts …
vgcreate -s 1m foo /dev/loop0 /dev/loop1 …
lvcreate -l 19 -n big foo
mkfs.btrfs /dev/mapper/foo-big

パーツの再組み立ては、ブートスクリプトによって直接サポートされる可能性が低いため、かなりの数のことを手動でコーディングする必要があります。

重要な点がわかりません。ファイルを分割するとバックアップがどのように容易になるのでしょうか。多くの変更がボリューム全体に広がる可能性があります(たとえば、いくつかの部分にスーパーブロックのコピーが含まれます)。変更されたパーツをバックアップするだけでは、多くのメリットは得られません。とにかく、パーツの内部をさらに調べる必要があります。

増分バックアップを作成する場合は、ファイルシステムレベルで作成します。

イメージ全体の完全バックアップを作成し、空のスペースを無視する場合は、必ず スパースファイル を作成し、スパースファイルを効率的に操作するバックアップツールを使用して、ファイルシステムの空のスペースを定期的に埋めます。ゼロと sparsify それ。

私もこの種の機能を探していましたが、同様の理由で(クラウドストレージへのリモートバックアップ)。また、MacOSのスパースバンドルディスクイメージと同じように、ディスクイメージを小さく始めて、データが追加されるにつれてサイズを大きくしたかったのです。

Linuxで同等のものが見つからなかったため、これを実現するためにFuseドライバーを作成することになりました:MosaicFS

4 MBのタイルファイル(76800ファイル)で構成される300 GBのMosaicFSディスクイメージを作成するには、次の手順を実行します。

# Create MosaicFS disk image
# (the individual tile files will be stored in the directory 'disk.img')
mosaicfs create --number 76800 --size 4M disk.img

# Mount disk image
# (the virtual image is mounted as 'myimage' with a size of 300 GB)
mosaicfs mount disk.img myimage

# Create file system 
mkfs.ext4 myimage

# Mount it
mkdir -p /media/mydrive
mount -o loop myimage /media/mydrive

# Unmount everything
umount /media/mydrive
fusermount -u myimage

Linuxでサポートされている任意のファイルシステムを使用できます。オプションで、dm-crypt(ファイルシステムの下)またはEncFS(ファイルシステムの上)を使用して暗号化のレイヤーを追加することもできます。

詳細とソースコードについては、チェックアウト GitHubのMosaicFS

2
ChrisLazgo