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
Wow ça claque comme tips ça ... c'est pas d'origine dans AIX fsdb? ça ne me dit rien...
RépondreSupprimer