mirror of
https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
synced 2024-12-13 20:05:08 +08:00
59037c5357
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>
218 lines
7.1 KiB
Plaintext
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
|