有时候系统提示磁盘提示满了,不能写入数据,然后查看时候发现空间还有很多,原因可能是因为磁盘的inode满了。inode是什么呢?
文件的数据分为元数据(metadata)和数据(data)两类。元数据用来储存文件的属性,就放在inode中,inode为‘index node’的缩写,意思为索引节点,用stat命令可以查看一个文件的inode:
[root ~]#stat anaconda-ks.cfg
File: "anaconda-ks.cfg"
Size: 1342 Blocks: 8 IO Block: 4096 普通文件
Device: 802h/2050d Inode: 3014665 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-16 19:12:09.498999452 +0800
Modify: 2017-05-16 19:12:10.254999454 +0800
Change: 2017-05-16 19:12:16.394999445 +0800
其中各个选项表达的意思
- size:文件大小
- Blocks:几个扇区组成一个块
- IO Block:一个块的大小,单位为字节
- Device:
- Inode:文件节点号
- Links:有几个硬链接
- 第一个Access: 用户权限 用户ID 用户组ID
- 第二个Access:文件最后一次访问时间
- Modify:文件最后一次修改时间
- Change:文件属性最后一次修改时间
文件在存取的时候,是有三个步骤的:
- 1、根据文件名里的对应关系,找到文件对应的Inode number
- 2、通过节点号读取到文件的Inode table
- 3、再根据Inode table中的指针读取到相应的Blocks
所以,有时候磁盘还有空间,但是inode满了的情况下,系统也会提示磁盘空间已满,查看inode使用情况可以使用df -i选项:
[root app]#
[root app]#df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 6406144 71647 6334497 2% /
tmpfs 125514 1 125513 1% /dev/shm
/dev/sda3 3203072 41 3203031 1% /app
/dev/sda1 64000 38 63962 1% /boot
/dev/sr0 0 0 0 - /mnt
硬链接和软链接
硬链接就是在目录文件中创建一个新的名字,节点号和原文件的节点号相同,所以也会指向同一个Inode table,所以最后找到的数据其实也就是相同的数据了。
软链接是一个文件,他包含了另一个文件的路径名,而不是指向的原文件的inode tables,所以他依赖原文件,当原文件路径发生变化时,软链接就会失效。
cp,mv和rm
cp的过程为分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件。
rm是删除目录中的文件名和对应的节点号,删除节点表,不删除数据,而是将数据标记为空闲,有别的数据写入时才会覆盖。
mv分为两种情况
如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项并删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!如果目标和源在一个不同的文件系统, mv相当于cp和rm