1、inode 索引节点

什么是inode:

    inode是磁盘上一块存储空间,存储文件的属性信息
inode的作用:

    1、存储文件的属性信息
    
    2、指向文件真实的位置信息(指针)
inode的产生:

    inode是磁盘格式化,创建文件系统的时候产生的
    
    创建文件系统的时候就会生成inode和block

    元数据就要放在inode里

    真正数据就放在block里
inode的特点:

    1、文件的唯一标识

    2、大小256字节

    3、存放文件属性及指向文件所在的位置信息

    4、创建文件系统时分配inode

    5、一个文件有且只有一个inode

    6、多个文件有相同的inode,是同一个文件的不同文件名(硬链接文件)

2、block

什么是block:

    1、存放文件实体内容的空间

    2、默认大小1,2,4k
block特点:

    1、磁盘读取数据是按block为单位的

    2、每读取一个block就会消耗一次磁盘I/O

    3、若文件比较大,一个文件可能占用多个block

    4、若文件比较小,一个block的剩余空间会被浪费

3、访问文件的原理

文件属性 Archive 文件属性是什么意思_硬链接

4、No space left on device问题

4.1、inode满了

当磁盘存储大量小文件时,inode先满

查看inode是否满了
df -i

4.2、block满了

当磁盘存储大量大文件时,block先满

