私はしばしば非永久的なデバイスマッパースナップショットを使用します。サンプルテーブルは次のとおりです。
0 10485760 snapshot /dev/sdc3 /dev/sdc6 N 16
衝突が発生してもディスクは不揮発性なので、両方を/dev/sdc3
持っています。しかし、デバイスを再インポートするか、少なくとも何らかの方法で変更を元に戻す/dev/sdc6
ことはできますか?私の目的のために永続的なスナップショットが存在することを知っていますが、まだ疑問に思います。ありがとうございます。snapshot
/dev/sdc6
答え1
これは本当に不可能です。一部のデータがまだ残っている可能性がありますが、ファイルシステムでは理解できません。
スナップショットは、ブロックデバイスを特定のブロックサイズのデータブロックとして扱います。書き込みが入ると、影響を受ける各ブロックをスナップショットデバイスにコピーして保存します。
ファイルシステムの書き込みは通常かなりランダムであるため、順序に関係なく発生する可能性があります。コピーされたブロックは異なるオフセットで終了します。
したがって、スナップショットはメタデータを保存し、メタデータは(以前のオフセット<->新しいオフセット)間の関係です。
一時スナップショットの場合、ストレージはメモリにのみ存在します。スナップショットを再起動または無効にすると、そのスナップショットは失われます。
このメタデータがない場合は何が得られますか?
基本的には「ランダムデータの塊」を見ているのです。
そのスナップショットデバイスを取り戻すには、コピーした各ブロックの元のオフセットを何らかの方法で確認できる必要があります。
しかし、これは通常不可能です。この塊がもともとどこから来たのかわかりません。これがブロックなのか、スナップショットが作成される前に存在していた古いデータなのかはわかりません。
この問題を解決できますが、スナップショットが有効になっていないときに元のデバイスに書き込みが行われなくなった場合にのみ機能します。デバイスが読み書きでマウントされ、スナップショットにないデータブロックを上書きすると、メタデータは失われなくなります。データがありません。
だから全体的には回復不可能と考えられていました。
例外が可能です。
複数のチャンクが順番にコピーされたり、探しているデータが単一のチャンクに収まるほど小さい場合は、幸運にもそのデータを見つけることができます。同様に、運が良ければ、失敗したraid5セットの単一のディスクから何かを回復することができます(単一のデータブロックを保存できるほど小さい場合)。ファイルシステムの助けを借りずにいくつかのデータを回復したい場合。
独自のオフセットを知っているデータがある可能性があります。たとえば、出力をhexdump -C
ブロックデバイスに書き込んでからスナップショットを撮るとします。 hexdump は、各行のオフセットを印刷して、データからオフセットを派生できるようにします。 hexdumpが行をスキップしていないと仮定すると...
フルディスク暗号化(LUKS)を使用し、LUKSデバイス全体のスナップショットを撮る場合。スナップショットには、完全にランダムな(暗号化された)データブロックが含まれています。 LUKSはそのデータのオフセットもわかりませんが、LUKSヘッダーがあり、キーがわかっている限り、ランダムではないデータで解読されるオフセットを見つけると、すべてのオフセットですべてのブロックを復号化しようとすることができます。数量なら、これが正しいでしょう。ただし、これは暗号化されたすべてのデータがプレーンテキストであると仮定します。任意のデータを暗号化すると、どちらにもわからない。
書き込みがランダムではなく完全に決定的なユースケースである場合は、新しいスナップショットで同じ操作を繰り返してメタデータを再現できます。 ddを使用して、ナビゲーションと計算によってデータをどの順序で記録するかを知っている場合は、そうすることが可能かもしれません。
しかし、これは通常実際には起こらない状況です。それはうまくいきません。これを行うのに役立つツールはありません。