• inode与block的关系及相关企业问题


    一、inode和block的联系

    索引节点(Index node,Inode)在每个Linux存储设备(磁盘或硬盘)或存储设备的分区(此时的存储设备可以是硬盘、软盘、U盘,等等)中被格式化为ext系列文件系统之后,都会生成两部分内容:第一部分是Inode(默认大小为128或256字节),第二部分是Block(默认大小为1~4KB)。由于磁盘或分区一般都比较大,因此,Inode和Block都会存在很多个,并且都可以存放数据信息。

    Inode本质上是一小块具备唯一数字编号的存储空间,主要用来存放文件(目录)属性(例如ls-l的结果)的数据信息,注意,Inode里面唯独不包含文件名本身(文件名不算文件的属性)。 Block称为磁盘块,是用来存放实际数据的实体单元(ext文件系统一般最大为4KB),即用来存放真正的数据,例如,照片、视频等普通文件数据,单个的大文件需要占用多个Block块来存储,特别小的单个文件如果不能占满整个Block块,那么剩余的空间也无法再利用。 Inode存储的属性信息(即ls-l的结果),包括但不限于文件大小、属主(用户)、归属的用户组、文件权限、文件类型,“修改”时间等,还包含指向文件的实体指针等(Block的位置,即Inode节点与Block的对应关系)。

    例如:

    把硬盘比做一本书,书的每一页就是一个block,书的每一页的内容就是block里面的数据,同时书的每一页的大小是一样的(同一个硬盘分区的block的大小是一样的);书的目录页就是inode,记录了书的每一页知识点(文件/目录的属性)。

    Inode除了要记录文件属性的信息之外,还会为每个文件进行信息索引,所以就有了Inode的数值。操作系统根据指令,即可通过Inode的值最快速地找到相对应的文件实体。

    二、inode和block的特点

    1.Inode的特点

    总体来说,Inode具有如下一些特点。
    1、ext3/ext4文件系统(CentOS 5.x/6.x默认的文件系统)下,一个非空文件至少要占用一个Inode(有且只有一个)和一个Block(可以有多个)。
    2、Inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口。
    3、Inode在某一个文件系统(分区)内是唯一的。

    2.Block的特点

    Block的特点具体如下。
    1、磁盘读取数据是以Block为单位进行读取的。
    2、每读取一个Block就会消耗一次磁盘I/O(input/output,磁盘读写)。
    3、若文件比较大,那么一个文件可能占用多个Block。
    4、若文件比较小,那么一个Block的剩余空间会被浪费,无论内容有多小。

    三、查看inode和block

    查看文件系统Inode总量以及剩余量的命令如下:

    [root@node1 /]# df -i
    Filesystem     Inodes IUsed  IFree IUse% Mounted on
    /dev/sda3      479552 56299 423253   12% /
    tmpfs          127032     1 127031    1% /dev/shm
    /dev/sda1       51200    38  51162    1% /boot

    查看磁盘的使用量相当于是查看Block的情况,示例命令如下:

    [root@node1 data]# df –h  #Block是存放数据的位置,数据实体
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3       9.2G  1.6G  7.2G  19% /
    tmpfs           937M     0  937M   0% /dev/shm
    /dev/sda1       194M   34M  151M  19% /boot
    /dev/sdb         99M  5.6M   89M   6% /mnt

    通过“ls-i”或者“stat文件名”命令可以查看文件的Inode数值。

    [root@node1 ~]# ls -i /etc/hosts
    33586486 /etc/hosts
    
    [root@node1 ~]# stat /etc/hosts
      File: ‘/etc/hosts’
      Size: 158           Blocks: 8          IO Block: 4096   regular file
    Device: 803h/2051d    Inode: 33586486    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2020-09-24 22:32:25.297273504 +0800
    Modify: 2013-06-07 22:31:32.000000000 +0800
    Change: 2020-07-26 13:32:55.213170757 +0800
     Birth: -

    通过dumpe2fs /dev/sda1命令可以查看分区的Inode和Block的单位大小及各种相关信息。

    注意:dumpe2fs只能查看ext类型的文件系统。

    [root@node1 ~]# dumpe2fs /dev/sdb1
    dumpe2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   <none>
    Last mounted on:          <not available>
    Filesystem UUID:          91e41148-30bd-4889-bc45-57a1b978e40a
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file 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:              65536
    Block count:              261888
    Reserved block count:     13094
    Free blocks:              253029
    Free inodes:              65525
    First block:              0
    Block size:               4096
    Fragment size:            4096
    Group descriptor size:    64
    Reserved GDT blocks:      127
    Blocks per group:         32768
    Fragments per group:      32768
    Inodes per group:         8192
    Inode blocks per group:   512
    Flex block group size:    16
    Filesystem created:       Thu Sep 24 15:23:05 2020
    Last mount time:          Thu Sep 24 15:23:23 2020
    Last write time:          Thu Sep 24 15:23:23 2020
    Mount count:              1
    Maximum mount count:      -1
    Last checked:             Thu Sep 24 15:23:05 2020
    Check interval:           0 (<none>)
    Lifetime writes:          17 MB
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:              256
    Required extra isize:     28
    Desired extra isize:      28
    Journal inode:            8
    Default directory hash:   half_md4
    Directory Hash Seed:      ee0db236-1990-4426-a0e6-e43c56727152
    Journal backup:           inode blocks
    Journal features:         journal_64bit
    Journal size:             16M
    Journal length:           4096
    Journal sequence:         0x00000002
    Journal start:            1
    
    
    Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
      Checksum 0xf711, unused inodes 8181
      Primary superblock at 0, Group descriptors at 1-1
      Reserved GDT blocks at 2-128
      Block bitmap at 129 (+129), Inode bitmap at 145 (+145)
      Inode table at 161-672 (+161)
      28521 free blocks, 8181 free inodes, 2 directories, 8181 unused inodes
      Free blocks: 142-144, 153-160, 4258-32767
      Free inodes: 12-8192
    Group 1: (Blocks 32768-65535) [INODE_UNINIT, ITABLE_ZEROED]
      Checksum 0x107d, unused inodes 8192
      Backup superblock at 32768, Group descriptors at 32769-32769
      Reserved GDT blocks at 32770-32896
      Block bitmap at 130 (bg #0 + 130), Inode bitmap at 146 (bg #0 + 146)
      Inode table at 673-1184 (bg #0 + 673)
      32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 32897-65535
      Free inodes: 8193-16384
    Group 2: (Blocks 65536-98303) [INODE_UNINIT, ITABLE_ZEROED]
      Checksum 0x2ca4, unused inodes 8192
      Block bitmap at 131 (bg #0 + 131), Inode bitmap at 147 (bg #0 + 147)
      Inode table at 1185-1696 (bg #0 + 1185)
      28672 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 69632-98303
      Free inodes: 16385-24576
    Group 3: (Blocks 98304-131071) [INODE_UNINIT, ITABLE_ZEROED]
      Checksum 0x48b3, unused inodes 8192
      Backup superblock at 98304, Group descriptors at 98305-98305
      Reserved GDT blocks at 98306-98432
      Block bitmap at 132 (bg #0 + 132), Inode bitmap at 148 (bg #0 + 148)
      Inode table at 1697-2208 (bg #0 + 1697)
      32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 98433-131071
      Free inodes: 24577-32768
    Group 4: (Blocks 131072-163839) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
      Checksum 0x40f3, unused inodes 8192
      Block bitmap at 133 (bg #0 + 133), Inode bitmap at 149 (bg #0 + 149)
      Inode table at 2209-2720 (bg #0 + 2209)
      32768 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 131072-163839
      Free inodes: 32769-40960
    Group 5: (Blocks 163840-196607) [INODE_UNINIT, ITABLE_ZEROED]
      Checksum 0x69fe, unused inodes 8192
      Backup superblock at 163840, Group descriptors at 163841-163841
      Reserved GDT blocks at 163842-163968
      Block bitmap at 134 (bg #0 + 134), Inode bitmap at 150 (bg #0 + 150)
      Inode table at 2721-3232 (bg #0 + 2721)
      32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 163969-196607
      Free inodes: 40961-49152
    Group 6: (Blocks 196608-229375) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
      Checksum 0xdc33, unused inodes 8192
      Block bitmap at 135 (bg #0 + 135), Inode bitmap at 151 (bg #0 + 151)
      Inode table at 3233-3744 (bg #0 + 3233)
      32768 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 196608-229375
      Free inodes: 49153-57344
    Group 7: (Blocks 229376-261887) [INODE_UNINIT, ITABLE_ZEROED]
      Checksum 0x1403, unused inodes 8192
      Backup superblock at 229376, Group descriptors at 229377-229377
      Reserved GDT blocks at 229378-229504
      Block bitmap at 136 (bg #0 + 136), Inode bitmap at 152 (bg #0 + 152)
      Inode table at 3745-4256 (bg #0 + 3745)
      32383 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
      Free blocks: 229505-261887
      Free inodes: 57345-65536

    四、磁盘空间不足导致企业故障的案例

    1、出现No space left on device问题的企业案例

    把/dev/sdb1挂载到/data目录下,/dev/sdb1 =1G

    mkdir /data
    mount /dev/sdb1 /data

    情况一:inode满了

    [root@node1 data]# df -i
    Filesystem       Inodes IUsed    IFree IUse% Mounted on
    /dev/sda3      50075136 60574 50014562    1% /
    devtmpfs         121762   370   121392    1% /dev
    tmpfs            124487     1   124486    1% /dev/shm
    tmpfs            124487   691   123796    1% /run
    tmpfs            124487    16   124471    1% /sys/fs/cgroup
    /dev/sda1        256000   326   255674    1% /boot
    tmpfs            124487     1   124486    1% /run/user/0
    /dev/sdb1         65536    11    65525    1% /data

    创建大量的小文件

    [root@node1 data]# for i in $(echo {1..1000000});do touch ${i}.log;done
    touch; cannot touch '856200.log': No space left on device
    [root@node1 ~]# df -i
    Filesystem       Inodes IUsed    IFree IUse% Mounted on
    /dev/sda3      50075136 60574 50014562    1% /
    devtmpfs         121762   370   121392    1% /dev
    tmpfs            124487     1   124486    1% /dev/shm
    tmpfs            124487   701   123786    1% /run
    tmpfs            124487    16   124471    1% /sys/fs/cgroup
    /dev/sda1        256000   326   255674    1% /boot
    tmpfs            124487     1   124486    1% /run/user/0
    /dev/sdb1         65536 65154      382  100% /data #<===inode已经满了

    处理方案:

    删除文件

    [root@node1 data]# rm -f *.log
    [root@node1 data]# ls
    lost+found
    [root@node1 data]# df -i
    Filesystem       Inodes IUsed    IFree IUse% Mounted on
    /dev/sda3      50075136 60574 50014562    1% /
    devtmpfs         121762   370   121392    1% /dev
    tmpfs            124487     1   124486    1% /dev/shm
    tmpfs            124487   691   123796    1% /run
    tmpfs            124487    16   124471    1% /sys/fs/cgroup
    /dev/sda1        256000   326   255674    1% /boot
    tmpfs            124487     1   124486    1% /run/user/0
    /dev/sdb1         65536    11    65525    1% /data #<===inode恢复

    情况二:block满了

    [root@node1 data]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        96G  2.0G   94G   3% /
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.6M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda1       497M  120M  378M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sdb1       991M  2.6M  922M   1% /data

    创建一个大的文件来占满/data空间

    [root@node1 data]# dd if=/dev/zero of=/data/test.log count=1 bs=1024000000
    dd: error writing ‘/data/test.log’: No space left on device
    1+0 records in
    0+0 records out
    1017675776 bytes (1.0 GB) copied, 71.3958 s, 14.3 MB/s
    [root@node1 data]# ll -h
    total 971M
    drwx------ 2 root root  16K Sep 24 15:23 lost+found
    -rw-r--r-- 1 root root 971M Sep 24 15:38 test.log
    
    [root@node1 data]# dd if=/dev/zero of=/data/test2.log count=1 bs=1024000000
    dd: error writing ‘/data/test.log’: No space left on device
    1+0 records in
    0+0 records out
    1017675776 bytes (1.0 GB) copied, 42.3178 s, 24.0 MB/s
    [root@node1 ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        96G  2.0G   94G   3% /
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.6M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda1       497M  120M  378M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sdb1       991M  975M     0 100% /data

    处理方案:

    删除大文件即可

    2、提示空间快满,使用rm删除了很大的无用文件后,df仍然看到空间不足,为什么?如何解决

    创建一个大文件/data/test.log,使用vim打开

    [root@node1 data]# dd if=/dev/zero of=/data/test2.log count=1 bs=1024000000
    dd: error writing ‘/data/test2.log’: No space left on device
    1+0 records in
    0+0 records out
    1000202240 bytes (1.0 GB) copied, 42.1879 s, 23.7 MB/s
    [root@node1 data]# vim test.log

    另外开启一个ssh窗口删除/data/test.log

    [root@node1 data]# rm -f /data/test.log
    [root@node1 data]# ll
    total 16
    drwx------ 2 root root 16384 Sep 24 15:23 lost+found
    -rw-r--r-- 1 root root     0 Sep 24 15:41 test2.log
    
    [root@node1 data]# rm -f /data/test.log
    [root@node1 data]# ls
    lost+found  test2.log
    
    [root@node1 data]# rm -f test.log 
    [root@node1 data]# ls
    lost+found
    [root@node1 data]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        96G  2.0G   94G   3% /
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.7M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda1       497M  120M  378M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sdb1       991M  975M     0 100% /data #<===/data任然是满的

    原因是:

    删除的大文件test.log被其它用户在使用,因此删除了test.log文件但还没有释放空间

    处理方案:

    #使用lsof命令来查看,可以发现/data/test.log虽然删除,但是还在被vim使用,并没有释放空间
    [root@node1 data]# lsof |grep delete
    vim       100146         root    3r      REG               8,17 1000202240         12 /data/test.log (deleted)
    #使用kill命令来杀掉该进程
    [root@node1 data]# lsof |grep delete
    vim       100146         root    3r      REG               8,17 1000202240         12 /data/test.log (deleted)
    [root@node1 data]# kill 100146
    [root@node1 data]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        96G  2.0G   94G   3% /
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.7M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda1       497M  120M  378M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sdb1       991M   22M  903M   3% /data #<===/data目录的空间已经被释放

    3、No space left on device问题的处理流程图

    I have a dream so I study hard!!!
  • 相关阅读:
    canvas 学习
    configure/autoconf/automake文件相关
    git add A 和 git add . 的区别详解
    Vim格Vim格式化代码功能——gg=G式化代码功能——gg=G
    详解git commit amend 用法
    git reset HEAD 与 git reset hard HEAD的区别 天地逍遥
    git的撤销操作:reset、checkout和revert
    参与linux社区
    git制作补丁
    git diff、git diff head、git diff cached三者详细区分
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13724713.html
Copyright © 2020-2023  润新知