JFS2 file Recover with simple commands line under AIX

Récupération d'un fichier effacé avec manipulation de la table des inodes pour AIX en JFS2


Sommaire :

  • 1 Récupération d'un fichier effacé avec manipulation de la table des inodes pour AIX en JFS2

  • 1.1 Création d'un LV de test

  • 1.2 Création filesystem /test

  • 1.3 Montage du filesystem et création d'un fichier test

  • 1.4 Suppression du fichier de test

  • 1.5 Démontage du filesystem

  • 1.6 Début du fs-d bug sur le filesystem concerné

  • 1.7 Réactivation de l'inode concernée



  • Préambule :

    On trouve les filesystem(s) JFS et JFS2 sur des Systemes Unix propriétaire comme AIX (UNIX IBM).
    Si il est assez simple de récupérer des fichiers effacés sur LINUX grâce à divers logiciels gratuit.
    Ceci devient plus compliqué sur AIX de part son coté professionnel.

    Il existe bien sur des solutions payante mais hors de prix pour un particulier.
    Hors, avec des manipulations simple et avec des outils systèmes intégrés à AIX il est tout à fait possible de récupérer des fichiers.
    A noter que si votre FS est sauvegardé par une solution professionnel (exemple TSM), il sera plus facile de passer par celui-ci.

    TOUTES les commandes dans ce tuto s'effectuent en tant que root.



    1.1 Création d'un LV de test :


    mklv -t jfs2 -y test rootvg 1
    test


    1.2 Création filesystem /test :


    crfs -v jfs2 -m /test -d test Based on the parameters chosen, the new /test JFS2 file system is limited to a maximum size of 134217728 (512 byte blocks) New File System size is 262144



    1.3 Montage du filesystem et création d'un fichier test :


    mount /test mkdir -p /test/mydir touch /test/mydir/myfile echo "Test de fichier" > /test/mydir/myfile


    1.4 Suppression du fichier de test :


    rm -rf /tmp/mydir/myfile


    1.5 Démontage du filesystem :


    umount /test



    1.6 Début du fs-d bug sur le filesystem concerné :


    fsdb /dev/lv08 File System: /dev/lv8 File System Size: 6512 (512 byte blocks) Aggregate Block Size: 4 96 Allocation Group Size: 8192 (aggregate blocks)



    L'inode root pour n'importe quel filesystem est toujours le 2

    i 2


    Nous sommes dans les sous commandes, on peu sortir en tapant x
    On affiche le contenue de notre filesystem.


    dir 2 idotdot = 2 3 lost+found 32 mydir



    On aperçoit l'inode de notre répertoire mydir, 32 en l'occurrence.
    On la sélectionne.

    i 32


    On sort maintenant du menu de sous commande, taper X
    Nous avons besoin maintenant de trouver l'offset ou se trouve notre fichier effacé.

    On positionne le curseur/ et on cherche notre fichier myfile

    display 32 a
    ØØØØØØca: ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØØda: ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ ØØØ2ØØØØ |................| ØØØØØØea: ØØØØØØØØ ØØØØ83ØØ Ø8Ø1ØØØØ ØØØØØ1ØØ |................| ØØØØØØfa: ØØØØØØØØ ØØØØØ2ØØ ØØØØØØØØ ØØ21FFØ6 |.............!..| -hit enter for more


    Il est nécessaire d'appuyer plusieurs fois sur la touche RETURN pour faire défiler les pages.
    Si on ne trouve pas, on passe à l'inode suivante.


    display 33 a



    Une fois trouvé, on note l'offset, en l'occurrence : 0000010a

    ØØØØØ1Øa: 6D796669 6C65ØØØØ ØØØØØØØØ ØØØØØØØØ |myfile..........| ØØØØØ11a: ØØØØØØØØ ØØØØØ3ØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ12a: ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ13a: ØØØØØØØØ ØØØØØ4ØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ14a: ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ15a: ØØØØØØØØ ØØØØØ5ØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ16a: ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ17a: ØØØØØØØØ ØØØØØ6ØØ ØØØØØØØØ ØØØØØØØØ |................| ØØØØØ18a: ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ ØØØØØØØØ |................|


    Les bytes précédents contiennent les informations vitales, y compris l'inode de notre fichier.
    Regardons les deux premiers bytes précédents, 00 21
    Ils représentent (/!\ en hexa) l'inode de notre fichier.

    Une petite conversion s'impose.
    Hexa <=> Decimal
     00  <=>   00
     21  <=>   33

    Donc pour notre cas, on se déplace donc à l'inode préalablement noté, 33

    Inode 33 at block 32, offset Øx2ØØ: [1] di_fileset: 16 [14] di_inostamp: Øx4192531f [2] di_number: 33 [15] di_gen: 1395618868 [3] di_size: ØxØØØØØØØØØØØØ5e69 [16] di_ixpxd.len: 4 [4] di_nblocks: ØxØØØØØØØØØØØØØØØ6 [17] di_ixpxd.addr1: ØxØØ [5] di_nlink: Ø [18] di_ixpxd.addr2: ØxØØØØØØ2Ø [6] di_mode: ØxØØØ281a4 di_ixpxd.address: 32 Ø1ØØ644 -rw-r—r— [19] di_uid: Ø [7] di_ea.flag: ØxØØ [2Ø] di_gid: Ø [8] di_ea.nEntry: ØxØØ [21] di_atime.tj_sec: ØxØØØØØØØØ41925347 [9] di_ea.len: Ø [22] di_atime.tj_nsec: Øx12ca843d [1Ø] di_ea.addr1: ØxØØ [23] di_ctime.tj_sec: ØxØØØØØØØØ4192535d [24] di_ctime.tj_nsec: Øx1e6Øad2c [11] di_ea.addr2: ØxØØØØØØØØ [25] di_mtime.tj_sec: ØxØØØØØØØØ41925347 di_ea.address: Ø [26] di_mtime.tj_nsec: Øx1493fbd5 [12] di_ea.type: ØxØØØØ [27] di_otime.tj_sec: ØxØØØØØØØØ41925347 [13] di_ea.nblocks: Ø [28] di_otime.tj_nsec: Øx12ca843d change_inode: [m]odify, [e]a, [t]ree, or e[x]it >

    Noté que le champ di_nlink (qui correspond au link sur cet inode) est à ZERO.
    Il faut donc la modifier, la réactiver.

    1.7 Réactivation de l'inode concernée.

    Toujours dans le sous-menu de la dernière commande, on choisie l'option M (comme modify)
    on choisie la ligne à modifier, 5 dans notre cas
    et la valeur à changer, 1 dans notre cas
    ensuite on sort avec en tapant x


    change_inode: [m]odify, [e]a, [t]ree, or e[x]it > m
    Please enter: field-number value > 5 1
    Inode 33 at block 32, offset Øx2ØØ: [1] di_fileset: 16 [14] di_inostamp: Øx4192531f [2] di_number: 33 [15] di_gen: 16448ØØØ58 [3] di_size: ØxØØØØØØØØØØØØ5e69 [16] di_ixpxd.len: 4 [4] di_nblocks: ØxØØØØØØØØØØØØØØØ6 [17] di_ixpxd.addr1: ØxØØ [5] di_nlink: 1 [18] di_ixpxd.addr2: ØxØØØØØØ2Ø [6] di_mode: ØxØØØ281a4 di_ixpxd.address: 32 Ø1ØØ644 -rw-r—r— [7] di_ea.flag: ØxØØ [19] di_uid: Ø [8] di_ea.nEntry: 0xØØ [2Ø] di_gid: Ø [9] di_ea.len: Ø [21] di_atime.tj_sec: ØxØØØØØØØØ41926227 [1Ø] di_ea.addr1: ØxØØ [22] di_atime.tj_nsec: Øx3Ø45d7a8 [11] di_ea.addr2: ØxØØØØØØØØ [23] di_ctime.tj_sec: ØxØØØØØØØØ4192627f [12] di_ea.type: ØxØØØØ [24] di_ctime.tj_nsec: Øx2Ø243Ød8 [13] di_ea.nblocks: Ø [25] di_mtime.tj_sec: ØxØØØØØØØØ41926227 di_ea.address: Ø [26] di_mtime.tj_nsec: Øx3Ød4b3bØ [27] di_otime.tj_sec: ØxØØØØØØØØ41926227 [28] di_otime.tj_nsec: Øx3Ø45d7a8

    change_inode: [m]odify, [e]a, [t]ree, or e[x]it > x

    On voie que di_nlink est maintenant à 1

    Une fois de retour au shell , on relance un check.

    fsck /dev/lv08
    ****************
    The current volume is: /dev/lv 8
    **Phase 1 – Check Blocks, Files/Directories, and Directory Entries
    **Phase 2 – Count links
    **Phase 3 – Duplicate Block Rescan and Directory Connectedness
    **Phase 4 – Report Problems
    **Phase 5 – Check Connectivity
    **Phase 6 – Perform Corrections 1 file reconnected to /lost+found/.
    **Phase 7 – Rebuild File/Directory Allocation Maps Errors detected in the file system inode allocation map control information.
    Errors detected in the file system inode allocation map.
    **Phase 8 – Rebuild Disk Allocation Maps 32768 kilobytes total disk space. 3 kilobytes in 6 directories. 25 kilobytes in 2 user files.
    32392 kilobytes are available for use. File system is clean. All observed inconsistencies have been repaired.



    Montage du FS :


    mount /dev/lv08 /test


    Il suffit d'aller dans répertoire lost+found du filesystem concerné pour voir notre fichier.

    ls -l /test/lost+found
    total 48 -rw-r r 1 root system 24169 Nov 1 13:47 33


    Il est bien sur possible de le renommer et le déplacer.

    mv /test/lost+found/33 /test/mydir/myfile


    NOTA : Il est tout à fait possible de procéder sans démonter le filesystem.
    Pour cela il est nécessaire de récupérer la taille du fichier ainsi que l'adresse du début de celui-ci sur le disk.
    Ensuite, une simple extraction des données ciblées sur le disque vers un fichier.


    (c) Gi@nts 2014