inode问题
今日碰到一个问题是,有机器磁盘快要满了,于是有人直接上去删除了一些日志文件,可删除后发现这些日志文件很多还是进程在读写中的。于是导致空间并没有释放。
这个用lsof或者直接去/proc/pid/fd/就可以容易的看到。
释放空间比较简单的方法是重启一下这个读写的进程,当然有些进程是提供重新打开日志文件的信号的(比如nginx的USR1信号),但是大部分进程其实都不支持。
但是我那个程序又不想重启,重启了又要重新开始扫描了。那就想把这个文件给恢复,同时又是对应的inode号。
首先我们很容易获得inode号
恢复文件其实很容易。我们直接cp就行
但是我们查看了一下,这样内容是对的,但是inode号是不一样的,/proc里也不认识这个文件,还是认为这个文件已经被删除了。
google了一下,发现有人2011年也问过一样的问题
https://superuser.com/questions/810208/can-a-file-be-created-from-an-inode
1 |
|
但是这样其实是不行的,因为/proc文件系统是一个启动后生成的独立文件系统。
看了下stackoverflow上的回答,发现是不行的。
https://stackoverflow.com/questions/5752822/how-do-i-create-a-file-with-a-specific-inode-number