Linux

不同 ext4 分區之間的文件系統塊大小不同

  • February 10, 2022

我們有基於 BBB 的定制板,具有 256MB RAM 和 4GB eMMC,

我已經使用下面的程式碼對其進行了分區,

parted --script -a optimal /dev/mmcblk0 \
 mklabel gpt \
 mkpart primary 128KiB 255KiB \
 mkpart primary 256KiB 383KiB \
 mkpart primary 384KiB 511KiB \
 mkpart primary 1MiB 2MiB \
 mkpart primary 2MiB 3MiB \ 
 mkpart primary 3MiB 4MiB \
 mkpart primary 4MiB 5MiB \ 
 mkpart primary 5MiB 10MiB \
 mkpart primary 10MiB 15MiB \
 mkpart primary 15MiB 20MiB \
 mkpart primary 20MiB 21MiB \
 mkpart primary 21MiB 22MiB \
 mkpart primary 22MiB 23MiB \
 mkpart primary 23MiB 28MiB \
 mkpart primary ext4 28MiB 528MiB \
 mkpart primary ext4 528MiB 1028MiB \
 mkpart primary ext4 1028MiB 1128MiB \
 mkpart primary ext4 1128MiB 1188MiB \
 mkpart primary ext4 1188MiB 2212MiB \
 mkpart primary ext4 2212MiB 2603MiB \
 mkpart primary ext4 2603MiB 2639MiB \
 mkpart primary ext4 2639MiB 100% \

然後使用以下命令格式化文件系統分區

mkfs.ext4 -j -L $LABEL $PARTITION

現在,當我使用 tune2fs 讀取文件系統塊大小時,我看到小於 1GiB 的分區和大於或等於 1GiB 的分區的值不同。

# tune2fs -l /dev/mmcblk0p15  | grep Block
Block count:              512000
Block size:               1024
Blocks per group:         8192
# 
# 
# tune2fs -l /dev/mmcblk0p16  | grep Block
Block count:              512000
Block size:               1024
Blocks per group:         8192
# 
# 
# tune2fs -l /dev/mmcblk0p19  | grep Block
Block count:              262144
Block size:               4096
Blocks per group:         32768
# tune2fs -l /dev/mmcblk0p22  | grep Block
Block count:              1191936
Block size:               4096
Blocks per group:         32768

我無法理解為什麼塊大小不同。此外,mke2fs.conf 僅具有所有預設值,並且提到的塊大小為 4096。

[defaults]
   base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
   default_mntopts = acl,user_xattr
   enable_periodic_fsck = 0
   blocksize = 4096
   inode_size = 256
   inode_ratio = 16384

[fs_types]
   ext3 = {
       features = has_journal
   }
   ext4 = {
       features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
       auto_64-bit_support = 1
       inode_size = 256
   }
   ext4dev = {
       features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
       inode_size = 256
       options = test_fs=1
   }
   small = {
       blocksize = 1024
       inode_size = 128
       inode_ratio = 4096
   }
   floppy = {
       blocksize = 1024
       inode_size = 128
       inode_ratio = 8192
   }
   big = {
       inode_ratio = 32768
   }
   huge = {
       inode_ratio = 65536
   }
   news = {
       inode_ratio = 4096
   }
   largefile = {
       inode_ratio = 1048576
       blocksize = -1
   }
   largefile4 = {
       inode_ratio = 4194304
       blocksize = -1
   }
   hurd = {
        blocksize = 4096
        inode_size = 128
   }

有人可以解釋/建議一個文件/提示為什麼不同分區的塊大小不同嗎?

正如評論中提到的@derobert。

mkfs.ext4/mke2fs 引用/etc/mke2fs.conf並格式化分區。

mke2fs如果未明確提及,則根據分區大小選擇塊大小。閱讀-b block-size-T usage-typemke2fs手冊頁中的相同內容。

因此,當分區大小小於 512MB 時,將mkfs.ext4其格式化為文件small中的以下設置mke2fs.conf

small = {
       blocksize = 1024
       inode_size = 128
       inode_ratio = 4096
   }

但是,當分區大小超過 512MBmkfs.ext4或使用文件mke2fs格式化分區defaultsmke2fs.conf

[defaults]
   base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
   default_mntopts = acl,user_xattr
   enable_periodic_fsck = 0
   blocksize = 4096
   inode_size = 256
   inode_ratio = 16384

這就是我在不同分區中導致不同塊大小的原因。

再來一注。要獲得格式化後將獲得的 inode 總數,可以按如下方式計算,

Total number of inodes = partition size / inode_ratio
e.g. 
for 500MB partition
total number of inodes = (500 * 1024 * 1024) / 4096
                      = 128000

**注意:**我認為我在這裡遺漏了一些東西,因為對於我上面顯示的計算,顯示的實際值tune2fs幾乎Inode count: 128016匹配但不准確。

引用自:https://unix.stackexchange.com/questions/397260