linux分区疑难问题

mkfs.ext4指定inode数量不生效

问题描述

通过mkfs.ext4指定inode数量时,实际生成的inode数量与指定的不符

操作

  • 格式化分区
mkfs.ext4 /dev/sdb1 -b  1024 -N 1
  • 挂载分区
mount /dev/sdb1 data1
  • 查看inode数量,发现虽然指定了1个,但是实际存在56个inode
[root@k8s-master mount]# df -i
文件系统                  Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs                 124180     370  123810       1% /dev
tmpfs                    126204       2  126202       1% /dev/shm
tmpfs                    126204     393  125811       1% /run
tmpfs                    126204      17  126187       1% /sys/fs/cgroup
/dev/mapper/centos-root 1496992 1445511   51481      97% /
/dev/sda1                512000     337  511663       1% /boot
/dev/sdb1                    56      11      45      20% /root/mount/data1

分析

  • 查看分区情况
    [root@k8s-master mount]# tune2fs -l /dev/sdb1 |grep Inode
    Inode count:              56
    Inodes per group:         8
    Inode blocks per group:   1
    Inode size:	          128
    
    • 发现存在inode 45个
    • 每个inode大小为128k
  • 查看分区详细情况
    [root@k8s-master mount]# dumpe2fs /dev/sdb1
    dumpe2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   <none>
    Last mounted on:          <not available>
    Filesystem UUID:          1022cd8d-4106-46a2-a85d-b365c0f8bdfc
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    Inode count:              56
    Block count:              50176
    Reserved block count:     2508
    Free blocks:              45012
    Free inodes:              45
    First block:              1
    Block size:               1024
    Fragment size:            1024
    Group descriptor size:    64
    Reserved GDT blocks:      256
    Blocks per group:         8192
    Fragments per group:      8192
    Inodes per group:         8
    Inode blocks per group:   1
    Flex block group size:    16
    Filesystem created:       Fri Oct 30 03:52:18 2020
    Last mount time:          n/a
    Last write time:          Fri Oct 30 03:52:18 2020
    Mount count:              0
    Maximum mount count:      -1
    Last checked:             Fri Oct 30 03:52:18 2020
    Check interval:           0 (<none>)
    Lifetime writes:          4446 kB
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:	          128
    Journal inode:            8
    Default directory hash:   half_md4
    Directory Hash Seed:      e9717272-a68b-4d21-84ed-5fe6c5135e52
    Journal backup:           inode blocks
    Journal features:         (none)
    日志大小:             4096k
    Journal length:           4096
    Journal sequence:         0x00000001
    Journal start:            0
    
    
    Group 0: (Blocks 1-8192)
      Checksum 0xdf02, unused inodes 0
      主 superblock at 1, Group descriptors at 2-2
      保留的GDT块位于 3-258
      Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
      Inode表位于 291-291 (+290)
      7899 free blocks, 0 free inodes, 1 directories
      可用块数: 287-290, 298-8192
      可用inode数:
    Group 1: (Blocks 8193-16384)
      Checksum 0x7f00, unused inodes 5
      备份 superblock at 8193, Group descriptors at 8194-8194
      保留的GDT块位于 8195-8450
      Block bitmap at 260 (bg #0 + 259), Inode bitmap at 276 (bg #0 + 275)
      Inode表位于 292-292 (bg #0 + 291)
      7934 free blocks, 5 free inodes, 1 directories, 5个未使用的inodes
      可用块数: 8451-16384
      可用inode数: 12-16
    Group 2: (Blocks 16385-24576) [INODE_UNINIT]
      Checksum 0x8d93, unused inodes 8
      Block bitmap at 261 (bg #0 + 260), Inode bitmap at 277 (bg #0 + 276)
      Inode表位于 293-293 (bg #0 + 292)
      4096 free blocks, 8 free inodes, 0 directories, 8个未使用的inodes
      可用块数: 20481-24576
      可用inode数: 17-24
    Group 3: (Blocks 24577-32768) [INODE_UNINIT]
      Checksum 0xdf00, unused inodes 8
      备份 superblock at 24577, Group descriptors at 24578-24578
      保留的GDT块位于 24579-24834
      Block bitmap at 262 (bg #0 + 261), Inode bitmap at 278 (bg #0 + 277)
      Inode表位于 294-294 (bg #0 + 293)
      7934 free blocks, 8 free inodes, 0 directories, 8个未使用的inodes
      可用块数: 24835-32768
      可用inode数: 25-32
    Group 4: (Blocks 32769-40960) [INODE_UNINIT, BLOCK_UNINIT]
      Checksum 0x17c6, unused inodes 8
      Block bitmap at 263 (bg #0 + 262), Inode bitmap at 279 (bg #0 + 278)
      Inode表位于 295-295 (bg #0 + 294)
      8192 free blocks, 8 free inodes, 0 directories, 8个未使用的inodes
      可用块数: 32769-40960
      可用inode数: 33-40
    Group 5: (Blocks 40961-49152) [INODE_UNINIT]
      Checksum 0xa207, unused inodes 8
      备份 superblock at 40961, Group descriptors at 40962-40962
      保留的GDT块位于 40963-41218
      Block bitmap at 264 (bg #0 + 263), Inode bitmap at 280 (bg #0 + 279)
      Inode表位于 296-296 (bg #0 + 295)
      7934 free blocks, 8 free inodes, 0 directories, 8个未使用的inodes
      可用块数: 41219-49152
      可用inode数: 41-48
    Group 6: (Blocks 49153-50175) [INODE_UNINIT]
      Checksum 0x9a99, unused inodes 8
      Block bitmap at 265 (bg #0 + 264), Inode bitmap at 281 (bg #0 + 280)
      Inode表位于 297-297 (bg #0 + 296)
      1023 free blocks, 8 free inodes, 0 directories, 8个未使用的inodes
      可用块数: 49153-50175
      可用inode数: 49-56
    
    • 该分区存在7个块分组,由于每个块分组中都要存在inode
    • 故每个组至少一个block保存inode
    • 而block设置大小为1024,inode大小为128,故每个block可保存1024/128=8个inode
    • 七个分组,故总共8*7=56个inode

验证

  • 格式化分区
    [root@k8s-master mount]#  mkfs.ext4 /dev/sdb1 -b  2048 -N 1
    mke2fs 1.42.9 (28-Dec-2013)
    文件系统标签=
    OS type: Linux
    块大小=2048 (log=1)
    分块大小=2048 (log=1)
    Stride=0 blocks, Stripe width=0 blocks
    32 inodes, 25088 blocks
    1254 blocks (5.00%) reserved for the super user
    第一个数据块=0
    Maximum filesystem blocks=25690112
    2 block groups
    16384 blocks per group, 16384 fragments per group
    16 inodes per group
    Superblock backups stored on blocks:
        16384
    
    Allocating group tables: 完成
    正在写入inode表: 完成
    Creating journal (1024 blocks): 完成
    Writing superblocks and filesystem accounting information: 完成
    
    • 通过上述输出发现存在group 2个,每个block大小为2048
    • 故inode数量应为2048/128*2=32符合上述inodes数量

mkfs.ext4分区时指定block块大小与小文件大小不一致

问题描述

格式化分区时,指定block大小为1024时,发现目录及小文件占用空间为2个block即2048

操作

  • 格式化
mkfs.ext4 /dev/sdb1 -b  1024 -N 1
  • block大小为1024
[root@k8s-master data1]# tune2fs -l /dev/sdb1 |grep Block
Block count:              50176
Block size:               1024
Blocks per group:         8192
  • 挂载
mount /dev/sdb1 data1
  • 发现空文件和文件夹的大小为2048为block大小的2倍
[root@k8s-master data1]# mkdir d1
[root@k8s-master data1]# du -sh *
2.0K	a.txt
2.0K	d1
  • 如果block大小为2048,则空文件及文件夹大小为4k,如果block大小为4096,则空文件及文件夹大小为8k,即永远是block大小的两倍

分析

  • 在另一服务器b中查看文件夹及目录大小为4k,并且该节点的block大小为4096
[root@centos75_100-57 temp]# du -sh a.txt
4.0K	a.txt
[root@centos75_100-57 temp]# tune2fs -l /dev/sdb1 |grep Block
Block count:              52428544
Block size:               4096
Blocks per group:         32768
  • 经查询资料发现问题在于inode size;当inode size为128时,目录及小文件会占用两个block,而当inode size为256时,目录及小文件会占用一个block
  • 原因为系统启用SELinux时,128个bytes的inode不足以存储SELinux XATTR,所以需要一个单独的data block来存储这些SELinux XATTR

验证

  • 格式化分区并设置inode大小为256
mkfs.ext4 /dev/sdb1 -I 256
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
12544 inodes, 50176 blocks
2508 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
7 block groups
8192 blocks per group, 8192 fragments per group
1792 inodes per group
Superblock backups stored on blocks:
	8193, 24577, 40961

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

  • 挂载
mount /dev/sdb1 /data1

  • 新建空目录,并查看大小,为一个block 大小
[root@k8s-master data1]# du -sh temp/
1.0K	temp/
  • 关闭sellinux功能
vi /etc/selinux/config 
SELINUX=disabled
  • 重启虚机
  • 重新格式化inode大小为128,并挂载磁盘
umount /dev/sdb1
mkfs.ext4 /dev/sdb1
  • 发现文件及目录大小已为block大小
[root@k8s-master data1]# ls -Z .
-rw-r--r-- root root ?                                a.txt
drwxr-xr-x root root ?                                d1
drwx------ root root ?                                lost+found
[root@k8s-master data1]# du -sh *
1.0K	a.txt
1.0K	d1
12K	lost+found

参考