Hi,

I have a JFS filesystem image that corrupted. Since this is a question 
about data recovery I expect a lot "non-answers" in the line of "where's 
your backup?" or "do it on block level image copies". Thanks, I know 
that, you don't have to lecture me on that. See the notes at the end for 
what and why. Thank you.

*jfs_fsck* refuses to work on it, bailing out with the following error 
message:

     ~ % 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.

Using *jfs_debugfs* commands `su` and `s2p` the folloing information was 
obtained:

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

     Aggregate Block Size: 4096

**Output of `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: 32539352
                         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

**Output of `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

**Output of `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

**Output of `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

Now the question is, in what do I have to manipulate in the 
superblock(s) in which values, so that either *jfs_fsck* can be 
convinced to go to work, or that I can mount it (using the Linux jfs 
kernel filesystem implementation)?

It'd be also perfectly acceptable to have some tool that chews through 
the filesystem image and spits out everything it considers to be a file 
therein, think `lost+found`.

----

###End Notes

Due to events somewhat under my control a Linux mdadm RAID-5 with a JFS 
filesystem on it got corrupted in a way, which failure mode I still not 
fully understand to this day. This FS was part of a NAS I shared with 
another dude and I repeatedly reminded him, that RAIDs don't replace 
backups, yet despite these warnings other dude has some non-backuped 
data on that RAID (*and is now in a stage of being semi-angry… at me I 
have the impression*). The immediate action was to remove the disks from 
the system and create block level copies of them. And any kind of 
manipulation I'm going to do happens on *snapshots* of these copies, so 
whatever fuckup happens in the recovery process, I can rollback at any time.

Recently I was finally able to put the mdadm RAID into a (hopefully 
consistent) state, that allows for further steps.

Basically I want to recover what's there, call it a day and write off 
the irrecoverable losses.

Regards,

Wolfgang


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jfs-discussion mailing list
Jfs-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jfs-discussion

Reply via email to