reparar / recuperar superblocos JFS (ou recuperar dados do sistema de arquivos danificado)

3

Prefácio:

Como esta é uma questão sobre recuperação de dados, eu espero muito "não-respostas" na linha de "onde está o seu backup?" ou "faça em cópias de imagem no nível de bloco". Obrigado, eu sei disso, você não precisa me dar uma palestra sobre isso. Veja as notas no final para o que e por quê. Obrigado.

Eu tenho uma imagem do sistema de arquivos JFS corrompida. jfs_fsck se recusa a trabalhar nele, saindo com a seguinte mensagem de erro:

~ % sudo jfs_fsck /dev/loop0
jfs_fsck version 1.1.15, 04-Mar-2011
processing started: 3/1/2017 13:08:53
Using default parameter: -p
The current device is:  /dev/loop0
Superblock is corrupt and cannot be repaired 
since both primary and secondary copies are corrupt.  

 CANNOT CONTINUE.

Usando os comandos jfs_debugfs su e s2p , as informações a seguir foram obtidas:

~ % sudo  jfs_debug /dev/loop0
jfs_debugfs version 1.1.15, 04-Mar-2011

Aggregate Block Size: 4096

Saída de su p :

[1] s_magic:            'JFS1'          [15] s_ait2.addr1:      0x00
[2] s_version:          1               [16] s_ait2.addr2:      0x0000e92f
[3] s_size:     0x000000015d4d4ec0           s_ait2.address:    59695
[4] s_bsize:            4096            [17] s_logdev:          0x00000900
[5] s_l2bsize:          12              [18] s_logserial:       0x0009afb1
[6] s_l2bfactor:        3               [19] s_logpxd.len:      8192
[7] s_pbsize:           512             [20] s_logpxd.addr1:    0x00
[8] s_l2pbsize:         9               [21] s_logpxd.addr2:    0x2baa0160
[9] pad:                Not Displayed        s_logpxd.address:  732561760
[10] s_agsize:          0x00800000      [22] s_fsckpxd.len:     22408
[11] s_flag:            0x10200900      [23] s_fsckpxd.addr1:   0x00
                        JFS_LINUX       [24] s_fsckpxd.addr2:   0x2ba9a9d8
        JFS_COMMIT      JFS_GROUPCOMMIT      s_fsckpxd.address: 732539352
                        JFS_INLINELOG   [25] s_time.tv_sec:     0x4902c28b
                                        [26] s_time.tv_nsec:    0x00000000
                                        [27] s_fpack:           'thor_storag'
[12] s_state:           0x00000001
             FM_MOUNT
[13] s_compress:        0
[14] s_ait2.len:        4

Saída de su s :

[1] s_magic:            '    '          [15] s_ait2.addr1:      0x00
[2] s_version:          0               [16] s_ait2.addr2:      0x00000000
[3] s_size:     0x0000000000000000           s_ait2.address:    0
[4] s_bsize:            0               [17] s_logdev:          0x00000000
[5] s_l2bsize:          0               [18] s_logserial:       0x00000000
[6] s_l2bfactor:        0               [19] s_logpxd.len:      0
[7] s_pbsize:           0               [20] s_logpxd.addr1:    0x00
[8] s_l2pbsize:         0               [21] s_logpxd.addr2:    0x00000000
[9] pad:                Not Displayed        s_logpxd.address:  0
[10] s_agsize:          0x00000000      [22] s_fsckpxd.len:     0
[11] s_flag:            0x00000000      [23] s_fsckpxd.addr1:   0x00
                                        [24] s_fsckpxd.addr2:   0x00000000
                                             s_fsckpxd.address: 0
                                        [25] s_time.tv_sec:     0x00000000
                                        [26] s_time.tv_nsec:    0x00000000
                                        [27] s_fpack:           ''
[12] s_state:           0x00000000
             FM_CLEAN
[13] s_compress:        0
[14] s_ait2.len:        0

Saída de s2p p :

