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、访问文件的原理
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)软链接文件不仅可以针对文件,更可以针对目录(企业中常用)。
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