Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Feb 2004 11:37:26 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Tim Robbins <tjr@freebsd.org>
Cc:        Kris Kennaway <kris@obsecurity.org>
Subject:   Re: Anyway to extract a large file from EXT2FS filesystem?
Message-ID:  <20040218112014.V19484@gamplex.bde.org>
In-Reply-To: <20040217112251.GA25431@cat.robbins.dropbear.id.au>
References:  <20040217103909.N73217@yabba.500mhz.net> <20040217100822.GA13286@xor.obsecurity.org> <20040217102121.GA13632@xor.obsecurity.org> <20040217112251.GA25431@cat.robbins.dropbear.id.au>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 17 Feb 2004, Tim Robbins wrote:

> > 5BOn Tue, Feb 17, 2004 at 11:16:50AM +0100, Stefan Krantz wrote:
> > > > > I would like to extract a large (11GB) tar file on an ext3 filesystem. But
> > > > > it shows only to be about 3gb large:
> > > > >
> > > > > yabba# ls -la pictures.tar
> > > > > -rw-r--r--  1 root  wheel  3317055488 Feb 15 19:03 pictures.tar
> > > > >
> > > > > Is there any possible way to extract the file?

> Try this patch and let me know how it goes. You'll have to specify
> the file name of /sys/gnu/ext2fs/ext2_inode_cnv.c to patch(1) manually,
> then either buildkernel or rebuild only ext2fs.ko. If the file shows
> up with the correct size in a directory listing, make sure you can actually
> read data past 4 GB.
>
> ==== //depot/user/tjr/freebsd-tjr/src/sys/gnu/ext2fs/ext2_inode_cnv.c#1 - /p4/tjr/src/sys/gnu/ext2fs/ext2_inode_cnv.c ====
> @@ -77,6 +77,8 @@
>  	*/
>  	ip->i_mode = ei->i_links_count ? ei->i_mode : 0;
>  	ip->i_size = ei->i_size;
> +	if (S_ISREG(ip->i_mode))
> +		ip->i_size |= ((u_int64_t)ei->i_size_high) << 32;
>  	ip->i_atime = ei->i_atime;
>  	ip->i_mtime = ei->i_mtime;
>  	ip->i_ctime = ei->i_ctime;
> @@ -112,6 +114,8 @@
>  	 */
>  	ei->i_dtime = ei->i_links_count ? 0 : ip->i_mtime;
>  	ei->i_size = ip->i_size;
> +	if (S_ISREG(ip->i_mode))
> +		ei->i_size_high = ip->i_size >> 32;
>  	ei->i_atime = ip->i_atime;
>  	ei->i_mtime = ip->i_mtime;
>  	ei->i_ctime = ip->i_ctime;
>

The feature stuff needs to be handled for writing.

The feature stuff is slightly broken for reading.  Large file support is
a read-only compatibility feature (it is indicated by the
EXT2_FEATURE_RO_COMPAT_LARGE_FILE flag in the s_feature_ro_compat field
in the superblock), but we didn't support it without the first hunk in
the above patch so we should have rejected even r/o mounts of file systems
that have this flag set.  We only reject r/w mounts of such file systems.
I suppose this isn't a problem in Linux implementations of ext2fs because
implementations that don't support large files in ext2fs don't support
large files anywhere, so files larger than the old limit of 4GB are handled
as correctly as possible at read time so their presence need not prevent
mounting.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040218112014.V19484>