关于Linux文件系统的深入研究

本文发布时间: 2019-Mar-22
1.rm -rf 删除目录里的文件后,为什么可以恢复?首先创建一个空目录test,目录的block size为4096字节为了空目录还是4096?首先,目录的大小取决它所包含的文件的inode(访问时间,文件的字节数,uid和gid),4096的大小是在建立文件系统时规划的。可以使用dumpe2fs查看看到根分区的block size是默认4096下面继续,我们在新建的test目录里创建1000个文件for ((i=0; i<1000; i++)); do touch file$i; done由于创建了1000个新文件,所以test目录的block size也变大了,随即我们把test目录下的所有文件删除,再次查看test目录发现,目录里为空,但是目录本身的bock size仍然不变,这也就是我们“数据恢复”的原理:因为rm -rf只是删除了与文件描述信息的directory entry,但是 data blocks, inodes和meta data仍然存在磁盘里。可以使用stace查看我的想法,rm -rf过程中主要调用unlinkat()和fstatat64()两个system callfstatat()这个systemcall作用是get file status relative to a directory file descriptorunlinkat()这个systemcall作用是remove a directory entry relative to a directory file descriptor可以看出删除的过程中只是获取与目录文件描述信息有关的文件状态和删除与文件描述信息有关的directory entry,其实目录的内容就是一长串directory entry的数据结构,directory entry用来描述文件名和inode地址,换句话说只是把记录文件名和inode地址的信息删除了,但是data blocks, inodes以及inodes里存放的metadata(文件大小、所属关系等)仍然存在磁盘里。所以使用photorec恢复一下被删除的文件,轻而易举的恢复了。2.关于使用vim编辑文件大小问题我们创建一个文件file,vim打开输入内容“1234567”共7个字节查看file文件的大小为8个字节使用od查看,vim会自动补上一个字节\n换行符,所以7个字节变成8个字节3.软连接大小问题首先给install.log文件创建一个软连接名为install,查看软连接install的大小为11字节,为什么是11字节呢?数数原文件的文件名字节数11字节,这就对了。4.如何删除一个文件1.删除文件描述符(file descriptor),由第一个问题可以知道,执行rm -rf *后其实删除的文件是可以恢复的,也就是说文件的数据还是可以被访问的,是因为data blocks, inodes以及inodes里存放的metadata都在磁盘上。2.删除元数据(metadata),可以使用 > filename,data block里的真实数据依然存在磁盘里。 3.删除真实数据(data block),需要产生一些随机数填充文件,然后再删除文件顺序是dd if=/dev/random of=filename 然后 rm -rf filename这样真实数据就会被删除。更快的方法是使用设备/dev/urandom,不过虽然没有/dev/random的随机性强,但已经能满足擦除磁盘数据的目的了。为什么使用/dev/random设备比使用/dev/zero设备更好一些呢?两者设备都会读取之前"数据痕迹"(data trace),使用/dev/zero会比使用/dev/random设备更容易读取到之前的"数据痕迹"(data trace)。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表