GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Lsdel in Debugfs non funziona?

Ho la partizione /dev/sdb1 con il file system ext3 montato in /mnt/folder .

Tocco un file in /mnt/folder e rimuovi quel file.
Quindi uso debugfs /dev/sdb1 e quindi inserisci lsdel ,
ma dice "0 inode eliminati trovati."

Qual è il problema? Come recuperare il mio file con debugfs ?

Risposta accettata:

Non adatto per ext3/ext4.

Da uomo :

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.

Esempio:

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

Poiché si tratta di un file di piccole dimensioni, abbiamo solo un blocco i_block (offset 0x28).

Quanto sopra può essere strutturato come:

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

Possiamo calcolare l'offset rispetto ai dati nella partizione in base alla dimensione del blocco (qui 4096):

0x0b2f6cd3 * 4096 = 768644820992

Quindi scarica per lettura diretta:

$ sudo dd if=/dev/sdc5 bs=1 skip=768644820992 count=6 | hd
00000000  48 65 6c 6c 6f 0a                                 |Hello.|

Ora, se rm foo.txt , uno può recupera i dati con lo stesso dd comando come sopra. Ma può essere sovrascritto in qualsiasi momento.

Ma se non conosciamo questo offset andiamo a corto.

$ 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 dati dell'inode ora sono:

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 |

Come puoi vedere i dati del blocco sono azzerati.

Correlati:SSH:come avviare un processo durante una sessione SSH dopo che la sessione è terminata??
Linux
  1. Linux – Perché Setuid non funziona??

  2. Debian – Il Bluetooth non funziona in Debian 10?

  3. Perché Xargs non può funzionare con Tail -f?

  4. Perché Bash `(())` non funziona all'interno di `[[]]`?

  5. Perché il mio collegamento simbolico non funziona?

Perché "meno" non mostra output in grassetto??

Internet via cavo non funziona su Ubuntu 12.04?

Perché Cryptkeeper non funziona in 12.04?

6 motivi per cui Linux non ha più app

Perché "\d" non funziona nelle espressioni regolari in sed?

Perché i file EXE di Windows non funzionano su Linux?