vendredi 23 septembre 2011

Fsdb et récuperation de fichier sous AIX 6.1

Fsdb et récuperation de fichier…

Dans le cas d’un malheureux rm sur un fichier :

darkstar:root:/darkstar/produits/aaaa# ll
/darkstar/produits/aaaa
total 26840
drwxr-xr-x    2 root     system          256 Sep 23 10:28 ./
drwxrwxrwx  105 root     system         4096 Sep 23 10:27 ../
-rw-r--r--    1 root     system     13731840 Sep 23 10:28 mutt-1.5.20.tar
darkstar:root:/darkstar/produits/aaaa# cp mutt-1.5.20.tar iii
/darkstar/produits/aaaa
total 53664
drwxr-xr-x    2 root     system          256 Sep 23 10:28 ./
drwxrwxrwx  105 root     system         4096 Sep 23 10:27 ../
-rw-r--r--    1 root     system     13731840 Sep 23 10:28 iii
-rw-r--r--    1 root     system     13731840 Sep 23 10:28 mutt-1.5.20.tar
darkstar:root:/darkstar/produits/aaaa#
darkstar:root:/darkstar/produits/aaaa# rm iii

Dans le cas d’un malheureux rm sur un fichier :

Il faut d’abord démonter le fs, et lancer la commande fsdb sur le lv :

darkstar:root:/# fsdb /darkstar/produits

File System:                    /darkstar/produits

File System Size:               359650184       (512 byte blocks)
Aggregate Block Size:           4096
Allocation Group Size:          524288  (aggregate blocks)
> i 2
Inode 2 at block 505, offset 0x400:

[1] di_fileset:         16              [18] di_inostamp:       0x400e998b
[2] di_number:          2               [19] di_gen:            1
[3] di_size:    0x0000000000001000      [20] di_ixpxd.len:      4
[4] di_nblocks: 0x0000000000000001      [21] di_ixpxd.addr1:    0x00
[5] di_nlink:           105             [22] di_ixpxd.addr2:    0x000001f9
[6] di_mode:            0x000341ff           di_ixpxd.address:  505
                0040777 drwxrwxrwx      [24] di_uid:            0
                                        [25] di_gid:            0
[9] di_atime.tj_nsec:   0x07ca2476      [26] di_atime.tj_sec:0x000000004e7c4969
[10] di_ctime.tj_nsec:  0x1bf8fd1a      [27] di_ctime.tj_sec:0x000000004e7c4304
[11] di_mtime.tj_nsec:  0x1bf8fd1a      [28] di_mtime.tj_sec:0x000000004e7c4304
[12] di_otime.tj_nsec:  0x00000000      [29] di_otime.tj_sec:0x00000000400e998b
[13] di_ea.flag:        0x00            [30] di_ea.len:         0
     EAv1                               [31] di_ea.addr1:       0x00
[15] di_ea.nEntry:      0x00            [32] di_ea.addr2:       0x00000000
[16] di_ea.type:        0x0000               di_ea.address:     0
                                        [34] di_ea.nblocks:     0
change_inode: [m]odify, [e]a, [t]ree, or e[x]it >
> dir 2
 idotdot = 2


 922688 ACSLS_v73
 124    AIX-install_sysscan.sh
 36896  AIXlinkX25
 864736 AXWAY_Synchrony_4.0.2
 901120 CA
 45056  CFT
 914580 VIO
 188799 WLM
 983072 aaaa
 922418 antivirus
  …

On récupere l’inode du repertoire (ici 983072)
Et on se « branche » sur l’inode :

> i 983072
Inode 983072 at block 44572648, offset 0x0:

[1] di_fileset:         16              [18] di_inostamp:       0x400e998b
[2] di_number:          983072          [19] di_gen:            1123189562
[3] di_size:    0x0000000000000100      [20] di_ixpxd.len:      4
[4] di_nblocks: 0x0000000000000000      [21] di_ixpxd.addr1:    0x00
[5] di_nlink:           2               [22] di_ixpxd.addr2:    0x02a81fe8
[6] di_mode:            0x000141ed           di_ixpxd.address:  44572648
                0040755 drwxr-xr-x      [24] di_uid:            0
                                        [25] di_gid:            0
[9] di_atime.tj_nsec:   0x0718962a      [26] di_atime.tj_sec:0x000000004e7c4334
[10] di_ctime.tj_nsec:  0x25966256      [27] di_ctime.tj_sec:0x000000004e7c4338
[11] di_mtime.tj_nsec:  0x25966256      [28] di_mtime.tj_sec:0x000000004e7c4338
[12] di_otime.tj_nsec:  0x1bf8fd1a      [29] di_otime.tj_sec:0x000000004e7c4304
[13] di_ea.flag:        0x00            [30] di_ea.len:         0
     EAv1                               [31] di_ea.addr1:       0x00
