System crash during mke2fs

Theodore Tso tytso at mit.edu
Fri Oct 24 10:54:40 UTC 2008


On Fri, Oct 24, 2008 at 03:16:30AM +0200, Carlo Wood wrote:
> Hiya, don't know where else to report this. Please
> correct me if this isn't the right place.
> 
> I just ran into a serious bug :((
> 
> We were trying to create a virtual filesystem
> in an image (file) of around 238 GB.  [Using double losetup configuration]
>
> Here the machine completely halted/crashed. I don't know what
> happened, because it's a remote machine.
> 
> The writing of the inode table started very fast, but it was
> already slowing down the last few - and completely stopped
> at 306, which was 12 minutes ago (my ssh connection to the
> machine still didn't time out, weird enough). 

That's a classic case of mke2fs tickling a VM bug.  The VM should be
able to do proper write throttling, but mke2fs writes a blocks very
quickly, and so it's a great test of the kernel virtual memory
subsystem.  :-) So the fact that your system hung is a kernel bug,
probably caued by the double /dev/loop configuration.  What version of
the kernel are you using?

There is a workaround that might help: "export MKE2FS_SYNC=10".  This
will force an explicit sync system call every 10 blockgroups, which
tends to work around the kernel VM bug.  It's not the default mainly
because mke2fs is such a great kernel test tool, and the VM really
needs to be able to handle this case.

> Note that mke2fs says: 29097984 inodes, 58195960 blocks
> That is 58195960 * 4096 = 238370652160 the full size of
> the image file?!?
> 
> This partition is only 200MB though!

That's because you created /dev/loop1 as a loop device with an offset
of 512*63 bytes from the beginning of /dev/loop0.  There is no way to
set the maximum size of a loop device (it's not something which is
currently defined as part of the interface of the LOOP_SET_STATUS
ioctl.  If you want to do things manually like this, you'll need to
explicitly specify the size of the desired filesystem to mke2fs; it's
a shortcoming in the loop device.

The other way to do things would be to create an image file of the
desired partition length, and then assemble it by hand afterwards;
sorry, the loop device wasn't designed to be used to emulate a
partitioned disk.  It could be, but kernel patches would be required
to extend its functionality.

Regards,

							- Ted




More information about the Ext3-users mailing list