私のパーティション/dev/sdb1
のファイルシステムがext3
マウントされました /mnt/folder
。
ファイルをタッチして/mnt/folder
削除します。次にdebugfs /dev/sdb1
Enterを使用しますlsdel
が、次のように表示されます。「0つの削除されたinodeが見つかりました。」
問題は何ですか?私のファイルをどのように回復しますか?デバッグファイル?
答え1
ext3/ext4には適していません。
~から男性:
list_deleted_inodes [制限事項] 削除されたinodeを一覧表示します。オプションで、次の範囲内の削除された inode に制限されます。限界 数秒前。次に利用可能イスデル。 このコマンドは、誤ってファイルを削除した場合を回復するのに役立ちます。 ext2ファイルシステムの場合。残念ながら、この目的には役に立ちません。 inodeのためにext3またはext4を使用してファイルを削除する場合 inodeが解放された後、データブロックは使用できなくなります。
例:
$ echo Hello > foo.txt
$ ls -ial
35692596 .
35692545 ..
35692597 foo.txt
$ sudo debugfs -R 'inode_dump <35692597>' /dev/sdc5
0000 b481 e803 0600 0000 82d0 d056 82d0 d056 ...........V...V
0020 82d0 d056 0000 0000 e803 0100 0800 0000 ...V............
0040 0000 0000 0100 0000 d36c 2f0b 0000 0000 .........l/.....
0060 0000 0000 0000 0000 0000 0000 0000 0000 ................
*
...
これは小さなファイルなので、1つのブロックしかありません。i_block(オフセット0x28)。
上記の式は次のように構成できます。
b481 | 81b4 = i_mode : 0100664 (octal)
e803 | 03e8 = i_uid : 1000
0600 0000 | 0000 0006 = i_size_lo : 6
dbd7 d056 | 56d0 d7db = i_atime : Fri Feb 26 23:55:23 CET 2016
dbd7 d056 | 56d0 d7db = i_ctime : Fri Feb 26 23:55:23 CET 2016
dbd7 d056 | 56d0 d7db = i_mtime : Fri Feb 26 23:55:23 CET 2016
0000 0000 | 0000 0000 = i_dtime : 0
e803 | 03e8 = i_gid : 1000
0100 | 0001 = i_links_count : 1
0800 0000 | 0000 0008 = i_blocks_lo : 8, 8 * 512 = 4096 b
0000 0000 | 0000 0000 = i_flags : 0
0100 0000 | 0000 0001 = i_osd1 : 1
Direct Block Address:
d36c 2f0b | 0b2f 6cd3 = i_block[0] : 187657427
0000 0000 | 0000 0000 = ... no more
ブロックサイズ(ここでは4096)に基づいて、パーティション内のデータのオフセットを計算できます。
0x0b2f6cd3 * 4096 = 768644820992
その後、ダンプを直接読んでください。
$ sudo dd if=/dev/sdc5 bs=1 skip=768644820992 count=6 | hd
00000000 48 65 6c 6c 6f 0a |Hello.|
今、私たちrm foo.txt
ができるdd
上記と同じコマンドでデータを取得します。しかし、いつでも上書きできます。
しかし、このオフセットを知らないと不足します。
$ ls -ai1
35692596 .
35692545 ..
$ sudo debugfs -R 'ls -d <35692596>' /dev/sdc5
35692596 (12) . 35692545 (4084) .. <35692597> (4072) foo.txt
$ sudo debugfs -R 'inode_dump <35692597>' /dev/sdc5
現在のインデックスノードデータは次のとおりです。
b481 |
e803 |
0000 0000 | 0000 0000 = i_size_o : 0 *changed
dbd7 d056 | 56d0 d7db = i_atime : Fri Feb 26 23:55:23 CET 2016
e5d7 d056 | 56d0 d7e5 = i_ctime : Fri Feb 26 23:55:33 CET 2016 *changed
e5d7 d056 | 56d0 d7e5 = i_mtime : Fri Feb 26 23:55:33 CET 2016 *changed
e5d7 d056 | 56d0 d7e5 = i_dtime : Fri Feb 26 23:55:33 CET 2016 *changed
e803 |
0000 | 0000 = i_links_count : 0 *changed
0000 0000 | 0000 0000 = i_blocks_lo : 0 *changed
0000 0000 |
0100 0000 |
0000 0000 | 0000 0000 = i_block[0] : Zeroed out. *changed
0000 0000 |
0000 0000 |
ご覧のとおり、ブロックデータが消去されました。
答え2
デバッグはいいえファイル回復プログラム。運が良ければ、誤って削除されたファイルを回復することもあります。
実際のオペレーティングシステム(MS-DOSとは対照的に)からのファイルの回復は「バックアップ」と表記されます。