依次找出最大文件或目录
du -sh /*|grep G

5、链接

5.1、硬链接

什么是硬链接:

    1)具有【相同inode】的文件,互相称之为硬链接文件

    2)具有【相同inode】的文件,指向同一个block
硬链接文件作用:

    用于备份,防止误删文件
[root@test ~]# ls -lid . a/.. /root
33574977 dr-xr-x---. 3 root root 176 Oct 16 00:35 .
33574977 dr-xr-x---. 3 root root 176 Oct 16 00:35 a/..
33574977 dr-xr-x---. 3 root root 176 Oct 16 00:35 /root

/root的inode数量3个
/root的inode号是33574977
创建硬链接语法:

    ln 原始文件 目标文件(目标文件不能存在)

[root@test ~]# ls -ltri
33577286 -rw-r--r--. 1 root root    0 Oct 28 00:06 test

[root@test ~]# ln test test_hard_link

[root@test ~]# ls -ltri
33577286-rw-r--r--. 2 root root    0 Oct 28 00:06 test_hard_link
33577286-rw-r--r--. 2 root root    0 Oct 28 00:06 test

[root@test ~]# echo 111 > test

[root@test ~]# ls -ltri
33577286 -rw-r--r--. 2 root root    4 Oct 28 00:09 test_hard_link
33577286 -rw-r--r--. 2 root root    4 Oct 28 00:09 test

[root@test ~]# cat test_hard_link 
111
硬链接知识小结:

    1)具有相同inode的多个文件互为硬链接文件,本质是相同文件不同文件名

    2)删除硬链接文件或者删除源文件任意之一,文件实体并未被删除
       只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除

    3)待所有的硬链接文件及源文件被删除后
        a.存放新的数据会占用这个文件实体
        b.磁盘fsck检查(定时或人工)时,这个文件实体会被系统回收
        (养成删除及使用多套环境测试的好习惯)

    4)硬链接文件就是文件的另一个入口(相当于超市的前门、后门)

    5)可以通过给文件设置硬链接文件,来防止重要文件被误删

    6)通过执行命令“ln 源文件 硬链接文件(不存在)”,即可完成创建硬链接

    7)硬链接文件是普通文件,因此可以用rm命令删除

    8)创硬链接只能针对文件,不能针对目录

5.2、软链接

什么是软链接:

    软链接就是快捷方式,指向源文件的位置
工作中为什么会使用软链接。
第一个用途:
安装软件:/application/nginx-1.10
过半年:/application/nginx-1.20
导致一个问题,工作中,开发等引用/application/nginx-1.10路径。
安装软件:/application/nginx-1.10===>/application/nginx(让开发用)
过半年:  /application/nginx-1.20===>/application/nginx(让开发用)
#/application/nginx目录不要提前建立,创建软连接的时候自动创建
[root@weblogic]# cd /application
[root@weblogic]# ls -ltr
total 0
drwxr-xr-x 2 root root 24 Oct 14 23:59 nginx-1.1
[root@weblogic]# ln -s /application/nginx-1.1/ /application/nginx
[root@weblogic]# ls -ltr
total 0
drwxr-xr-x 2 root root 24 Oct 14 23:59 nginx-1.1
lrwxrwxrwx 1 root root 23 Oct 15 00:10 nginx -> /application/nginx-1.1/  
 
第二个用途:
/etc/对应的分区要满了,没法放很多文件,但是程序还想通过/etc/目录访问文件。
此时,我们可以把文件放入/opt/test下,然后做一个到/etc/test的软链接。
[root@]# mkdir /opt/test
[root@]# touch /opt/test/{1..3}.txt
[root@]# ln -s /opt/test/ /etc/test(test目录必须不存在)
[root@]# /data]# ls /etc/test
1.txt  2.txt  3.txt
[root@]# ll /opt/test
total 0
-rw-r--r--. 1 root root 0 Oct  4 22:02 1.txt
-rw-r--r--. 1 root root 0 Oct  4 22:02 2.txt
-rw-r--r--. 1 root root 0 Oct  4 22:02 3.txt
软链接知识小结

    1)软链接类似Windows的快捷方式(可以通过readlink查看其指向)。

    2)软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。

    3)删除源文件,软链接文件依然存在,但是无法访问指向源文件路径内容了。
       链接失效的时候一般是白字红底闪烁提示。

    4)执行命令“ln -s 源文件 软链接文件”,即可完成创建软链接(目标不能存在)。

    5)软链接和源文件是不同类型的文件,也是不同的文件,Inode号也不相同。

    6)软链接文件的文件类型为字母(l),可以用rm命令删除。

    7)软链接文件不仅可以针对文件,更可以针对目录(企业中常用)。

文件属性 Archive 文件属性是什么意思_硬链接_02

 

6、文件删除企业故障案例

6.1、环境准备

创建用户挂载的目录
[root@test ~]# mkdir -p /root/logs

创建指定大小的虚拟文件(模拟磁盘)
[root@test ~]# dd if=/dev/zero of=/dev/sdc bs=8K count=10
10+0 records in
10+0 records out
81920 bytes (82 kB) copied, 0.000430141 s, 190 MB/s

格式化
[root@test ~]# mkfs.ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is not a block special device.
Proceed anyway? (y,n) y
。。。。。。done

挂载
[root@test ~]# mount -o loop /dev/sdc /root/logs/

检查挂载情况
[root@test ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M   52K  475M   1% /dev
。。。。。。
/dev/loop0                73K   14K   54K  21% /root/logs

6.2、 创建文件,并用文件填满虚拟磁盘sdc

切到目录
[root@test ~]# cd /root/logs/

创建空文件
[root@test logs]# touch access.log

模拟进程持续调用文件
[root@test logs]# tail -f access.log

打开一个新窗口
[root@test ~]# cd /root/logs/

填满文件直到sdc虚拟磁盘满
for n in {1..1000};do cat /etc/passwd >> access.log;usleep 9000;done 
cat: write error: No space left on device

6.3、清理磁盘空间

[root@test logs]# rm -f access.log 
[root@test logs]# ls
lost+found

此时文件已删除,但是磁盘空间未释放
[root@test logs]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M   80K  475M   1% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  1.3G   16G   8% /
/dev/sda1               1014M  138M  877M  14% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/loop0                73K   72K     0 100% /root/logs

6.4、确认是否用进程在使用文件

查看access文件使用情况
[root@test logs]# lsof|grep access
tail  1623  root 。。。 /root/logs/access.log (deleted)

直接杀进程,完成磁盘释放
[root@test logs]# kill -9 1623
[root@test logs]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M   80K  475M   1% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  1.4G   16G   9% /
/dev/sda1               1014M  138M  877M  14% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/loop0                73K   14K   54K  21% /root/logs