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

mardi 20 septembre 2011

0516-1155 lors d'un rmlvcopy

Si on a perdu des disques dans un vg mirroré, et que ceux-ci ne sont pas récupérables, on doit retirer les copies sur les disques inexistants.
Si, pendant ces manipulations, on a le message

dasgbdprodb1_PSI:root / # lslv -l lvbdb1vg10058
0516-304 : Unable to find device id 00c5b0f4a07fcac0 in the Device
Configuration Database.
lvbdb1vg10058:/db-rman/dump
PVID COPIES IN BAND DISTRIBUTION
00c5b0f4a07fcac0 016:000:000 0% 000:000:000:008:008
hdisk3 016:000:000 0% 000:000:000:008:008

serveur:root / # rmlvcopy lvbdb1vg10058 1
0516-1155 lreducelv: Last good copy of a partition cannot reside on a missing disk.
Try again after reactivating the disk using chpv and varyonvg.
0516-922 rmlvcopy: Unable to remove logical partition copies from
logical volume lvbdb1vg10058.
Il faut préciser l’id du disque à enlever dans le rmdev (et s'il y a plusieurs disques perdus, il faut tous les préciser dans la même commande):
serveur:root / # rmlvcopy lvbdb1vg10058 1 00c5b0f4a07fcac0 00c28f5506f21797
0516-622 rmlvcopy: Warning, cannot write lv control block data.
serveur:root / # lslv -l lvbdb1vg10058
lvbdb1vg10058:/db-rman/dump
PV COPIES IN BAND DISTRIBUTION
hdisk3 016:000:000 0% 000:000:000:008:008

rendev : renommer un device

Il faut que le device soit non utilisé : 
hdisk22         00c28f552e09d55e                    None
danimproda1:root:/mksysb# rendev -l hdisk22 -n hdisk77
hdisk77
danimproda1:root:/mksysb# lspv
hdisk77         00c28f552e09d55e                    None

infos mksysb : lsmksysb

Pour récupérer des infos sur le contenu d’un mksysb :

danimproda1:root:/mksysb# lsmksysb -lf mksysb
VOLUME GROUP:           rootvg
BACKUP DATE/TIME:       Sun Sep 18 00:36:32 DFT 2011
UNAME INFO:             AIX serveurname 3 5 00035B08D700
BACKUP OSLEVEL:         5.3.9.0
MAINTENANCE LEVEL:      5300-09
BACKUP SIZE (MB):       58624
SHRINK SIZE (MB):       34746
VG DATA ONLY:           no

rootvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
hd5                 boot       1       2       2    closed/syncd  N/A
hd6                 paging     48      96      2    open/syncd    N/A
paging00            paging     48      96      2    open/syncd    N/A
hd8                 jfslog     1       2       2    open/syncd    N/A
hd4                 jfs        2       4       2    open/syncd    /
hd2                 jfs        20      40      2    open/syncd    /usr
hd9var              jfs        13      26      2    open/syncd    /var
hd3                 jfs        32      64      2    open/syncd    /tmp
hd1                 jfs        1       2       2    open/syncd    /syshome
hd10opt             jfs        5       10      2    open/syncd    /opt
lvtrace             jfs        24      48      2    open/syncd    /tmp/trace
lvlocal             jfs        2       4       2    open/syncd    /usr/local
lg_dumplv           sysdump    10      10      1    open/syncd    N/A
lvsysload           jfs        8       16      2    open/syncd    /usr/local/sysload
lvpatrol            jfs        8       16      2    open/syncd    /usr/local/Patrol
lvecslocal          jfs        11      22      2    open/syncd    /usr/local/binairesECS
lppsource53         jfs        32      64      2    closed/syncd  /lppsource53/TL9_SP2
lv01                jfs        240     240     1    closed/syncd  /mksysb_dmz