inode

How to obtain a pathname or dentry or struct file from a given inode?

一曲冷凌霜 提交于 2019-12-01 23:18:09
问题 I need to know how to obtain a pathname or dentry or struct file from a given inode. I was using file_open to obtain struct file from a pathname but but always gave kernel panic. I need a way to compare an inode from my list of inodes with a inode from a pathname or compare all inodes in the disk to find corresponding pathnames, and then compare with my list of inodes. 回答1: This sample code will work well in Linux kernel version 2.6.xx struct dentry *sample_dentry = NULL; struct inode *tmp

How to obtain a pathname or dentry or struct file from a given inode?

人盡茶涼 提交于 2019-12-01 21:23:51
I need to know how to obtain a pathname or dentry or struct file from a given inode. I was using file_open to obtain struct file from a pathname but but always gave kernel panic. I need a way to compare an inode from my list of inodes with a inode from a pathname or compare all inodes in the disk to find corresponding pathnames, and then compare with my list of inodes. This sample code will work well in Linux kernel version 2.6.xx struct dentry *sample_dentry = NULL; struct inode *tmp_inode = &inode_need_to_get; struct list_head *tmp_list = NULL; list_for_each(tmp_list, &(tmp_inode->i_dentry))

Best approach to detecting a move or rename to a file in Linux?

限于喜欢 提交于 2019-12-01 21:19:58
Some solution could probably be applicable to Windows, however I am not familiar with the Windows OS, so this will be Linux focused. As far as I understand, Unix file system all have the concept of inodes, which is where the file system metadata and the "file" is stored. Thus I am wondering if it is possible to use the inode number with some additional information to track files that are renamed or moved around? What I was proposing to do was have an initial scan that would create a database of filename/path, their disk/drive that it is located on, their inode number, and finally some sort of

linux inode节点数报警处理

