Folkert van Heusden
2009-Jan-16 12:01 UTC
something odd with the order of files in a directory
Hi, I noticed something odd with the order of files in a directory. When I put files in a directory in a certain order on an ext3-filesystem, the order is not kept. On fat-filesystem it does. E.g.: rm -rf t ; mkdir t touch a.a a.b a.c mv a.b t/ ; mv a.c t/ ; mv a.a t/ ls -Ula t/ I then would expect: a.b a.c a.a but instead I get drwxr-xr-x 3 root root 4096 2009-01-16 12:59 .. -rw-r--r-- 1 root root 0 2009-01-16 12:59 a.c -rw-r--r-- 1 root root 0 2009-01-16 12:59 a.b -rw-r--r-- 1 root root 0 2009-01-16 12:59 a.a drwxr-xr-x 2 root root 4096 2009-01-16 12:59 . I tried adding sync between each mv but that didn't help. Folkert van Heusden -- ---------------------------------------------------------------------- Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com
Folkert van Heusden wrote:> Hi, > > I noticed something odd with the order of files in a directory. > When I put files in a directory in a certain order on an > ext3-filesystem, the order is not kept. On fat-filesystem it does. > E.g.: > rm -rf t ; mkdir t > touch a.a a.b a.c > mv a.b t/ ; mv a.c t/ ; mv a.a t/ > ls -Ula t/ > > I then would expect: > a.b > a.c > a.a > > but instead I get > drwxr-xr-x 3 root root 4096 2009-01-16 12:59 .. > -rw-r--r-- 1 root root 0 2009-01-16 12:59 a.c > -rw-r--r-- 1 root root 0 2009-01-16 12:59 a.b > -rw-r--r-- 1 root root 0 2009-01-16 12:59 a.a > drwxr-xr-x 2 root root 4096 2009-01-16 12:59 . > > I tried adding sync between each mv but that didn't help.This is due to the dir_index feature; you're getting them back in hash (read: random) order. If you turn it off: [root at inode mnt]# tune2fs -O ^dir_index /dev/sdb4 you'll get what you expect: [root at inode test]# rm -rf t ; mkdir t [root at inode test]# touch a.a a.b a.c [root at inode test]# mv a.b t/ ; mv a.c t/ ; mv a.a t/ [root at inode test]# ls -Ula t/ total 8 drwxr-xr-x 2 root root 4096 2009-01-16 15:30 . drwxr-xr-x 4 root root 4096 2009-01-16 15:30 .. -rw-r--r-- 1 root root 0 2009-01-16 15:30 a.b -rw-r--r-- 1 root root 0 2009-01-16 15:30 a.c -rw-r--r-- 1 root root 0 2009-01-16 15:30 a.a but you'll lose the other efficiencies of the dir_index feature. -Eric