This should go into some FAQ/HOWTO ...
The limit comes from this line in <linux/ext2_fs.h>
__u32 i_size; /* Size in bytes */
> - can the 2G limit be _safely_ increased (to, say, about 5G)?
> - if so, what changes are needed in the ext2 code to do it?
You cannot safely change this to __u64, as you'll break the lay-out of
struct ext2_inode, then. About the best proposal I've seen is the one
of Albert Cahalan. You can use another 16 of the reserved bits to go
to an 48 bit inode size. You'd have to make sure you don't use
anything that's used by another system already.
I don't recall the details. One possibility is to recycle the fields
for the currently unimplemented fragmentation support, which would
give you enough free bits. Apart from this, it seems the Hurd already
occupies everything else.
In order to do this safely, you would have to mark the filesystem
with one of the incompatible flags (s_feature_incompat), and then
support the other size bits all over the place.
Good luck,
Martin