linux文件系统
文件系统
Ext-Ext4,现在基本上公司用的是Ext3和Exit4
xfs 是Centos7所使用的文件系统
swap 用于交换分区的文件系统,当内存不够用的时候,交换分区可以暂时替代,大小一般是内存的2倍
inode,block,superblock的区别
inode是Linux/Unix文件系统的基础;
扇区(Sector) : 在硬盘中,他的最小存储单位是扇区(Sector),一个扇区可以存放512个字节;
块(block) : 连续多个扇区叫做块,他是文件存储的最小单位,大部分情况下,8个扇区代表一个块,可以存储4KB左右的文件,一个文件可能会占用多个块,但是一个块只能存放一种文件;
超级区块(superblock) : 就是用来记录整个文件系统的整体信息,如:inode和block的总量,使用量,剩余量等,想要查看用stat命令来查看;
在Linux系统中,可以把他简单分成inode table 和 data area ,inode存放在inode table中,每一个inode都存放着文件的元数据(metadata)
哪什么是inode呢,在我们将一个文件存放在block中时,还需要有一个区域来存放文件的metadata ,它包括文件被分成了几块,每一块的位置,大小,权限,文件拥有者,创建时间等。
那么这个区域就被成为inode,也叫索引节点。
inode
(1)概念
在块中用来存放元数据的区域称为inode
inode包含:文件被分成了几块,每一块的地址,创建时间,文件的拥有者,大小,权限等
在Linux中,识别文件不是靠文件名,而是靠索引节点
每个文件都有一个inode,因此有一种可能,你有10MB大小的硬盘,你每件一个文件都会消耗一个inode,当你的inode消耗完,你就无法在创建新的文件,只能给原有文件写入内容
可以使用ls -i来查看一下,前面的数字就是他的inode号码
(2)大小
inode是有大小的,通常是128或256字节,一般是1KB或2KB设置一个inode
如果一个硬盘1GB大小,inode占128字节,1KB设置一个inode,那么inode table大小就是128MB,站硬盘的12.8%
查看硬盘分区的inode的使用情况用df -i 命令
(3)inode编号
上面说过,每个文件都有一个inode,Linux中并不识别文件,要想查看一个文件就只能通过inode,因为他识别inode
inode包含:文件被分成了几块,每一块的地址,创建时间,文件的拥有者,大小,权限等
所以我们要查看一个文件内容,他并不是直接去找文件名
第一步:找到文件对应的inode号码,
第二步:通过inode号码找到inode
第三步:在inode中找到文件的存放的block,然后读取数据
(4)特殊用法
如果文件的名字有特殊符号我们无法删除,可以通过删除文件的inode号码来将其删除,因为一个文件有一个inode号码,
用法:find -inum inode号码 -delete
当你使用移动或重命名的命令后,并不会对inode进行改变,因为Linux系统不会识别文件名来识别文件
当打开文件后,系统识别文件只靠inode号码,不考虑文件名,所以我们可以在打开软件的时候完成文件的更新,因为系统靠inode识别文件,当我们要更新某个文件时,先创建一个原文件名的新文件设置一个新的inode,把更新后的文件放在新文件中,删掉原文件,重启后,系统会通过新的inode找到新的原名文件,旧的inode会被系统回收。
block
文件存储的最小单位
block大小可以自己设定
文件太大会占用多个块,读取效率降低
文件太小,block大,浪费,磁盘利用率低
superblock
就是用来记录整个文件系统的整体信息,如:inode和block的总量,使用量,剩余量等,想要查看用stat命令来查看;
查看的是/目录下的
inode号码用完导致文件无法创建
上面说过,当一个硬盘的用完,但是空间还有导致文件无法创建
例子:我们先挂载一个10MB大小的虚拟文件系统(tmfs)到/mnt目录下
/mnt就是用来让用户临时挂载别的文件系统
[root@localhost ~]# mount -t tmpfs none /mnt -o size=10M
可以看到,这个10M的tmpfs还没有填写内容,inode号码只使用了一个,还有124458个,我们现在将里面剩余的inode号码用完
可以看到,inode号码全部用完,但是文件内存显示还有10M,我们在创建一个文件试试
显示没有空间,内存明明还有,这就是inode爆满导致无法创建新文件但空间还有,我们尝试写入内容
可以写入,但无法创建新文件
解决办法
要么删掉这些文件,要么卸载/mnt
删除后,inode释放出来
硬链接与软连接
硬链接
一般情况下,一个文件对应一个inode号码,但是,Linux系统中,它允许多个文件名指向一个inode号码,也就可以通过不同的文件名访问同样的内容,修改文件内容会影响所有文件名,但是删除一个文件名不影响其他文件名访问,这就是硬链接
我创建了一个new1.txt的硬链接new2.txt,通过比较查看他俩之间没有区别
当我们给一个文件追加进内容后,另一个硬链接文件里也有
删除一个文件名后,另一个受影响
软链接
类似于windows系统桌面的快捷方式,通过快捷方式你可以查看文件内容,删除快捷方式,文件内容可以打开,但是删除文件内容,快捷方式就不能使用,这就是软连接原理
可以看到new3.txt指向new2.txt,new3.txt 就是new2.txt的快捷方式
可以通过new3.txt查看到new2.txt
可以发现,删掉new3.txt对new2.txt没有影响,但删掉new2.txt,new3.txt就无法查看到