[1] s_magic:            'JFS1'          [16] s_aim2.len:        2
[2] s_version:          1               [17] s_aim2.addr1:      0x00
[3] s_size:     0x000000015d4d4ec0      [18] s_aim2.addr2:      0x0000e92d
[4] s_bsize:            4096                 s_aim2.address:    59693
[5] s_l2bsize:          12              [19] s_logdev:          0x00000900
[6] s_l2bfactor:        3               [20] s_logserial:       0x0009afb1
[7] s_pbsize:           512             [21] s_logpxd.len:      8192
[8] s_l2pbsize:         9               [22] s_logpxd.addr1:    0x00
[9]  s_agsize:          0x00800000      [23] s_logpxd.addr2:    0x2baa0160
[10] s_flag:            0x10200900           s_logpxd.address:  732561760
             LINUX                      [24] s_fsckpxd.len:     22408
    GROUPCOMMIT                         [25] s_fsckpxd.addr1:   0x00
                INLINELOG               [26] s_fsckpxd.addr2:   0x2ba9a9d8
                                             s_fsckpxd.address: 732539352
[11] s_state:           0x00000001      [27] s_fsckloglen:      50
                MOUNT                   [28] s_fscklog:         2
[12] s_compress:        0               [29] s_fpack:           'thor_storagة�+'
[13] s_ait2.len:        4
[14] s_ait2.addr1:      0x00
[15] s_ait2.addr2:      0x0000e92f
     s_ait2.address:    59695

Saída de s2p s :

[1] s_magic:            '    '          [16] s_aim2.len:        0
[2] s_version:          0               [17] s_aim2.addr1:      0x00
[3] s_size:     0x0000000000000000      [18] s_aim2.addr2:      0x00000000
[4] s_bsize:            0                    s_aim2.address:    0
[5] s_l2bsize:          0               [19] s_logdev:          0x00000000
[6] s_l2bfactor:        0               [20] s_logserial:       0x00000000
[7] s_pbsize:           0               [21] s_logpxd.len:      0
[8] s_l2pbsize:         0               [22] s_logpxd.addr1:    0x00
[9]  s_agsize:          0x00000000      [23] s_logpxd.addr2:    0x00000000
[10] s_flag:            0x00000000           s_logpxd.address:  0
                                        [24] s_fsckpxd.len:     0
                                        [25] s_fsckpxd.addr1:   0x00
                                        [26] s_fsckpxd.addr2:   0x00000000
                                             s_fsckpxd.address: 0
[11] s_state:           0x00000000      [27] s_fsckloglen:      0
                CLEAN                   [28] s_fscklog:         0
[12] s_compress:        0               [29] s_fpack:           '        '
[13] s_ait2.len:        0
[14] s_ait2.addr1:      0x00
[15] s_ait2.addr2:      0x00000000
     s_ait2.address:    0

Agora a questão é, no que eu tenho que manipular no (s) superbloco (s) em que valores, para que o jfs_fsck possa ser convencido a ir trabalhar, ou que eu possa montá-lo (usando a implementação do sistema de arquivos kernel jfs do Linux)?

Também seria perfeitamente aceitável ter alguma ferramenta que mastigue a imagem do sistema de arquivos e salve tudo o que ela considera ser um arquivo.

Notas finais

Devido a eventos um pouco sob meu controle, um mdadm RAID-5 do Linux com um sistema de arquivos JFS foi corrompido de alguma forma, e esse modo de falha ainda não entendi até hoje. Este FS era parte de um NAS que eu compartilhei com outro cara e eu repetidamente o lembrei, que os RAIDs não substituem os backups, mas apesar desses avisos, outro cara tem alguns dados não salvos naquele RAID ( e agora está em um estágio de ser semi-zangado ... para mim eu tenho a impressão ). A ação imediata foi remover os discos do sistema e criar cópias em nível de bloco deles. E qualquer tipo de manipulação que eu vou fazer acontece em snapshots dessas cópias, então qualquer coisa que aconteça no processo de recuperação, eu posso reverter a qualquer momento.

Ontem, finalmente consegui recuperar o RAID mdadm em um estado (esperançosamente consistente).

Basicamente, quero recuperar o que está lá e encerrar o dia.

    
por datenwolf 01.03.2017 / 13:37

0 respostas