深入浅出理解linux inode结构
一、inode是什么?
参考文档:http://tech.diannaodian.com/dw/lin/2012/0112/154629.html
做Android底层驱动或者嵌入式Linux的程序猿经常会遇到一个叫inode的结构体,该结构体非常的重要,但是也比较难懂,所以写一篇理解该inode结构的博客是非常的有必要,废话不多说,先看inode结构体的定义!
struct inode
索引节点对象由inode结构体表示,定义文件在linux/fs.h中。
struct inode {
struct hlist_node i_hash; 哈希表
struct list_head i_list; 索引节点链表
struct list_head i_dentry; 目录项链表
unsigned long i_ino; 节点号
atomic_t i_count; 引用记数
umode_t i_mode; 访问权限控制
unsigned int i_nlink; 硬链接数
uid_t i_uid; 使用者id
gid_t i_gid; 使用者id组
kdev_t i_rdev; 实设备标识符
loff_t i_size; 以字节为单位的文件大小
struct timespec i_atime; 最后访问时间
struct timespec i_mtime; 最后修改(modify)时间
struct timespec i_ctime; 最后改变(change)时间
unsigned int i_blkbits; 以位为单位的块大小
unsigned long i_blksize; 以字节为单位的块大小
unsigned long i_version; 版本号
unsigned long i_blocks; 文件的块数
unsigned short i_bytes; 使用的字节数
spinlock_t i_lock; 自旋锁
struct rw_semaphore i_alloc_sem; 索引节点信号量
struct inode_operations *i_op; 索引节点操作表
struct file_operations *i_fop; 默认的索引节点操作
struct super_block *i_sb; 相关的超级块
struct file_lock *i_flock; 文件锁链表
struct address_space *i_mapping; 相关的地址映射
struct address_space i_data; 设备地址映射
struct dquot *i_dquot[MAXQUOTAS];节点的磁盘限额
struct list_head i_devices; 块设备链表
struct pipe_inode_info *i_pipe; 管道信息
struct block_device *i_bdev; 块设备驱动
unsigned long i_dnotify_mask;目录通知掩码
struct dnotify_struct *i_dnotify; 目录通知
unsigned long i_state; 状态标志
unsigned long dirtied_when;首次修改时间
unsigned int i_flags; 文件系统标志
unsigned char i_sock; 套接字
atomic_t i_writecount; 写者记数
void *i_security; 安全模块
__u32 i_generation; 索引节点版本号
union {
void *generic_ip;文件特殊信息
} u;
};
理解inode,要从文件储存说起。
参考文档:http://blog.163.com/xujian900308@126/blog/static/12690761520119198237958/
table的大小就会达到128MB,占整块硬盘的12.8%。
使用ls -i命令,可以看到文件名对应的inode号码:
link)。
ln命令可以创建硬链接:
link)或者"符号链接(symbolic link)。
directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
九 实际问题
后来用df
-i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
最新文章
- 计蒜客_计数和数数(C语言实现)
- GUI生成exe文件
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
- MyEclipse去除网上复制下来的来代码带有的行号
- 5. repeater图片放大
- Java学习日记-4 StringBuffer类和数组
- hdu3368之DFS
- Centos7 安装mysql数据库
- Matrix (二维树状数组)
- Kconfig基本语法
- HDU - 2160 递推
- C语言实现万年历
- 【bzoj 3233】[Ahoi2013]找硬币 ——搜索
- linux学习:文件处理相关命令用法整理(正则表达式)
- [转] 谈谈JS中的函数节流
- OpenCV颜色空间——HLS颜色空间
- python列表list
- 20.Scrapy日常练手
- HTML BODY 背景图片
- sublime text 2 破解