inode

inode知识点总结

一次在生产环境中添加软链接,并将软链接删除,导致真实数据删除。还好测试环境有一份同样的数据。这样事告诉我:第一,在做删除操作前,一定先备份。第二:把软链接相关知识重新梳理

linux内核用数字管理文件系统,内存,进程等等,是为了方便,简洁,因为文件名称,进程名是很长很多很占字节。
就我知道的:

  • 进程通过pid来管理,进程名称是pid别名
  • 文件通过inode来管理,文件名称是inode的别名

Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

一、inode简介

文件存储在硬盘上,硬盘的最小存储单位叫做"扇区"(sector)。每个扇区存储512字节(0.5KB)。<br />
操作系统读取硬盘的时候,不会一个一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。<br />
文件数据都存储在"块"中,那很显然,我们还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为"索引节点"。

二、inode包含哪些信息

* 文件大小
* 文件的拥有者
* 文件的所属组
* 文件的读、写、执行权限
* 链接数,即有多少个文件名指向这个inode
* 文件的时间戳
	* ctime:指inode上一次变动的时间
	* mtime:指文件内容上一次变动的时间
	* atime:指文件上一次打开时间

三、inode的大小

inode也会消耗硬盘空间,所以硬盘格式的时候,操作系统会自动将硬盘分成两个区域。一个数据存储,另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数的总数,在格式化时就给定,一般是block size一个inode。假设这里有一块150G的硬盘,每个inode节点的大小为256字节(可通过inode size查看),每4096字节就设置一个inode,那么inode table的大小就会达到150/(4096/256)=9.375mb

四、硬链接

区别: 硬链接, 各个文件的内容都相同! 都是真正的file data! 彼此之间的地位是相同的, 没有依赖性, 删除一个, 不影响另一个!
硬链接的主要目的是: 为了防止对重要文件的"误删". 有些 : "类似" 复制备份, 但是不是复制 备份!

硬链接的特性:
* 不能对目录进行创建,只可对文件创建
* 文件有相同的inode及date block
* 只能对文件进行创建
* 不能交叉文件系统进行硬链接的创建,(区分方式:df -i --print type)
* 删除一个硬链接文件并不影响其他有相同inode号的文件

~]# ln A B   
B依赖于A,创建过后,在次查看A的link次数时,增加一个

五、软链接

除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

软链接的特性:
* 软链接有自己的文件属性及权限等
* 可对不存在的文件或目录创建软链接
* 软链接可对文件或目录创建
* 创建软链接时,链接计数link不会增加
* 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死链接 ,若被指向路径文件被重新创建,死链接可恢复为正常的软链接

~]# ln -s A B
B依赖于A

六、inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象:

  • 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  • 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。这使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

七、当出现硬盘inode用满时处理办法

首先定位哪个目录出现大量文件占用inode
~]# for i in /; do echo $i; find $i |wc -l|sort -nr; done  

解决方案:
1 根据业务需要,判断产生大量inode的文件是否重要,如果重要,备份,不重要则删除。
2 挂载一个新盘,并在格式化时,多分配些inode,也就是将inode size值设置小些,就会多些inode,并将盘挂载至生产大量inode的目录下。也直接将别的分区中的目录软链接至产生大量inode的目录下,来缓解inode不足的问题。

~]# df -hi

新增一块硬盘
~]# fdisk -l /dev/sdx
~]# mke2fs -N 1000000 -t ext4 /dev/sdx1
~]# mke2fs --help
Usage: mke2fs [-c|-l filename] [-b block-size] [-C cluster-size]
        [-i bytes-per-inode] [-I inode-size] [-J journal-options]
        [-G flex-group-size] [-N number-of-inodes]
        [-m reserved-blocks-percentage] [-o creator-os]
        [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
        [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
        [-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]
‘-i’ 设定inode的大小
‘-N’ 设定inode数量,有时使用默认的inode数不够用,所以要自定设定inode数量。
‘I’ 设定inode size 大小 

~]# vim /etc/fstab   //填写开机挂载
~]# mount			//挂载至指定目录

相关命令

dumpe2fs
用于打印“ext2/ext3/ext4”文件系统的超级块和快组信息。 以及相关的inode size,block size等相关信息

查看分区、文件或目录的inode:

~]# df -i --print-type
Filesystem     Type   Inodes  IUsed   IFree IUse% Mounted on
/dev/vda1      ext4  3276800 245250 3031550    8% /
tmpfs          tmpfs 1007669      1 1007668    1% /dev/shm
/dev/vdb1      ext3  9830400 294893 9535507    3% /clientdb

~]# ls -i 1.txt
67165374 1.txt

~]# stat 1.txt // display file or file system status
  File: ‘1.txt’
  Size: 8               Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 67165374    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-05-18 09:52:07.111983793 +0800
Modify: 2018-05-18 09:51:21.556984412 +0800
Change: 2018-05-18 09:51:21.556984412 +0800
 Birth: -

删除inode:

~]# find ./ -inum 83856174 | xargs rm    //删除inode为83856174的文件,如果不执行rm操作,就是将inode为83856174的文件或目录找出来

~]# find / -samefile filename	//查找相同inode的文件

~]# find ./ -inum 83856174 | xargs rm -rf //删除目录及目录下的文件

~]# find ./ -inum xxxxx -delete     //删除空目录
-inum n
File has inode number n.  It is normally easier to use the -samefile test instead.

posted @ 2018-05-19 10:11  dance_man  阅读(212)  评论(0编辑  收藏  举报