On Sun, Jun 17, 2018 at 02:31:29PM -0400, Theodore Y. Ts'o wrote: > On Fri, Jun 15, 2018 at 07:37:19PM -0700, Elliott Mitchell wrote: > > > > During the process I ended up running `e2fsck -f` multiple times. I > > ended up running `e2fsck -f` after enabling each feature (`tune2fs` > > really didn't like enabling multiple features at once).
> I will note that if you are starting with an ext2/ext3 file system (one > without extents and the uninit_bg or metadata_csum features), you will > get much better performance in the long run if you create a new ext4 > file system and then copy all of the data from the ext2 file system to > ext4. > > My experience from when we did an ext2 upgrade to ext4 (in no-journal > mode) some six or seven years ago, for our workload, which was for a > cluster file system, was comparing the performance of an existing file > system upgrading to ext4 in place, versus the performance of a freshly > created ext4 file system, was that the upgrade-in-place experience > resulted in roughly half the performance improvement compared to a > fresh ext4 file system. > > So if you are going to need to run tune2fs and e2fsck -f multiple > times ---- what are you trying to do? What's the goal here? Performance isn't a critical issue for this system. As long as performance is reasonable and ideally not too much system admin time is spent, that is good enough. I'm more concerned with keeping the system up to date. Everything is moving off ext3 onto ext4 and since one crucial utility finally got updated for ext4, I'm doing upgrades. One thing which had been an issue was getting journalled quotas. Doing full quota checks by having `repquota` do what amounts to an `fsck` is kind of a bit slow. I thought I'd managed to accomplish that while still on ext3, but I wasn't absolutely certain... > Don't get me wrong; if you can get me a reproducible test case, I'm > happy to look at it. But Red Hat doesn't support upgrading file > systems via tune2fs. And that's because there are all sorts of corner > cases and it's very hard to do regression testing or bug > reproductions. We have used tune2fs to upgrade file systems at > Google, but it's something we testetd extensively, and we only did it > where it makes sense. RedHat support isn't an issue for me if you notice where this report appeared. :-) It was my understanding upgrade via `tune2fs` is supposed to work, so I used the handy tool. > > > And do you really need to enable user, group, and project quota > > > tracking? Please keep in mind there is a performance cost for > > > enabling quota tracking; it is definitely not free.... > > > > I definitely want user quota with journal. I'm unsure of group and > > project. > > For each quota type that you enable, you basically end up paying for > an extra random write, and potentially a random read, associated with > block or inode allocation for a given user or group id, every five > seconds. So if you don't need group or project tracking, don't turn > it on. We only track usage based on a group basis, so we only enable > group quotas. > > As far as the turning on the quota feature and that terrible error > message --- did the file system have any quota files before, and did > you check to see if the file system was full (e.g., not enough blocks > to allocate the quota file)? Yes. I could well believe `tune2fs` is unable to upgrade quota type, and that is where the problem came from. Disabling one quota type may be worthwhile. `dumpe2fs -h` with magic numbers stripped, filesystem 0: Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit mmp sparse_super large_file metadata_csum Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 262144 Block count: 1047552 Reserved block count: 52377 Free blocks: 828522 Free inodes: 253868 First block: 0 Block size: 4096 Fragment size: 4096 Group descriptor size: 64 Reserved GDT blocks: 255 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Filesystem created: Fri May 12 18:59:53 2017 Last mount time: Tue Jun 12 23:30:50 2018 Last write time: Tue Jun 12 23:30:50 2018 Mount count: 2 Maximum mount count: 22 Last checked: Tue Jun 12 22:52:53 2018 Check interval: 0 (<none>) Lifetime writes: 350 GB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Default directory hash: half_md4 MMP block number: 773 MMP update interval: 5 Checksum type: crc32c `dumpe2fs -h` with magic numbers stripped, filesystem 1: Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit mmp sparse_super large_file metadata_csum Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 1509600 Block count: 6037360 Reserved block count: 301868 Free blocks: 5262543 Free inodes: 1336969 First block: 0 Block size: 4096 Fragment size: 4096 Group descriptor size: 64 Reserved GDT blocks: 1021 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8160 Inode blocks per group: 510 Filesystem created: Fri May 12 19:01:07 2017 Last mount time: Tue Jun 12 23:30:50 2018 Last write time: Tue Jun 12 23:30:50 2018 Mount count: 1 Maximum mount count: 29 Last checked: Tue Jun 12 22:58:11 2018 Check interval: 0 (<none>) Lifetime writes: 6674 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Journal backup: inode blocks MMP block number: 1539 MMP update interval: 5 Checksum type: crc32c Journal features: journal_incompat_revoke journal_64bit journal_checksum_v3 Journal start: 1 Journal checksum type: crc32c -- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sig...@m5p.com PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445