2024年3月12日发(作者:)

责任编辑:赵志远

故障诊断与处理

Trouble Shooting

Linux XFS文件系统

误删除文件恢复

■ 新疆 赵修文

我们在使用

编者按: 因误操作或其他原因而导致的文件被删除,在

件一般由目录项

计算机时,总是

我们日常工作中经常遇到,也给我们工作造成很大影响。

(dentry)、索引

避免不了各种

本文将以Linux系统为例,讨论Linux XFS文件系统误

节点(inode)和

误操作或遭遇

删除文件的恢复。

数据块(block)

程序错误,从而

组成。目录项包

导致重要文件被误删除。

文件,文件则会被直接删除,

括文件的管理与组织信息;

Linux系统一般设置了

而不会被移到回收站内。

索引节点包括文件属性及数

类似于Windows系统的回收

本文将主要探讨linux

据块指针信息;数据块存储

站(实际上是Trash目录),当

XFS文件系统在shell中使

文件的内容。当删除一个文

用户在图形桌面中删除文件

用命令删除文件后,如何尽

件的时候,操作系统并不会

时,文件会被移到回收站内,

可能地恢复文件,从而挽救

擦除磁盘中索引节点和数据

文件实际上并没有被删除,

用户数据。

块的内容,而只是在目录项

此时用户可以在回收站中直

中删除该文件名所对应的索

接还原被删除的文件。但如

已删除文件的恢复思路

引节点。这就为我们恢复数

果在shell中使用命令删除

Linux文件系统中的文

据提供了可能。

工程师们就

解它的历史文化是如何产生

多关注。

试想让多个VLAN为一组(即

的,经历了哪些版本等。

【小知识:生成树类型】

实例),以组为单位生成树。

不可否认,Packet

公有生成树:以STP(又称

这样既保证了链路的使用

Tracer对于初学者来讲是一

为802.1D标准生成树)、RSTP

率,又避免了交换机过多的

个再适合不过的模拟器,它

(802.1W快速生成树)和MST

资源消耗。即现在普通采用

安装简单,占用资源少,可以

(802.1S多生成树)使用最广

的MST(多实例生成树)。

模拟非常基础的实验,还可

泛。

以看到数据包的模拟流动。

私有生成树(cisco):PVST

故障总结

但它毕竟是思科的产品,就

(基于VLAN的标准生成树)、

对于初学者来讲,不仅仅

不可避免有很多它独有的协

PVRST+(基于VLAN的快速生

是要学习技术原理,还要了

议,在以后的学习实践中应

成树)。

投稿信箱:

**********************

2021.02

163

【上接第162页】

Trouble Shooting

故障诊断与处理

责任编辑:赵志远

Linux系统是多用户、多

了/home目录(/dev/sda2分

赖要求。

任务操作系统,文件被删除

区)中的大量文件,此时立刻

# rpm -qa tcl //查

后,如果仍以读写方式使用

对分区进行保护备份。

看是否安装Tcl,若无输出则

磁盘,被删除文件的数据块

mount -o remount,r /

未安装

可能会被操作系统重新分配

dev/sda2 //以只读方式挂

#tclsh //若无此命令,

出去,从而造成已删除数据

载分区

也说明没有安装Tcl

被覆盖,对于繁忙的服务器

dd if=/dev/sda2 of=/

% puts $tcl_version

系统更是如此。因此,当文

root/ //备份该

//输出Tcl版本

件删除后,必须立即采取保

分区

8.5 //Tcl版本号

护措施,如果数据被覆盖,就

提示:卸载分区时若提

%exit //退出Tclsh

很难恢复了。

示设备busy,可以使用命令

在sourceforge.

根分区数据保护需要立

fuser -kmiv /dev/sda2强制

net/projects/tcl或https:

即关闭系统,若要启动系统

卸载。

///下

必须使用单用户模式,并将

2.安装数据恢复工具

载Tcl8.6.10,其他版本也可

根分区以只读方式挂载。其

(1)xfs_undelete。该工

以,只要在8.6及以上就可

他分区数据保护则应立即以

具可以在github.

以,然后使用默认参数进行

只读方式挂载或卸载该分

com/下载,它是Tcl脚本工

编译安装,完成后建立软连

区。对于服务器系统,也可

具,运行依赖Tcl(8.6及

接。

以采取断网等方式,中断用

以上版本)、Tcllib和GNU

mv /usr/bin/tclsh /

户对分区的写操作。

coreutils(系统自带不需要

usr/bin/tclsh8.5

在做好数据保护后,可以

安装)。

ln -s /usr/local/bin/

使用命令对分区或硬盘进行

查看本机得知,已安装

tclsh8.6 /usr/bin/tclsh

备份,防止后续恢复过程中

Tcl,但版本为8.5,不满足依

//创建Tclsh软链接,否则

造成二次破坏,随后可以尝

试使用各种恢复软件进行恢

复。在恢复工作结束后,重

新以读写方式挂载分区。

已删除文件的恢复

1.数据保护与备份

以下将以实例进行说

明:操作系统为CenOS 7.7,

文件系统为XFS,用户删除

图1 运行xfs_undelete

164

2021.02

