kern/104133: [ext2fs] EXT2FS module corrupts EXT2/3 filesystems

Bjoern Voigt bjoern at cs.tu-berlin.de
Tue Oct 24 08:20:28 PDT 2006


The following reply was made to PR kern/104133; it has been noted by GNATS.

From: Bjoern Voigt <bjoern at cs.tu-berlin.de>
To: freebsd-gnats-submit at FreeBSD.org
Cc: Bruce Evans <bde at zeta.org.au>
Subject: Re: kern/104133: [ext2fs] EXT2FS module corrupts EXT2/3 filesystems
Date: Tue, 24 Oct 2006 17:15:21 +0200

 Thank you for the good explanation.
 
 Bruce Evans wrote:
 > Right, it was your task to find why it doesn't :-), but I think I figured
 > that out: out
 I'm not an file system expert. But I like to help to find out the reason 
 for the problem.
 
 >> attributes or not can not be found in the output of dumpe2fs:
 >>
 >>     # dumpe2fs /dev/hda6
 >>     dumpe2fs 1.38 (30-Jun-2005)
 >> ...
 >>     Filesystem features:      has_journal filetype sparse_super
 > The information weather or not an ext2/3 file system contains extended
 >
 > This doesn't mention extended attributes.  This seems to be a bug in
 > dumpe2fs.
 Sorry, /dev/hda6 was not the right device. The right is /dev/hdb6 
 (=/dev/ad1s6 in my FreeBSD installation). Here is the dump for /dev/hdb6:
 
     Filesystem volume name:   <none>
     Last mounted on:          <not available>
     Filesystem UUID:          d7e5aa99-4705-4294-9a88-800c15732c39
     Filesystem magic number:  0xEF53
     Filesystem revision #:    1 (dynamic)
     Filesystem features:      has_journal ext_attr dir_index filetype
     needs_recovery sparse_super
     Default mount options:    (none)
     Filesystem state:         clean
     Errors behavior:          Continue
     Filesystem OS type:       Linux
     Inode count:              128520
     Block count:              514048
     Reserved block count:     25702
     Free blocks:              167317
     Free inodes:              98653
     First block:              1
     Block size:               1024
     Fragment size:            1024
     Blocks per group:         8192
     Fragments per group:      8192
     Inodes per group:         2040
     Inode blocks per group:   255
     Filesystem created:       Sat Apr 17 17:20:47 2004
     Last mount time:          Tue Oct 24 15:25:58 2006
     Last write time:          Tue Oct 24 15:25:58 2006
     Mount count:              1
     Maximum mount count:      500
     Last checked:             Tue Oct 24 15:25:39 2006
     Check interval:           5184000 (2 months)
     Next check after:         Sat Dec 23 14:25:39 2006
     Reserved blocks uid:      0 (user root)
     Reserved blocks gid:      0 (group root)
     First inode:              11
     Inode size:               128
     Journal inode:            8
     Default directory hash:   tea
     Directory Hash Seed:      f4de9257-4024-4732-9733-112fc61399aa
     Journal backup:           inode blocks
 
 All of the set features (has_journal, ext_attr, dir_index, filetype, 
 needs_recovery, sparse_super) are now candidates for the problem in the 
 ext2fs module.
 
 > The problem wth not disallowing mounts with extended attributes seems
 > to be that extended attributes are supposed to be (always) backwards
 > compatible (except to ext2fs version 0, which doesn't even have the
 > features bitmaps) -- they are in the features bitmap for compatible
 > attributes.  FreeBSD's ext2fs only checks the features bitmaps for
 > incompatible and read-only-compatible attributes.  In the above,
 > has_journal is supposed to be compatible, filetype is incompatible but
 > supported by FreeBSD (i.e., it is incompatible with some implementations
 > but not with FreeBSD's), and sparse_super is read-only compatible but
 > supported by FreeBSD (i.e., it is always compatible for read-only
 > mounts, and for read-write mounts it is incompatible with some
 > implementations but not with FreeBSD's).
 So, "has_journal", "spare_super" and "filetype" are ok. The remaining 
 candidates are now "ext_attr" and "dir_index". "needs_recovery" is 
 caused by the fact that I queried a mounted file system.
 
 > Try using an ext3 file system that doesn't use extended attributes in
 > any way, to see if FreeBSD's ext2fs creates bad extended attributes
 > starting from non.  e2fsck and/or tune2fs might be able to remove any
 > existing extended attributes.
 The problem is, that I did not found a way to remove the extended 
 attributes feature. I figured out the following:
 
     * a single file attribute can be cleared with setfattr.
     * user_xattr is a mount option. tune2fs can turn on the mount option
       per default for a file system. Turning off the mount option does
       not clear the "ext_attr" feature. From "man tune2fs":
 
              -o [^]mount-option[,...]
                     Set or clear the indicated default mount options in
       the filesystem.  Default  mount
                     options  can be overridden by mount options
       specified either in /etc/fstab(5) or on
                     the command line arguments to mount(8).  Older
       kernels may not  support  this  fea-
                     ture;  in particular, kernels which predate 2.4.20
       will almost certainly ignore the
                     default mount options field in the superblock.
 
                     More than one mount option can be cleared or set by
       separating features  with  com-
                     mas.   Mount  options  prefixed with a caret
       character ('^') will be cleared in the
                     filesystem's superblock; mount options without a
       prefix character or prefixed  with
                     a plus character ('+') will be added to the filesystem.
 
                     The following mount options can be set or cleared
       using tune2fs:
                     [...]
 
                          user_xattr
                                 Enable user-specified extended attributes.
 
     * tune2fs can set und clear some file system features. In "man
       tune2fs" the features "dir_index", "filetype", "has_journal" and
       "sparse_super" are mentioned. But "ext_attr" is not mentioned and
       is not recognized.
     * e2fsck has no option for turning off extended attributes. The is
       only a option to switch the extended attribute format. From "man
       e2fsck":
 
       -E extended_options
                     Set e2fsck extended options.  Extended options are
       comma separated, and may take an
                     argument using the equals ('=') sign.  The following
       options are supported:
 
                          ea_ver=extended_attribute_version
                                 Assume the format of the extended
       attribute blocks in the filesystem is
                                 the  specified  version number.  The
       version number may be 1 or 2.  The
                                 default extended attribute version
       format is 2.
     * mke2fs has no option to set the extended attributes feature. Since
       also tune2fs doesn't has such an option, it's likely that the
       feature will be set automatically after first mount with option
       "user_xattr" and after the first attribute is set for a file in
       this file system. A short test approved this.
 
 I have not figured out, how to clean a file system from extended 
 attributes.
 
 So probably I have to create a new file system without extended 
 attributes for testing the ext2fs module.
 
 Any ideas?
 
 Björn
 


More information about the freebsd-bugs mailing list