您当前的位置:首页 > 互联网教程

Linux系统下不小心使用rm命令删除的文件能有办法恢复吗

发布时间:2025-05-12 12:12:49    发布人:远客网络

Linux系统下不小心使用rm命令删除的文件能有办法恢复吗

一、Linux系统下不小心使用rm命令删除的文件能有办法恢复吗

概述

可以恢复,使用系统自还工具debugfs来还原删除的文件

可以恢复,使用系统自还工具debugfs来还原删除的文件

1、查看一下当前系统版本号,及文件系统格式

Filesystem Type 1K-blocks Used Available Use% Mounted on

ext4 51475068 22730068 26123560 47%/

tmpfs tmpfs 3966808 68 3966740 1%/dev/shm

/dev/sda2 ext4 487652 42534 419518 10%/boot

ext4 901188872 20070036 835334364 3%/home

2、新建一个文件夹及文件my.txt,然后删除

[root@localhost local]# mkdir test

[root@localhost local]# cd test

[root@localhost test]# touch my.txt

-rw-r–r–. 1 root root 0 1月 4 15:22 my.txt

[root@localhost test]# rm-f my.txt

3、运用,系统自还工具debugfs来修复打开,刚刚被删除文件所在的分区,用ls加-d参数显示刚刚删除文件所在的目录

[root@localhost test]# debugfs

debugfs: open/dev/mapper/VolGroup-lv_root

2378807(12). 2098175(4084)..<2378808>(4072) my.txt

4、显示有<>尖括号的就是我们要找的文件Inode号执行logdump–i<2378808>,然后输入“quit”退出debugfs

debugfs: logdump-i<2378808>

Inode 2378808 is at group 290, block 9438337, offset 2944

Journal starts at block 16826, transaction 2237277

No magic number at block 30648: end of journal.

5、执行以下命令,进行恢复,bs与skip的值分别取自:block 9438337, offset 2944

dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337

bs对应上面的offset后面的值,skip对应block后面的值

[root@localhost test]# dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337

2944字节(2.9 kB)已复制,0.00989032秒,298 kB/秒

Linux dd命令用于读取、转换并输出数据。

dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

if=文件名:输入文件名,缺省为标准输入。即指定源文件。

of=文件名:输出文件名,缺省为标准输出。即指定目的文件。

ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

bs=bytes:同时设置读入/输出的块大小为bytes个字节。

cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数;

cbs=<字节数>:转换时,每次只转换指定的字节数;

conv=<关键字>:指定文件转换的方式;

count=<区块数>:仅读取指定的区块数;

ibs=<字节数>:每次读取的字节数;

obs=<字节数>:每次输出的字节数;

seek=<区块数>:一开始输出时,跳过指定的区块数;

skip=<区块数>:一开始读取时,跳过指定的区块数;

二、XFS文件系统简介Linux中使用XFS文件系统的配置方法

XfS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。所幸的是SGI将其移植到了Linux系统中。在linux环境下。目前版本可用的最新XFS文件系统的为1.2版本,可以很好地工作在2.4核心下。

采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。

XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。笔者曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。

XFS是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263= 9 x 1018= 9 exabytes,最大文件系统尺寸为18 exabytes。

XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

XFS能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。

下载相应版本的内核补丁,解压补丁软件包,对系统核心打补丁

下载地址:

对核心打补丁,下载解压后,得到一个文件:xfs-1.1-2.4.18-all.patch文件。

# patch-p1</path/to/xfs-1.1-2.4.18-all.patch

修补工作完成后,下一步要进行的工作是编译核心,将XFS编译进Linux核心可中。

首先运行以下命令,选择核心支持XFS文件系统:

复制代码代码如下:#make menuconfig

在“文件系统“菜单中选择:

SGI XFS filesystem support##说明:将XFS文件系统的支持编译进核心

SGI XFS filesystem support##说明:以动态加载模块的方式支持XFS文件系统

另外还有两个选择: Enable XFS DMAPI##说明:对磁盘管理的API,存储管理应用程序使用

Enable XFS Quota##说明:支持配合Quota对用户使用磁盘空间大小管理

完成以上工作后,退出并保存核心选择配置

如果你对以上复杂繁琐的工作没有耐心或没有把握,那么可以直接从SGI的站点上下载已经打好补丁的核心,其版本为2.4.18。它是一个rpm软件包,你只要简单地安装即可。SGI提交的核心有两种,分别供smp及单处理器的机器使用。

2.创建XFS文件系统

完成对核心的编译后,还应下载与之配套的XFSprogs工具软件包,也即mkfs.xfs工具。不然我们无法完成对分区的格式化:即无法将一个分区格式化成XFS文件系统的格式。要下载的软件包名称:xfsprogs-2.0.3。

将所下载的XFSProgs工具解压,安装,mkfs.xfs自动安装在/sbin目录下。

使用mkfs.xfs格式化磁盘为xfs文件系统,方法如下:

复制代码代码如下:#/sbin/mkfs.xfs/dev/sda6#说明:将分区格式化为xfs文件系统,以下为显示内容:

meta-data=/dev/sda6 isize=256 agcount=8, agsize=128017 blks

data= bsize=4096 blocks=1024135, imaxpct=25

= sunit=0 swidth=0 blks, unwritten=0

