e2fsprogs/tests/m_minrootdir/expect
Li Dongyang 59037c5357 mke2fs: set overhead in super block
If overhead is not recorded in the super block, it is calculated
during mount in kernel, for bigalloc file systems it takes
O(groups**2) in time.  For a 1PB device with 32K cluster size it takes
~12 mins to mount, with most of the time spent on figuring out
overhead.

While we can not improve the overhead algorithm in kernel due to the
nature of bigalloc, we can work out the overhead during mke2fs and set
it in the super block, avoiding calculating it every time when it
mounts.

Overhead is s_first_data_block plus internal journal blocks plus the
block and inode bitmaps, inode table, super block backups and group
descriptor blocks for every group.  This patch introduces
ext2fs_count_used_clusters(), which calculates the clusters used in
the block bitmap for the given range.

When bad blocks are involved, it gets tricky because the blocks
counted as overhead and the bad blocks can end up in the same
allocation cluster.  In this case we will unmark the bad blocks from
the block bitmap, convert to cluster bitmap and get the overhead, then
mark the bad blocks back in the cluster bitmap.

Reset the overhead to zero when resizing, we can not simply count the
used blocks as overhead like we do when mke2fs.  The overhead can be
calculated by kernel side during mount.

Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2020-01-26 23:10:05 -05:00

218 lines
7.1 KiB
Plaintext

create fs
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr dir_index filetype extent 64bit flex_bg sparse_super huge_file dir_nlink extra_isize metadata_csum
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 1024
Block count: 16384
Reserved block count: 819
Overhead clusters: 265
Free blocks: 16065
Free inodes: 1006
First block: 1
Block size: 1024
Fragment size: 1024
Group descriptor size: 64
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 512
Inode blocks per group: 128
Flex block group size: 16
Mount count: 0
Check interval: 15552000 (6 months)
Reserved blocks uid: 0
Reserved blocks gid: 0
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Default directory hash: half_md4
Checksum type: crc32c
Group 0: (Blocks 1-8192)
Primary superblock at 1, Group descriptors at 2-2
Block bitmap at 3 (+2)
Inode bitmap at 5 (+4)
Inode table at 7-134 (+6)
7876 free blocks, 494 free inodes, 4 directories, 494 unused inodes
Free blocks: 317-8192
Free inodes: 19-512
Group 1: (Blocks 8193-16383) [INODE_UNINIT]
Backup superblock at 8193, Group descriptors at 8194-8194
Block bitmap at 4 (bg #0 + 3)
Inode bitmap at 6 (bg #0 + 5)
Inode table at 135-262 (bg #0 + 134)
8189 free blocks, 512 free inodes, 0 directories, 512 unused inodes
Free blocks: 8195-16383
Free inodes: 513-1024
debugfs: stat /emptyfile
Inode: III Type: regular
Size: 0
Fragment: Address: 0 Number: 0 Size: 0
debugfs: stat /bigfile
Inode: III Type: regular
Size: 32768
Fragment: Address: 0 Number: 0 Size: 0
debugfs: stat /sparsefile
Inode: III Type: regular
Size: 1073741825
Fragment: Address: 0 Number: 0 Size: 0
debugfs: stat /bigzerofile
Inode: III Type: regular
Size: 1073741825
Fragment: Address: 0 Number: 0 Size: 0
debugfs: stat /fifo
debugfs: stat /emptydir
Inode: III Type: directory
Size: 1024
Fragment: Address: 0 Number: 0 Size: 0
debugfs: stat /dir
Inode: III Type: directory
Size: 1024
Fragment: Address: 0 Number: 0 Size: 0
debugfs: stat /dir/file
Inode: III Type: regular
Size: 8
Fragment: Address: 0 Number: 0 Size: 0
debugfs: ex /emptyfile
Level Entries Logical Physical Length Flags
debugfs: ex /bigfile
Level Entries Logical Physical Length Flags
X 0/0 1/1 0-31 AAA-BBB 32
debugfs: ex /sparsefile
Level Entries Logical Physical Length Flags
Y 0/1 1/1 1-1048576 AAA 1048576
X 1/1 1/5 1-1 AAA-BBB 1
X 1/1 2/5 512-512 AAA-BBB 1
X 1/1 3/5 1024-1024 AAA-BBB 1
X 1/1 4/5 524288-524288 AAA-BBB 1
X 1/1 5/5 1048576-1048576 AAA-BBB 1
debugfs: ex /bigzerofile
Level Entries Logical Physical Length Flags
debugfs: ex /dir
Level Entries Logical Physical Length Flags
X 0/0 1/1 0-0 AAA-BBB 1
debugfs: ex /dir/file
Level Entries Logical Physical Length Flags
X 0/0 1/1 0-0 AAA-BBB 1
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
test.img: 18/1024 files (0.0% non-contiguous), 319/16384 blocks
minify fs
Setting reserved blocks percentage to 0% (0 blocks)
Resizing the filesystem on test.img to 338 (1k) blocks.
The filesystem on test.img is now 338 (1k) blocks long.
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr dir_index filetype extent 64bit flex_bg sparse_super huge_file dir_nlink extra_isize metadata_csum
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 512
Block count: 338
Reserved block count: 0
Free blocks: 151
Free inodes: 494
First block: 1
Block size: 1024
Fragment size: 1024
Group descriptor size: 64
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 512
Inode blocks per group: 128
Flex block group size: 16
Mount count: 0
Check interval: 15552000 (6 months)
Reserved blocks uid: 0
Reserved blocks gid: 0
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Default directory hash: half_md4
Checksum type: crc32c
Group 0: (Blocks 1-337)
Primary superblock at 1, Group descriptors at 2-2
Block bitmap at 3 (+2)
Inode bitmap at 5 (+4)
Inode table at 7-134 (+6)
151 free blocks, 494 free inodes, 4 directories, 494 unused inodes
Free blocks: 4, 6, 135-262, 317-337
Free inodes: 19-512
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
test.img: 18/512 files (0.0% non-contiguous), 187/338 blocks
minify fs (2)
Setting reserved blocks percentage to 0% (0 blocks)
Resizing the filesystem on test.img to 188 (1k) blocks.
The filesystem on test.img is now 188 (1k) blocks long.
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr dir_index filetype extent 64bit flex_bg sparse_super huge_file dir_nlink extra_isize metadata_csum
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 512
Block count: 188
Reserved block count: 0
Free blocks: 1
Free inodes: 494
First block: 1
Block size: 1024
Fragment size: 1024
Group descriptor size: 64
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 512
Inode blocks per group: 128
Flex block group size: 16
Mount count: 0
Check interval: 15552000 (6 months)
Reserved blocks uid: 0
Reserved blocks gid: 0
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Default directory hash: half_md4
Checksum type: crc32c
Group 0: (Blocks 1-187)
Primary superblock at 1, Group descriptors at 2-2
Block bitmap at 3 (+2)
Inode bitmap at 5 (+4)
Inode table at 7-134 (+6)
1 free blocks, 494 free inodes, 4 directories, 494 unused inodes
Free blocks: 187
Free inodes: 19-512
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
test.img: 18/512 files (5.6% non-contiguous), 187/188 blocks