This one finished more quickly (-2 -P -y), but still had the memory allocation error, and still spat out shedloads of "illegal indirect block" errors:
It's moved on. The problem is described
here.
You could just continue until it works. Or, if you don't mind using the maintenance mode shell, this might sort it in one go (based on the link above, untested).
At the maintenance mode command line (cli), run
mount
[Enter] to check whether partition 3 (probably /dev/sda3) is mounted. If not,
mount /dev/sda3 /mnt/hd3
[Enter]. Create a cache directory on that partition for e2fsck
mkdir -p /mnt/hd3/e2fscache
[Enter].
Create a configuration file for e2fsck:
Code:
cat <<EOM >/var/lib/humaxtv_backup/mod/e2fsck.conf
[scratch_files]
directory = /mnt/hd3/e2fscache
EOM
Check that the new file in fact contains lines 2 and 3 above as it should
cat /var/lib/humaxtv_backup/mod/e2fsck.conf
[Enter].
Now, go to an environment where this configuration should be used
E2FSCK_CONFIG=/var/lib/humaxtv_backup/mod/e2fsck.conf tmenu
[Enter]
(not E2FSCK_OPTS!). This should bring up the familiar maintenance mode menu (after PIN entry). When you run
fix-disk from this menu, e2fsck should find out about the cache directory, fill it with data needed to fix a giant inode, and not run out of memory.
If this works it would be a candidate for updating
fix-disk in the next CF.
fix-disk uses a swap file to gain memory headroom for scanning the large partition, but it's obviously not enough. The [scratch_files] option might not have been available when
fix-disk was created, but we have
/sbin/e2fsck
which is linked to v1.42.13 in
/usr/lib/ext2
in the CF now (as well as two statically linked versions in the repository, which wouldn't be accessible to
fix-disk as their installations would be on the filesystem being fixed).