Messages in this thread | | | Date | Sat, 5 Jun 1999 08:51:48 +0300 | From | Matti Aarnio <> | Subject | Re: files >4gig [WAS Adding more than 8 swap partitions] |
| |
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/
| |