GNU/Linux >> Linux の 問題 >  >> Linux

DebugfsのLsdelが機能しないのはなぜですか?

パーティション/dev/sdb1があります ファイルシステムext3を使用 /mnt/folderにマウントされています 。

/mnt/folder内のファイルにタッチします そのファイルを削除します。
次に、debugfs /dev/sdb1を使用します。 次に、lsdelと入力します 、
ただし、「削除されたiノードが0個見つかりました。」と表示されます。

問題は何ですか? debugfsを使用してファイルを復元する方法 ?

承認された回答:

ext3/ext4には適していません。

から :

list_deleted_inodes [limit]
    List  deleted inodes, optionally limited to those deleted within limit
    seconds ago.  Also available as lsdel.

    This command was useful for recovering from accidental file  deletions
    for  ext2 file systems.  Unfortunately, it is not useful for this pur‐
    pose if the files were deleted using ext3 or ext4, since  the  inode's
    data blocks are no longer available after the inode is released.

例:

$ 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  ................
*
...

これは小さなファイルであるため、ブロックi_block(オフセット0x28)は1つだけです。

上記は次のようにレイアウトできます:

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 、1つできます 同じ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

iノードデータは次のようになります:

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 |

ご覧のとおり、ブロックデータはゼロになっています。

関連:SSH –セッション終了後にSSHセッションの実行中に開始するプロセスを作成するにはどうすればよいですか?
Linux
  1. Bash `(())` が `[[]]` 内で動作しないのはなぜですか?

  2. シンボリック リンクが機能しないのはなぜですか?

  3. Linux ブリッジが機能しない理由

  1. Bashスクリプトがエイリアスを認識しないのはなぜですか?

  2. 〜/ .bash_profileが機能しないのはなぜですか?

  3. Pam_unix2 /一部のディストリビューションに存在しないのはなぜですか?

  1. Debian –BluetoothはDebian10では機能しませんか?

  2. なぜ`exit&`が機能しないのですか?

  3. 有線インターネットはUbuntu12.04では機能しませんか?