在学习 Linux 时,了解到磁盘可存储的位置都是一个一个 block,而这些 block 由 inode 做为标记(从 inode 到 block 中间还有很多环节),当我们删除文件的时候,只是把 inode 标记为可用,文件在 block 中的内容是没有被清除的,只有在有新的文件需要占用 block 的时候,才会被覆盖。简单来说就是,我们在磁盘上所删除的数据实际并没有被删除,只是执行删除后被删除的 block 被标记为空闲(由 inode 表做标记),后续新增的数据可以写入这个 block 。

所以,当用户删除文件时,指向数据在硬盘上的具体位置的索引(inode)就会被删除(对于机械硬盘来说就是 LBA 逻辑块寻址)。举个栗子,为了管理方便,你把自己收藏的电影存放的位置写在一张纸上,某天你不慎把这张纸烧掉了,理论上你只损失了一张纸,实际的电影还在。通常我们的数据存储就是这样,删除文件时只是删除了文件的索引(inode),具体的文件还存在硬盘上。正因为实际数据仍然保存在硬盘上,数据恢复才有了操作的可能,当然前提是用户没有在原位置覆盖新的数据。当用户误删除了重要文件,使用数据恢复软件都有很高几率成功恢复文件,原理即是将磁盘的数据全部建立 inode 并连接 block(中间环节很多),这样就可以显示原来的文件,前提是没有被后续新增内容覆盖替换。


友情提示:本站所有文章,如无特殊说明或标注,均为何星星原创发布。与此同时,趋于近年来本站的文章内容频繁被他站盗用与机器采集,现已全局禁用网站文字内容操作,了解详情或转载文章请 点此 继续!
分类: 技术维新

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注