誤ってこのcp
コマンドを誤って使用して、ext4ファイルシステムのファイル内容を上書きしました。とにかく、この古いファイルの内容とメタデータ(最後の書き込み時間など)を復元できますか?
これは移動ブロックを解放することを知っていますが、mv
一括コピー操作にも適用されますか?
ベストアンサー1
ext4ファイルシステムのセッション例:
指定されたサイズで2つのファイルa、bを作成します。
# dd if=/dev/urandom of=a bs=1282 count=1
1+0 records in
1+0 records out
1282 bytes (1.3 kB) copied, 0.000647314 s, 2.0 MB/s
# dd if=/dev/urandom of=b bs=3247 count=1
1+0 records in
1+0 records out
3247 bytes (3.2 kB) copied, 0.00106112 s, 3.1 MB/s
aが物理的に割り当てられている場所を確認してください。
# filefrag -sve a
Filesystem type is: ef53
File size of a is 1282 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 32833.. 32833: 1: last,eof
a: 1 extent found
bをaにコピーしてaを「上書きします」。 (出力が短縮されました。)
# strace cp b a
open("a", O_WRONLY|O_TRUNC) = 4
write(4, "CX\256\330x01pP\326\0101~,\252\"\311\202\21\260\21y\377_S\254\2\352\262\v\3\t"..., 3247) = 3247
cp以降の物理的な場所を確認してください。
# filefrag -sve a
Filesystem type is: ef53
File size of a is 3247 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 33280.. 33280: 1: last,eof
a: 1 extent found
位置がからに変わり32833
ます33280
。これは32833
、この場合、元のデータがまだ-で見つかることができることを意味します。
何が起こっているのかcp
出力ファイルが切り捨てられ、一時的に0バイトファイルになります。これは、inodeを再利用する点を除いて、削除とほぼ同じです。ファイルへの書き込みは、使用可能なスペースのどこにでも割り当てられます。これは、古いファイルがあった他の場所である可能性があります。
そのため、元のデータに見つかるほどファイルの内容の一部を知っている場合は、回復可能性がある可能性があります。これはphotorec
実行されますが、ヘッダーが異なる既知のファイル形式に対してのみ実行されます。extundelete
ファイルのinodeは実際には削除されず、新しいファイルに再利用されるため、おそらく役に立ちません。