好久不见. 提交于 2019-12-01 18:39:56
1.问题描述 zabbix 收到一台服务器的 Free inodes is less than 20% on volume / 报警 登陆服务器查看 产生原因:一般就是小文件比较多,占用大量的inode节点,如果inode占满,也会报 “no space left on device” 2.问题解决 一般不是自己程序建立的文件比较多时,都是/var/spool/postfix/maildrop目录下文件比较多 如果直接ls -l 会直接卡死 用 find /var/spool/postfix/maildrop -type f -mtime +30 | xargs rm -rf 这样直接删除这个目录下30天前的文件 如何查找那个目录下文件最多 首先切到根目录 / cd / 然后执行 for i in /*; do echo $i; find $i | wc -l; done 或者 for i in `ls -1A | grep -v "\.\./" | grep -v "\./"`; do echo "`find $i | sort -u | wc -l` $i"; done | sort -rn | head -10 这样会依次返回/目录下文件最多的目录,进入这个目录,再执行上述命令,就这样层层深入最终确定是那个目录文件最多 扩展: 解决inode爆满问题

LDD3阅读笔记-字符设备驱动

久未见 提交于 2019-12-01 17:22:34
#主要开发流程介绍 module_init宏和module_exit宏 当模块装载时需要调用module_init宏指定的函数,卸载时需要调用 module_exit宏指定的函数 以下是简单的init流程: 初始化设备 初始化file_operation 获取字符设备号 注册字符设备 当卸载模块时,需要释放申请的设备号。 #主设备号和次设备号 对字符设备的访问是通过文件系统内的设备名称进行的。那些名称被称为特殊 文件、设备文件,或者简单称为文件系统树的节点,他们通常位于/dev目录。 通常而言,主设备号表示设备对应的驱动程序。例如,/dev/null和/dev/zero 由驱动程序1管理,而虚拟控制台和串口终端由驱动程序4管理。 现代的Linux内核允许多个驱动程序共享主设备号,但我们看到的仍然按照”一 个主设备号对应一个驱动程序“的原则组织。 /proc/devices 可以查看注册的主设备号; /proc/modules 可以查看正在使用模块的进程数 #设备编号的内部表达 在内核中dev_t类型(在linux/types.h中定义)用来保存设备编号——包括主 设备号和次设备号。我们的代码不应该对设备编号的组织做任何假定,而应该始终 使用linux/kdev_t.h中定义的宏。 MAJOR(dev_t dev); MINOR(dev_t dev); 相反

硬盘分区及Linux文件系统

左心房为你撑大大i 提交于 2019-12-01 16:40:05
1. 硬盘物理结构 硬盘物理上主要分为: 盘片 磁道 扇区 机械臂 磁头 主轴 磁道: 当硬盘盘片旋转时,磁头若固定在一个位置上,则磁头会在盘片表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。以盘片中心为圆心,由此可以划分出很多磁道来, 这些磁道用肉眼是根本看不到的,因为它们仅 是盘面上以特殊方式磁化了的一些磁化区,硬盘上的信息便是沿着这样的轨道存放的, 盘片上的磁道由外向内依次从“0”开始进行编号。 柱面: 由于硬盘可以由很多盘片组成,不同盘片的相同磁道就组成了柱面(cylinder),如第一个图片。 磁头: 假设有N个盘片组成的硬盘,那么有2N个盘面(一个盘片有2面),那么磁头也就有2N个,即每个盘面有一个磁头。 扇区: 早期的硬盘盘片的盘面以圆心开始向外放射状将磁道分割成等分的弧段,这些弧段便是硬盘的扇区。每个扇区一般规定大小为512byte,这里大家应该比较疑惑,外圈周长很明显比内圈要长,怎么可能每个扇区都是512byte?其实答案早期硬盘外圈存储比内圈存储密度低一些,所以外圈很长但是仍然只能存储512byte,因此如果我们知道了柱面数(磁道数) Cylinders、磁头数Heads、扇区数Sectors,基本上硬盘的容量我们能够计算出来 硬盘总容量= Cylinders * Heads * Sectors * 512byte。但是由于早期硬盘外圈密度低,导致盘片利用率不高

文件系统

六眼飞鱼酱① 提交于 2019-12-01 13:28:43
为什么分区后还要进行格式化呢 ? 所谓的分区就是指定分区的起始柱面和结尾柱面,将将分区的信息记录到磁盘的第个扇区当中,也就是说分区只是指定了某个分区在磁盘上可以使用哪些区域而已。系统想要将数据存放在分区当中,需要按照一定的格式,因为只有按照一定的格式存放,我们在读取的时候才方便,这就像书架一样,我们按照书架上的格子对书进行拿取是比较方便的,如果没有书架,我们把很多书都扔到空箱子里面,这样在拿取的时候很不方便,所以最好按照一定的方式进行拿取。 至于格式化成什么文件系统,这取决于系统,系统支持什么的文件系统我们就格式化成什么样文件系统。至于买什么样的书架,这取决于我们自己,我们喜欢什么样的就格式化成什么样的。 过去的时候一个分区也就对应一个文件系统,但是现在就不一样了,比如LVM(逻辑卷管理器),可以实现将多个分区整合成一个分区(卷组),在这一个分区上再划分子分区(逻辑卷),然后每一个子分区(逻辑卷)对应一个文件系统,这样就实现了一个分区对应多个不同的文件系统。 文件系统由三部分构成 : 超级块:记录文件系统的整体信息,包括inote/block的总量、使用量、剩余量等。 Inode区域:inote区域就由inode块组成的区域,每个文件都会占用一个inode块,inote块当中记录了此文件的元数据和blcok号码。 Block区域

logrotate

天涯浪子 提交于 2019-12-01 08:44:49
手动执行logrote 测试命令 logrotate -d debug 调试 -f force 强制执行, 跟想要执行的 日志轮询的 单独配置文件 配置文件 ,参数 create 和  copytruncate 的区别: 总的说 就是 create = mv + cerate , copytruncate = cp + echo > log file 详情如下: 1)create: 这也就是默认的方案,可以通过 create 命令配置文件的权限和属组设置;这个方案的思路是重命名原日志文件,创建新的日志文件。详细步骤如下: 重命名正在输出日志文件,因为重命名只修改目录以及文件的名称,而进程操作文件使用的是 inode,所以并不影响原程序继续输出日志。 创建新的日志文件,文件名和原日志文件一样,注意,此时只是文件名称一样,而 inode 编号不同,原程序输出的日志还是往原日志文件输出。 最后通过某些方式通知程序,重新打开日志文件;由于重新打开日志文件会用到文件路径而非 inode 编号,所以打开的是新的日志文件。 如上也就是 logrotate 的默认操作方式,也就是 mv+create 执行完之后,通知应用重新在新文件写入即可。mv+create 成本都比较低,几乎是原子操作,如果应用支持重新打开日志文件,如 syslog, nginx, mysql 等,那么这是最好的方式。 不过

how to get the filename along with absolute path to the file, whenever a new file is created using inode in linux?

妖精的绣舞 提交于 2019-12-01 06:01:15
问题 I doing some experiments with my linux OS (CentOS) and I want to track all the tool logs created under the same environment, tool generates the respective logs (.log extn) for tracking these changes I wrote a perl watcher which actually monitoring the directory that I set and when the new file is created it will show at the output but This is consuming a lot of memory and CPU utilization as i have set 2sec as the sleep period. My QUESTION "Is there any better of way doing this ?" I thought of

Linux下搜索文件、文件名后缀

不想你离开。 提交于 2019-12-01 03:26:12
Linux下搜索文件 Linux系统是由文件组成的,所以搜索文件的功能也十分强大。 which查找命令可执行文件的绝对路径 1、which xx查看命令路径 用#which查看#rm命令可见,rm命令实际上是alias命令设置的带有-i选项的别名,#rm的绝对路径是/usr/bin/rm。 如果没有加选项,命令和绝对路径效果是一样的。 命令其实就是绝对路径的可执行文件,不过是命令加上了一些选项(可执行文件执行时会执行的一些参数)。想要执行命令,就要找到命令在什么路径,而系统会在环境变量的几个目录中寻找有没有输入的命令; 2、which查找的原理 which查找的原理是查环境变量中的文件是否有所查找的命令; 随便输入一个没有的命令,因为环境变量的路径中没有找到这个命令,所以会显示未找到命令; 我们把/usr/bin/ls文件复制一份到/tmp/ls2,然后执行/tmp/ls2,结果和/usr/bin/ls效果一样,但是如果我们直接用ls2命令,会告诉我们没有找到命令,用which查看会显示 /usr/bin/which: no ls2 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) 意思是/usr/bin/which查询结果是在 (/usr/local/sbin:/usr/local/bin:/usr