Duplicityを使用してLVMボリュームをバックアップしようとしています(注:ボリュームのファイルの内容だけでなく、実際のボリューム自体もバイト単位で)。
私がこれまでに見つけた最善の方法は、LVMボリューム上のすべてのデータを一時ファイルにdd
し、そのファイルをバックアップセットに含め、バックアップの作成後に削除することです。ただし、これはひどく非効率的です。ディスクを不必要にスラッシングし、すべてのデータを複製しています。
必要と思われるのは、本質的にmount -o loop
の反対を行う方法です。言い換えると、ファイルをブロックデバイスとしてマウントしたくないのです。代わりに、ブロックデバイスを通常の(読み取り専用)バイナリファイルとして「マウント」したいのです。Duplicityが読み取り、バックアップするファイルです。私のために。
これを達成する方法はありますか?
重複がブロックデバイスに対して特別な扱いをしているわけではなく、「特別なファイルをブロックする」というそれらが何であるかを認識します。例えば、
$ stat /dev/dm-0
File: ‘/dev/dm-0’
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 5h/5d Inode: 10311 Links: 1 Device type: fc,0
Access: (0660/brw-rw----) Uid: ( 0/ root) Gid: ( 6/ disk)
Access: 2015-01-15 14:19:24.674418470 -0600
Modify: 2015-01-15 14:19:20.917418645 -0600
Change: 2015-01-15 14:19:20.917418645 -0600
Birth: -
に比べ:
$ stat /etc/passwd
File: ‘/etc/passwd’
Size: 2740 Blocks: 8 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 3802485 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-01-15 17:15:01.166461694 -0600
Modify: 2015-01-12 17:02:41.134820776 -0600
Change: 2015-01-12 17:02:41.201820651 -0600
Birth: -
Duplicityは、tarまたはrsyncと同じ方法でブロック特殊ファイルをバックアップします。
頭に浮かぶ唯一の解決策は、すべてのブロックデバイスを通常のファイルとして表示するFuseファイルシステムを作成することです。しかし、それはおそらくこの質問の範囲外です。
diskfile というソフトウェアプロジェクトがあります。これは、ブロックデバイスを通常の読み取り専用ファイルとして公開するFuseファイルシステムです。たとえば、フォルダmountpoint
を使用して、diskfile /dev/dm-0 mountpoint
を呼び出すと、mountpoint/dm-0
は/dev/dm-0
と同じ内容の通常のファイルになります。
これが、ブロックデバイスがデフォルトですでに機能している方法です。これらはどのプログラムでも読み取ることができます。結局のところ、dd
は標準のopen()関数とread()関数だけを使用してイメージを作成します。
これは、物事がすでに機能している通常の方法です。
マウントオプションに-r
または-o ro
を追加するだけで、読み取り専用になります。
マンマウント
ro-rと同じ。ファイルシステムを読み取り専用でマウントします (スーパーユーザーでも書き込みできない場合があります)。