Linux
不同 ext4 分區之間的文件系統塊大小不同
我們有基於 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-type
mke2fs手冊頁中的相同內容。因此,當分區大小小於 512MB 時,將
mkfs.ext4
其格式化為文件small
中的以下設置mke2fs.conf
。small = { blocksize = 1024 inode_size = 128 inode_ratio = 4096 }
但是,當分區大小超過 512MB
mkfs.ext4
或使用文件mke2fs
格式化分區defaults
時mke2fs.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
匹配但不准確。