[15] di_ea.nEntry:      0x00            [32] di_ea.addr2:       0x00000000
[16] di_ea.type:        0x0000               di_ea.address:     0
                                        [34] di_ea.nblocks:     0
change_inode: [m]odify, [e]a, [t]ree, or e[x]it >


(x pour sortir) On récupere l’adresse de la table d’inode, (ici 44572648), que l’on liste :

> display 44572648 a
Block: 44572648     Real Address 0x2a81fe8000
0000000a:  833A0000 0010400E 998B0000 00000000   |.:....@.........|
0000001a:  040002A8 1FE80000 00000000 01000000   |................|
0000002a:  00000000 00000000 00000000 00000000   |................|
0000003a:  00020001 41ED0000 00004E7C 47F1348A   |....A.....N|G.4.|
0000004a:  57240000 00000000 00004E7C 43382596   |W$........N|C8%.|
0000005a:  62560000 00000000 00004E7C 43382596   |bV........N|C8%.|
0000006a:  62560000 00000000 00004E7C 43041BF8   |bV........N|C...|
0000007a:  FD1A0000 00000000 00000000 00000000   |................|
0000008a:  00000000 00007300 00000000 00000000   |......s.........|
0000009a:  00000000 00004301 00000001 7074FF0A   |......C.....pt..|
000000aa:  544D505F 50757A42 69680000 00000000   |TMP_PuzBih......|
000000ba:  00000000 00002D01 00000001 8695FF07   |......-.........|
000000ca:  64736469 616C7300 00000000 00000000   |dsdials.........|
000000da:  00000000 00000000 00000000 00020000   |................|
000000ea:  00000000 00008301 07020000 00000101   |................|
000000fa:  00000000 00000000 0000000F 0021FF0F   |.............!..|
-hit enter for more-
0000010a:  6D757474 2D312E35 2E32302E 74617200   |mutt-1.5.20.tar.|
0000011a:  00000000 00000301 0000000F 0022FF03   |............."..|
0000012a:  69696900 00000000 00000000 00000000   |iii.............|
0000013a:  00000000 00000400 00000000 00000000   |................|
0000014a:  00000000 00000000 00000000 00000000   |................|
0000015a:  00000000 00000500 00000000 00000000   |................|
0000016a:  00000000 00000000 00000000 00000000   |................|
0000017a:  00000000 00000600 00000000 00000000   |................|
0000018a:  00000000 00000000 00000000 00000000   |................|
0000019a:  00000000 00000700 00000000 00000000   |................|
000001aa:  00000000 00000000 00000000 00000000   |................|
000001ba:  00000000 00000800 00000000 00000000   |................|
000001ca:  00000000 00000000 00000000 00000000   |................|
000001da:  00000000 0000FF00 00000000 00000000   |................|
000001ea:  00000000 00000000 00000000 00000000   |................|
000001fa:  00000000 00000000 0000000F 002142F2   |.............!B.|

On voit le nom du fichier toujours présent dans le répertoire, et aussi le nom du fichier détruit.
Le numéro d’inode est présent juste avant le nom du fichier détruit, soit (en vert, ci-dessus) : 000F 0022
Il faut le convertir en décimal (c’est de l’hexa) soit 983074.
Et se « brancher » sur l’inode correspondant :

> i 983074
Inode 983074 at block 44572648, offset 0x400:

> i 983074
Inode 983074 at block 44572648, offset 0x400:

[1] di_fileset:         16              [18] di_inostamp:       0x400e998b
[2] di_number:          983074          [19] di_gen:            1228756523
[3] di_size:    0x0000000000d18800      [20] di_ixpxd.len:      4
[4] di_nblocks: 0x0000000000000d19      [21] di_ixpxd.addr1:    0x00
[5] di_nlink:           0               [22] di_ixpxd.addr2:    0x02a81fe8
[6] di_mode:            0x000081a4           di_ixpxd.address:  44572648
                0100644 -rw-r--r--      [24] di_uid:            0
                                        [25] di_gid:            0
[9] di_atime.tj_nsec:   0x3802b05a      [26] di_atime.tj_sec:0x000000004e7c4967
[10] di_ctime.tj_nsec:  0x322a2bd1      [27] di_ctime.tj_sec:0x000000004e7c4981
[11] di_mtime.tj_nsec:  0x0b518373      [28] di_mtime.tj_sec:0x000000004e7c4968
[12] di_otime.tj_nsec:  0x3802b05a      [29] di_otime.tj_sec:0x000000004e7c4967
[13] di_ea.flag:        0x00            [30] di_ea.len:         0
     EAv1                               [31] di_ea.addr1:       0x00
[15] di_ea.nEntry:      0x00            [32] di_ea.addr2:       0x00000000
[16] di_ea.type:        0x0000               di_ea.address:     0
                                        [34] di_ea.nblocks:     0
