Linux-kernel mailing list archive 1999-22,: Re: files >4gig [WAS Adding more than 8 swap partitions]

# Re: files >4gig [WAS Adding more than 8 swap partitions]

Matti Aarnio (matti.aarnio@sonera.fi)
Sat, 5 Jun 1999 08:51:48 +0300

- Messages sorted by: [ date ][ thread ][ subject ][ author ]
- Next message: Stephen Williams: "Re: XFS and journalling filesystems"
- Previous message: synflood@endor.sick.cl: "2.3.5_andrea2 IDE-CD Problem"

On Fri, Jun 04, 1999 at 07:45:12PM -0400, Uncle George wrote:
> So I created a 17 gig file using Linux 2.2.9 & a file in /tmp.
> Interestingly enough at 17 gig I get an error 22 ( still have space &
> inodes available ).

EINVAL is per standards error code for exceeding filesystem
addressability range. EFBIG would have been more intuitive,
I think, but this is what POSIX and Single Unix Specification
tell us to use :-/

You have 1k blocksize at your filesystem, and you are actually
seeing 16 GB + epsilon worth of file offset range.

... in the 32-bit front, it seems that during 2.3.* the systems
will be able to address file offsets up to 512 * 4G = 2 TB.
Not quite sizeof(page_size) * 4G that my initial code did..
(intel has 4kB pages)

> YOU ALSO NOW HAVE A CORRUPT / BUSTED-SUPER-BLOCK in the partition.
> fsck wants to use an alternate superblock, and suggests using 8192(?),
> which doesn't work. :-\
> this is the little pgm used to create the 17gig sparse file.
> So I guess its not a 2/4gig boundary problem anymore.
> gat
>
> BTW it may be that fsck cant handle it ( redhat 5.0 vintage ), but I
> dunno at the moment :( It just at reboot time, i always force a fsck.
> Removeing the 17gig file didn't help :-(

That guess is correct, that old fsck DOESN'T handle it.

/Matti Aarnio <matti.aarnio@sonera.fi>

From my 'try-lfs.c' program comments:

/*
* Execution of this program creates a large (looking) file at
* local system. The execution of this program stops at offset
* which is just beyond what the local filesystem can support.
*
* In case the local filesystem is EXT2 or UFS, the triply-
* indirection scheme can support up to following sizes per
* filesystem basic block size:
*
* 512 2 GB + epsilon
* 1k 16 GB + epsilon
* 2k 128 GB + epsilon
* 4k 1024 GB + epsilon
* 8k 8192 GB + epsilon ( not without PAGE_SIZE >= 8 kB )
*
* However, the basic block device layer can support only up to
* 4G blocks of 512 bytes; being at safe side, lets say 2G blocks
* of 512 bytes: 1024 GB without epsilon.
*
* The basic filesystem block size supportable at given system is
* currently dependent on what the system page cache page size is.
* If the filesystem basic block exceeds of the system page size,
* the system does not work currently. (2.2.* series kernels.)
*
*
* bb = sizeof(basic block)
* B = bb / 4
* MaxSize = bb * (B^3 + B^2 + B + 10)
* = bb^4 / 4^3 + bb^3 / 4^2 + bb^2 / 4^1 + 10 * bb
* = bb^4 / 64 + bb^3 / 16 + bb^2 / 4 + 10 * bb
*
* The primary term (bb^4/64) yields that 16 GB for bb=1k
* The 'epsilon' is all the rest, and is less than 1/250 of
* the primary term for 1kB, even less for larger bb values.
*
*
* The EXT2 (and UFS) can address up to 4G of "basic blocks", however
* that limit will likely to be beyond of other limitations from other
* parts of the system.
*
*/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

- Next message: Stephen Williams: "Re: XFS and journalling filesystems"
- Previous message: synflood@endor.sick.cl: "2.3.5_andrea2 IDE-CD Problem"