1 删除文件的原理
文件删除:需要具备以下两个条件同时具备才生效
1 受文件的硬连接控制,有一个硬连接i_link+1,减少一个硬连接,i_link-1,当i_link=0时,文件就被删了
列:创建文件i_link=1,为这个文件创建一个硬连接,i_link=2,删除一个硬连接,i_link-1,删除源文件i_link=0了
2 受进程占用控制,当有进程使用这个文件时,有一个进程占用这个文件i_count+1,即i_count=1。当减少一个进程占用i_count-1,即i_count=0,当没有进程调用时i_count=0.
当i_link=0并且i_count=0的时候,文件才会被真正的删除。
有程序在用文件的时候i_count + 1.
查看被删除但仍由进程占用的文件名
[root@test1 shell]# rm -rf aa/
[root@test1 shell]# lsof | grep del
bash 25710 root cwd DIR 253,0 0 2623611 /hexudong/shell/aa (deleted)
[root@test1 shell]#
Inode小结
1磁盘分区格式化ext4文件胡会产生一定数量的inode和block
2 inode是索引节点,作用是存放文件的属性信息以及作为文件的索引
3 ext3/ext4文件系统的block存放的是文件的实际内容
4 inode是一块存储空间,c6非启动分区inode默认大小256,c5是128字节
5inode 是一串数字,不同的文件对应inode(一串数字)在文件系统里是唯一的
6 inode 相同的文件,互为硬连接文件
7一个文件被创建后至少占用一个inode和一个block
8 block的大小一般有1k,2k,4K 几种。其中引导分区等为1K,其他普通分区去4K(c6)
9 如果一个文件很大,可能占多个block,如果文件很小,至少占一个。并且剩余空间浪费了。
10 inode大小和总量查看
dumpe2fs /dev/sda3|egrep -i "block size|Inode size"
dumpe2fs /dev/sda1 | egrep -i "block count|lnode count"
11 查看inode的总量和使用量命令df –i
12 如何生成及制定inode大小mkfs.ext4 –b 2048 –l 256 /dev/sdb
block小结
1)磁盘读取数据是按block为单位读取的。
2)一个文件可能占用多个block。每读取一个block就会消耗一次磁盘i/o
3) 如果要提升磁盘IIO,那么就要尽可能一次性读取数据尽量多
4)一个block只能存放一个文件的内容,无论内容有多小,如果block 4K,那存放1K文件,剩余3K就浪费了。
5)block并非越大越好。Block太大对于小文件存放就会浪费磁盘空间,例如:1000K文件,BLOCK为4K,占用250个block,block为1K,占用1000个BLOCK。访问效率谁更高?消耗IO分别为250次和1000次
6:)大文件(大于16K)一般设置BLOCK大一点,小文件(小于1K)一般设置BLOCK小点
7)block太大例如4K,文件都是0.1K的,大量浪费磁盘空间
8)block的设置也是格式化分区的时候,mkfs.ext4 –b 2048 –l 256 /dev/sdb
9) 文件较大时,block设置大一些会提升磁盘访问效率,ext3/ext4一般设置为4K。
原文地址:http://7179867.blog.51cto.com/7169867/1627960