change_inode: [m]odify, [e]a, [t]ree, or e[x]it >

On voit d’ailleur que le nombre de link est à zero (champs [5] di_nlink: 0).
C’est ce champ qu’il faut remettre à 1 (dans le meilleur des cas…), par la commande « m 5 1 »

change_inode: [m]odify, [e]a, [t]ree, or e[x]it > m 5 1
Inode 983074 at block 44572648, offset 0x400:

[1] di_fileset:         16              [18] di_inostamp:       0x400e998b
[2] di_number:          983074          [19] di_gen:            1228756523
[3] di_size:    0x0000000000d18800      [20] di_ixpxd.len:      4
[4] di_nblocks: 0x0000000000000d19      [21] di_ixpxd.addr1:    0x00
[5] di_nlink:           1               [22] di_ixpxd.addr2:    0x02a81fe8
[6] di_mode:            0x000081a4           di_ixpxd.address:  44572648
                0100644 -rw-r--r--      [24] di_uid:            0
                                        [25] di_gid:            0
[9] di_atime.tj_nsec:   0x3802b05a      [26] di_atime.tj_sec:0x000000004e7c4967
[10] di_ctime.tj_nsec:  0x322a2bd1      [27] di_ctime.tj_sec:0x000000004e7c4981
[11] di_mtime.tj_nsec:  0x0b518373      [28] di_mtime.tj_sec:0x000000004e7c4968
[12] di_otime.tj_nsec:  0x3802b05a      [29] di_otime.tj_sec:0x000000004e7c4967
[13] di_ea.flag:        0x00            [30] di_ea.len:         0
     EAv1                               [31] di_ea.addr1:       0x00
[15] di_ea.nEntry:      0x00            [32] di_ea.addr2:       0x00000000
[16] di_ea.type:        0x0000               di_ea.address:     0
                                        [34] di_ea.nblocks:     0
change_inode: [m]odify, [e]a, [t]ree, or e[x]it > x
> q

Ensuite, il suffit de faire un fsck sur le file system et  de le remonter.
Le fichier se retrouvera sous lost+found, avec comme nom, le numéro d’inode.

darkstar:root:/# fsck /darkstar/produits



The current volume is: /dev/lvvg1produ
Primary superblock is valid.
J2_LOGREDO:log redo processing for /dev/lvvg1produ
Primary superblock is valid.
*** Phase 1 - Initial inode scan
*** Phase 2 - Process remaining directories
*** Phase 3 - Process remaining files
*** Phase 4 - Check and repair inode allocation map
File system inode map is corrupt; FIX? y
Superblock marked dirty because repairs are about to be written.
*** Phase 5 - Check and repair block allocation map
Block allocation map is corrupt; FIX? y
Inodes not connected to the root directory
         tree have been detected.  Will reconnect.
File system is clean.
Superblock is marked dirty; FIX? y
All observed inconsistencies have been repaired.
darkstar:root:/#
darkstar:root:/#
darkstar:root:/# mount /darkstar/produits
darkstar:root:/# cd /darkstar/produits/lost+found/
darkstar:root:/darkstar/produits/lost+found# ls
983074
darkstar:root:/darkstar/produits/lost+found#


Pour valider que le fichier est valide, (c”était la copie d’un tar ..)

darkstar:root:/darkstar/produits/lost+found# tar -tvf 983074
drwxrwxrwx 501 20       0 Jun 14 20:54:29 2009 mutt-1.5.20/
-rw-r--r-- 501 20   20557 Nov 11 20:55:46 2008 mutt-1.5.20/_regex.h
-rw-r--r-- 501 20   18852 Jun 10 09:14:10 2007 mutt-1.5.20/ABOUT-NLS
-rw-r--r-- 501 20    6012 Nov 11 20:55:46 2008 mutt-1.5.20/account.c
-rw-r--r-- 501 20    1801 Nov 11 20:55:46 2008 mutt-1.5.20/account.h
-rw-r--r-- 501 20   37008 Jun 09 08:50:40 2009 mutt-1.5.20/aclocal.m4
-rw-r--r-- 501 20    5952 Mar 31 08:52:42 2009 mutt-1.5.20/addrbook.c
-rw-r--r-- 501 20   15066 May 19 02:11:35 2009 mutt-1.5.20/alias.c
-rw-r--r-- 501 20    2002 Jan 04 23:31:09 2009 mutt-1.5.20/ascii.c
-rw-r--r-- 501 20    1474 Jan 04 23:30:43 2009 mutt-1.5.20/ascii.h

1 commentaire:

  1. Wow ça claque comme tips ça ... c'est pas d'origine dans AIX fsdb? ça ne me dit rien...

    RépondreSupprimer