log=internal log bsize=4096 blocks=1200

realtime=none extsz=65536 blocks=0, rtextents=0

格式化磁盘时,如果mkfs.xfs提示你分区原本已被格式化为其它文件系统,可以使用参数–f强行格式化:

复制代码代码如下:#/sbin/mkfs.xfs–f/dev/sda6

3.加载XFS文件系统

最后,为了让系统启动后就自动加载,应该更改/etc/fstab,这样系统启动后就会自动加载xfs分区而不必每次都手工加载。

要说明的一点是目前的xfs由于受linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式 mount,即允许文件系统以读方式加载,也允许以读写方式加载。这是因为xfs文件系统用作根文件系统时,为了安全要以只读方式加载。

要说明的一点是目前的xfs由于受linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式 mount,即允许文件系统以读方式加载,也允许以读写方式加载。这是因为xfs文件系统用作根文件系统时,为了安全要以只读方式加载。

要使得系统中的其它分区使用XFS文件系统,还有一步是迁移文件系统。建议在迁移文件系统时,首先将磁盘上的数据、文件先备份,以免发生不可挽回的损失,在进行文件系统转换之间,最好能将整个系统进行完全备份。这一步有很多种方法,本文仅就笔者的迁移方法加以描述。各位可以按照自己习惯的方式去完成。

如果你想得到一个纯的xfs系统(系统的所有文件系统均采用XFS文件系统)话,还得将根文件系统也格式化为xfs文件系统。这实际上是比较繁杂的一步。因为根文件系统不能被umount,所以,必须首先创建一个分区,其文件系统为ext2文件系统,然后将目前的根分区上的所有文件与目录,原原本本地复制到这一个分区,然后更改/etc/fstab文件,替换原来的根分区。

$ mount-t ext2/dev/hda4/mnt/temp

$ tar lcvf-.|(cd/mnt/temp; tar xpvf-)

以上操作是将根分区上的所有文件打包,复制到新建立的分区。当然,你也可以直接使用以下命令复制文件。

以上操作是将根分区上的所有文件打包,复制到新建立的分区。当然,你也可以直接使用以下命令复制文件。

接着,将下次启动的根分区更改到/dev/hda4分区,更改/etc/fstab文件及/etc/lilo.conf,然后,运行 lilo.

重新启动后,新的根分区就已经为/dev/hda4。

接下来,创建一个xfs文件系统的分区:

复制代码代码如下:$ mkfs-t xfs/dev/hda2

加载此分区,采用两样的方法,将根分区的内容复制到此分区

复制代码代码如下:$ mount-t xfs/dev/hda2/mnt/temp

$ tar lcvf-.|(cd/mnt/temp; tar xpvf-)

再次更改/etc/fstab、/etc/lilo.conf,用新建的xfs分区替换原来的ext2主分区。如下所示:

再次更改/etc/fstab、/etc/lilo.conf,用新建的xfs分区替换原来的ext2主分区。如下所示:

将新建的xfs分区用作根分区,保存以上设置。再次检查配置文件内容,确认无误后再重新启动系统。如果你的设置全部正确,那么系统成功启动后,你就拥有一个纯XFS文件系统的系统了。

三、linux文件系统修复requiresamanualfsck怎么办

网络上众多文章指导系统管理员在 XFS文件系统挂载失败时,直接运行 xfs_repair命令进行修复。然而,这样的操作流程存在明显问题。正确的恢复步骤应包括将受损文件系统的元数据导出,转换为新的映像文件,之后对新的映像文件执行修复操作。这样做的目的是评估强制修复带来的后果,而非实际恢复数据。

重要提示:这种方法并不能真正恢复数据,只是用于评估是否能直接修复原始文件系统。

xfs_repair命令提供-L选项用于强制修复,该选项的描述指出,即使日志中的脏数据还未同步到持久化存储,文件系统也可能会损坏,可能导致用户文件或数据丢失。

以下是进行强制修复的基本步骤:

1.创建一个正常的 XFS文件系统。

2.写入测试文件以验证恢复效果。

3.卸载文件系统,准备模拟文件系统故障。

4.使用 xfs_db命令模拟文件系统损坏。

5.重新挂载文件系统,此时会提示报错。

6.使用 xfs_metadump命令将已损坏的文件系统元数据导出。

7.使用 xfs_mdrestore命令将元数据转换为映像文件。

8.使用 xfs_repair命令对映像进行修复(注意,不是强制修复)。

9.在系统上重新挂载刚刚修复的映像文件。

通过元数据导出的文件系统映像,经过修复后可以看到目录中出现了原始文件,但文件内容消失。这是因为 xfs_metadump命令仅导出元数据,并不包含文件的真实数据。

正确的恢复流程重点在于第8步中的输出,这能显示文件系统可能的损坏情况以及修复是否成功。通常,文件系统损坏的原因包括服务器突然断电或磁盘坏道。

在工作环境中,应将专业问题交由专业人员处理。例如,企业可以购买红帽订阅服务以获取技术支持。定期备份文件系统和数据至关重要,避免因成本节省而造成数据丢失。

尝试直接对文件系统进行修复并挂载,观察结果。在第4步中,可以尝试更改"-n 10"为"-n 1000",以观察不同结果。最后,确保备份重要数据,避免因成本节省而得不偿失。