web-dev-qa-db-ja.com

mount -o loopの反対:ブロックデバイスを通常のファイルとして読み取ることはできますか?

Duplicityを使用してLVMボリュームをバックアップしようとしています(注:ボリュームのファイルの内容だけでなく、実際のボリューム自体もバイト単位で)。

私がこれまでに見つけた最善の方法は、LVMボリューム上のすべてのデータを一時ファイルにddし、そのファイルをバックアップセットに含め、バックアップの作成後に削除することです。ただし、これはひどく非効率的です。ディスクを不必要にスラッシングし、すべてのデータを複製しています。

必要と思われるのは、本質的にmount -o loopの反対を行う方法です。言い換えると、ファイルをブロックデバイスとしてマウントしたくないのです。代わりに、ブロックデバイスを通常の(読み取り専用)バイナリファイルとして「マウント」したいのです。Duplicityが読み取り、バックアップするファイルです。私のために。

これを達成する方法はありますか?

4
George

重複がブロックデバイスに対して特別な扱いをしているわけではなく、「特別なファイルをブロックする」というそれらが何であるかを認識します。例えば、

$ 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ファイルシステムを作成することです。しかし、それはおそらくこの質問の範囲外です。

3
Ben Grimm

diskfile というソフトウェアプロジェクトがあります。これは、ブロックデバイスを通常の読み取り専用ファイルとして公開するFuseファイルシステムです。たとえば、フォルダmountpointを使用して、diskfile /dev/dm-0 mountpointを呼び出すと、mountpoint/dm-0/dev/dm-0と同じ内容の通常のファイルになります。

3
Daniel H

これが、ブロックデバイスがデフォルトですでに機能している方法です。これらはどのプログラムでも読み取ることができます。結局のところ、ddは標準のopen()関数とread()関数だけを使用してイメージを作成します。

2
user1686

これは、物事がすでに機能している通常の方法です。

マウントオプションに-rまたは-o roを追加するだけで、読み取り専用になります。


マンマウント

 ro-rと同じ。ファイルシステムを読み取り専用でマウントします
(スーパーユーザーでも書き込みできない場合があります)。
1
Hennes