If you have a contiguous partial piece of an ext4 file system (assuming it’s perfectly clean), starting from the beginning of the partition, is there any way to check it, or to mount it to get the files whose parents, inodes and data are all completely contained inside?
Background:
Have (or maybe had) a very large 11TB RAID 6 array, filled with a single large ext4 partition. Something strange happened when a single drive failed and the array ended up failing 13 out of the 11 drives. I had trouble getting the array restarted, and got to the point where I exhausted all of the options I considered completely safe. I considered a few things that may have worked, but mdadm doesn’t seem to have a definite “do not change anything” option. So I decided the only way to be absolutely safe would be to clone the disks before proceeding - then I realized how much time that would take and sent the drives off to a recovery service so they could image them and check it out.
Before doing so, I copied the first 2GB from each disk. I XORd the images from the working drives to reconstruct the data chunks that were on the failed disk, manually assembled the chunks, and am very confident that I have 22GB of “correct” data in a single file. The parity and Q syndromes all matched (with RAID 6 you can still check with only 1 missing device). I’ve learned the fine details of ext4 from https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout, and have looked at lots of raw data from the reconstructed partition, and it all looks good. The recovery company says that they’re not finding many inodes, but I found a lot of them, exactly where they’re supposed to be. I tried to mount and e2fsk, but both processes seem to be extremely unhappy that the device size doesn’t match the size implied by the file system geometry.
I considered hacking the superblock to manually reduce the size, but I figure that wouldn’t work because there would then be more group descriptor blocks than it would expect after the superblocks. I might try doing that and compensating by incrementing the “reserve block count” to compensate. Alternatively, if there is some way to make the file appear to be the expected size with nothing but zeroes after the end of the actual data, maybe I could mount it and not get any errors until I cause the kernel to read past the true end of the file.