Frequently Asked Questions

From Ext4
Revision as of 15:08, 28 March 2008 by Tthtlc (Talk | contribs)

Jump to: navigation, search
This page is a stub

You can help Ext2/3/4 Wiki by expanding it.

Contents

Getting Started

Where do I get the latest version of e2fsprogs?

The latest version of e2fsprogs can be found at Soureforge or at kernel.org.

How do I build e2fsprogs?

The INSTALL file in the top of the source tree gives more detailed information, but e2fsprogs uses a standard configure script, so the standard "./configure; make" will build the e2fsprogs binaries. Note that if you wish to build the ELF shared libraries, you need to add the "--enable-elf-shlibs" option to the configure invocation.

How do I mount a fresh new storage device as ext4?

For example, if the new device has been detected as /dev/sdb1 (check "dmesg" output):

Using the newly installed e2fsprogs (using the OS default mke2fs most likely will fail - just compare the message returne d with the following messages):

cd misc/
./mke2fs -E test_fs /dev/sdb1

mke2fs 1.40.8 (13-Mar-2008)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
126976 inodes, 506044 blocks
25302 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
62 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

cd ../debugfs/
./debugfs -w /dev/sdb1
debugfs 1.40.5 (27-Jan-2008)
debugfs: set_super_value s_flags 4
debugfs: quit

cd ../misc/
./blkid /dev/sdb1
/dev/sdb1: UUID="3aa983ef-0dcd-474d-a9d3-2660ff6ef3e7" TYPE="ext4dev"
mkdir /mnt/test
./tune2fs -j /dev/sdb1
mount -t ext4dev /dev/sdb1 /mnt/test
df

Why did I get two different output for blkid?

When executing:

blkid /dev/sdb2
/dev/sdb2: UUID="5b8706af-208c-4e4c-a3bf-16f1c0864c82" TYPE="ext2" 

But when the latest e2fsprogs' version of blkid is executed:

/download/e2fsprogs/e2fsprogs/misc>./blkid /dev/sdb2
/dev/sdb2: UUID="5b8706af-208c-4e4c-a3bf-16f1c0864c82" SEC_TYPE="ext2" TYPE="ext4dev" 

So this explained why you get different output.

Why do I get "EXT4-fs: sdb1: not marked OK to use with test code." in my dmesg?

This error arises from not executing the "mke2fs -E test_fs /dev/sdb1", which will label the partition as test_fs. This signature is currently checked for in the ext4 development source codes.

How do I turned off the mballoc feature?

By default "mount" will enable mballoc feature when mounting. To turn it off:

mount -t ext4dev -o data=writeback,delalloc,extents,nomballoc /dev/sdb1 /mnt/test

How do I turned off the extent feature?

By default "mount" will enable extent feature when mounting. To turn it off:

mount -t ext4dev -o data=writeback,delalloc,noextents,mballoc /dev/sdb1 /mnt/test

CAUTION: Once extent feature has been turned on, it is not possible to mount it as ext3 anymore.

Why do I get "EXT4-fs: Unrecognized mount option "delalloc" or missing value"?

Please download the ext4 version from the git patchset, instead of using the kernel source.

What is mballoc feature? After I mounted a partition as mballoc, can I remount it as nomballoc?

Yes, it is possible, just dismount the partition first, and execute "mount" with the nomballoc feature.

Understanding how it works

What are the new features in Ext4 (vs Ext2/3)?

How do I test the features in Ext4?

What external tools are available for testing Ext4 FS?

One commonly known simple tool is fsfuzzer: http://www.digitaldwarf.be/products/mangle.c, and its content is reproduced here:

/*
  trivial binary file fuzzer by Ilja van Sprundel.
  It's usage is very simple, it takes a filename and headersize
  as input. it will then change approximatly between 0 and 10% of 
  the header with random bytes (biased towards the highest bit set)
 
  obviously you need a bash script or something as a wrapper !

  so far this broke: - libmagic (used file)
                     - preview (osX pdf viewer)
		     - xpdf (hang, not a crash ...)
		     - mach-o loading (osX 10.3.7, seems to be fixed later)
		     - qnx elf loader (panics almost instantly, yikes !)
		     - FreeBSD elf loading 
		     - openoffice
		     - amp
		     - osX image loading (.dmg) 
		     - libbfd (used objdump)
		     - libtiff (used tiff2pdf)
		     - xine (division by 0, took 20 minutes of fuzzing)
		     - OpenBSD elf loading (3.7 on a sparc)
		     - unixware 713 elf loading
		     - DragonFlyBSD elf loading
		     - solaris 10 elf loading 
		     - cistron-radiusd
		     - linux ext2fs (2.4.29) image loading (division by 0)
		     - linux reiserfs (2.4.29) image loading (instant panic !!!)
		     - linux jfs (2.4.29) image loading (long (uninteruptable) loop, 2 oopses)
		     - linux xfs (2.4.29) image loading (instant panic)
		     - windows macromedia flash .swf loading (obviously the windows version of mangle needs a few tweaks to work ...)
		     - Quicktime player 7.0.1 for MacOS X
		     - totem
		     - gnumeric
                     - vlc
                     - mplayer
                     - python bytecode interpreter
                     - realplayer 10.0.6.776 (GOLD)
                     - dvips
 */
#include <stdio.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>

#define DEFAULT_HEADER_SIZE 1024
#define DEFAULT_NAME "test2"

int getseed(void) {
	int fd = open("/dev/urandom", O_RDONLY);
	int r;
	if (fd < 0) {
		perror("open");
		exit(0);
	}
	read(fd, &r, sizeof(r));
	close(fd);
	return(r);
}

int main(int argc, char **argv) {
	
	int fd;
	char *p, *name;
	unsigned char c;
	unsigned int count, i, off, hsize;

	if (argc < 2) {
		hsize = DEFAULT_HEADER_SIZE;
		name = DEFAULT_NAME;
	} else if (argc < 3) {
		hsize = DEFAULT_HEADER_SIZE;
		name = argv[1];
	} else {
		hsize = atoi(argv[2]);
		name = argv[1];
	}
	fd = open(name, O_RDWR);
	if (fd < 0) {
		perror("open");
		exit(0);
	}
	p = mmap(0, hsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
	if ((int) p == -1) {
		perror("mmap");
		close(fd);
		exit(0);
	}
	srand(getseed());
	count = (unsigned) rand() % (hsize / 10);
	for (i = 0; i < count; i++) {
		off = rand() % hsize;
		c = rand() % 256;
		/* we want the highest bit set more often, in case of signedness issues */
		if ( (rand() % 2) && c < 128) c |= 0x80;
		p[off] = c;
	}
	close(fd);
	munmap(p, hsize);
}

Its fuller content is packaged here (which shell scripts to run the compiled programs): [1]

How do I benchmark the performance of Ext4 as against other FS? What are the tools available?

Personal tools