投稿信箱:

**********************

责任编辑:赵志远

故障诊断与处理

Trouble Shooting

运行Tclsh仍然是系统自

带的8.5版本,此时用上述

方法查看Tcl版本为8.6.

可在sourcefor

/projects/tcllib/

或者-lang.

org/tcllib/上下载tcllib,

当前最新版为1.20。下载

图2 运行PhotoRec

后使用默认参数配置安装,

最后导出库搜索路径。

具支持从块设备或XFS镜像

help参数)。该工具运行时

export TCLLIBPATH=/

恢复文件。

会自动尝试将分区以只读方

usr/local/lib/tcllib1.20

./xfs_undelete /dev/

式挂载,此外该工具不能恢

//添加库搜索路径

sda2

复原文件的文件名和目录结

echo " export TCLLIBPA

如图1所示。

构。

TH =/usr/local/lib/tcllib1.

该工具运行过程中会显

(2)PhotoRec。运行phot

20 " >> ~/.bash //写入

示已恢复的文件,并将所有

orec_static,该工具采用向

文件

已恢复的文件保存在xfs_

导式文本菜单操作方式,分

提示:运行xfs_undelete

undeleted目录中。当然也

区类型选择Other。工具运

工具时,若提示“can’t find

可以通过工具参数指定保存

行完毕后会显示恢复的文件

cmdline package”,这说明没

位置和目录。

数量和文件存储位置。该工

有安装Tcllib或没有添加其

根据删除时间初步判断

具还支持搜索和恢复指定扩

库搜索路径。

2020-07-10-12-50_27124.

展名的文件。如图2所示。

(2)PhotoRec。该工具可

txt文件可能是被删除的

以上2个开源工具操作

以在rity.

,查看文件内容

都非常简单,都可以恢复已

org/下载,它不需要编译

后,确认该文件正是被删除

删除的文件。其中PhotoRec

安装,直接执行photorec_

的文件。恢复完

恢复的文件数量往往是多于

static即可。

成后重新以读写方式挂载该

xfs_undeleted,而xfs_un

3.文件恢复

分区(mount -o remount,rw

deleted恢复的文件以删除

首先删除分区中大量的

/dev/sda2)。

时间命名,更便于查找所删

文件,然后进行恢复。

该工具还支持日期时间、

除的文件。

(1)xfs_undelete。运行

文件类型、从指定inode开

当然也可以尝试使用支

xfs_undelete,恢复/dev/sda2

始等几种恢复方式,更多的

持xfs文件系统的商业软

分区上被删除的文件,此工

恢复方式参见工具帮助(--

件进行恢复,例如Active@

投稿信箱:

**********************

2021.02

165

Trouble Shooting

故障诊断与处理

责任编辑:赵志远

图3 使用ls和lsof命令确认文件被删除

File Recovery以及Raise

文件不存在(可能被其他用

xfs_repair命令执行修复。

Data Recovery等。

户删除了),使用ls和lsof

若计算机长期未使用,

4.已打开文件的删除恢

命令确认此文件就是被删除

当读取分区中的文件出现I/

了。如图3所示。

O错误时,可尝试使用dd命

例如,在系统中有一个

此时可以使用如下命令

令修复(如dd if=/dev/sda2

用户正在操作某个文件,而

恢复被删除的文件:

of=/dev/sda2),此操作是安

另一个用户将该文件删除。

cp /proc/17114/fd/3

全的,没有任何风险。

此时这个文件仍保留在缓

/home/slb/

存中,可以通过缓存将该文

cat /home/slb/readme.

总结

件恢复。因为Linux系统打

txt

数据恢复是一项复杂的

开一个文件的时候,内核会

其中“17114”是more命

工作,有很多因素可能导致

为每个进程在/proc/目录

令的进程号,“3r”中的“3”

数据无法恢复,造成数据丢

中创建一个以进程号pid为

是已打开文件

失。因此,当发现误删文件

名字的子目录,用于保存进

的fd号,“r”表示文件是以

后,请立刻做好数据保护,以

程信息。该子目录下fd目

只读方式打开。复制此文件

免误删文件的数据块被破

录保存的则是该进程打开的

后,查看其内容,确认文件已

坏。同时由于每种工具的数

所有文件,即文件描述符fd

恢复。

据恢复能力不同,要尝试多

(File Descriptor),可利用

5.其他情况的数据恢复

种工具进行恢复。

系统的lsof命令列出已打

若系统无法启动,可以使

对于重要的文件及时

开文件的进程号和fd,根据

用KNOPPIX等Linux live-

做好备份才是上策,xfs文

这些信息即可恢复被删除的

cd引导计算机,在分区没有

件系统可使用系统自带的

文件。

损坏的情况下,可以直接将

xfsdump备份,恢复时可使

当用户已使用more命

文件复制出来。

用xfsrestore,当然也有很

令打开一个文件(如readme.

若文件分区存在错误,

多开源软件和商业软件,如

txt),用户返回shell执行

对于xfs文件系统可以先卸

RedoRescue、Deepin Clone

其他操作时发现

载该分区,然后使用系统的

和Ghost等。

166

2021.02

投稿信箱:

**********************