Linux文件系统数据恢复
黄雄荣
【摘要】
在企业实际生产中,某些不合规的操作会导致重要数据被误删,造成不必要的经济损失。本文由一个数据恢复案例谈谈如何尽可能恢复被误删的数据。
【正文】
Linux文件系统存储文件分为两段,第一段是文件名指向inode,第二段是inode指向文件的具体内容所在的blocks。rm删除数据时只是删除了第一段,即文件名到inode之间的链接,实际文件内容还存在磁盘中,只要对应的blocks不发生写入操作使原有数据被覆盖,数据就有恢复的可能。
l
l
为最大程度恢复数据,发生误删情况之后要立即停止对文件系统的一切读写操作,减少数据被覆盖的概率。本案例中数据所在的磁盘是挂载到系统上的,因此用mount –o ro,remount /home 将该目录只读挂载,保护数据。若误删的数据在根目录下,需要将系统关机,再以救援模式进入系统执行恢复操作。
l 数据备份
任何数据恢复都有数据丢失的风险,因此备份数据前都需要做好备份
dd if=/dev/sda3 of=/dev/sdc(假设元数据存储在sda3盘,备份到sdc盘)
l 尝试恢复
元数据的文件系统为xfs文件系统(专业数据恢复公司对此类文件系统的数据恢复收费很高),搜索资料找到一个开源软件TestDisk中的一个工具PhotoRec。
$ yum install testdisk #安装TestDisk软件;
$ photorec /dev/sda3 #开始恢复sdb盘,进入一下交互界面,选择Proceed回车确认;
选择分区进行文件修复;
选择search 开始文件恢复,在下图界面选择文件系统类型;
选择是对空闲区域执行恢复还是对整个盘执行恢复;
选择一个目录用于存储要恢复的文件,选择完成后按C继续,开始恢复;
l 恢复结果
上述恢复操作耗时大概2小时,由于文件名被删除,通过此方法恢复出来的文件是以inode号命名的文件。尽管软件会识别文件的部分内容判断文件的类型并自动添加文件类型后缀,但具体还需要开发人员去辨别筛选并修改文件名。另外由于恢复软件是直接读取的是inode,对于那些多次编辑保存写入磁盘且保存间隔较长的文件,恢复出来文件碎片化情况比较严重,需要重新拼接。
重要数据一定要做好多个备份,防止数据丢失后造成重大损失;另外删除操作前一定要明确文件的作用,不轻易删除不确定的文件。一旦发生误删文件的事故,首先要减少系统的操作,特别是读写操作,必要时关机保护文件,防止元数据被覆盖导致无法恢复。