GNU/Linux にはディレクトリを含む統合マウントがあります。したがって、読み取り専用ディレクトリの上に書き込み可能なディレクトリをマウントできます。書き込み可能なディレクトリがアンマウントされても、読み取り専用ディレクトリは影響を受けません。
私はブロックデバイスと同じ機能を探しています。書き込み可能な部分をファイルに保存することをお勧めします。だから私は次のようなものを実行したいと思います:
device-setup /dev/newdevice /dev/read-only-device overlayfile
/dev/newdevice に書き込む場合は、変更内容を上書きファイルに保存する必要があります。作成されたセクタを読み取ると、上書きされたファイルからデータをインポートする必要があります。記録されていないセクタを読み取る場合は、/dev/read-only-deviceからデータをインポートする必要があります。
そのようなツールがありますか?
答え1
デバイスマッパーとそのターゲットを使用してsnapshot
これを行うことができます。
デフォルトでは、書き込み可能なスナップショットを作成するときにLVMと同じことが行われます。
dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")
loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
dmsetup create "$newdevname"
その後、そのデバイスにアクセスできます/dev/mapper/newdevice
。
同時に、RAWデバイスにもアクセスする必要がある場合は、次のことができます。
printf '%s\n' "0 $size snapshot-origin $dev" |
dmsetup create originaldevice
経由でアクセスしてください/dev/mapper/originaldevice
。
デバイスに書き込むことができ、スナップショットデバイスに書き込まれたブロックに加えて、上書きファイルには、スナップショットソースが書き込まれたときに上書きされたブロックのコピーが含まれます。
カバレッジファイルはスパースファイルです。 (たとえばで作成truncate -s10G the-file
)元のデバイスほど大きくする必要はありません。これを使用して、どれだけ満たされているかを知ることができますdmsetup status "$newdevname"
。