Contents

Linux中的Lost+found目录

1. 概述

在本教程中,我们将了解许多系统管理员在浏览 Linux 文件层次结构时遇到的lost+found目录。我们将看到这个目录存在的原因以及它的用途。我们还将涉及从lost+found目录中恢复数据的主题。

最后,我们将使用 find 命令在磁盘上查找lost+found目录并将其删除。

2. lost+found

** lost+found目录是fsck系统实用程序使用的结构。**这是一个特殊目录,其中包含已过时的数据。fsck  实用程序在具有扩展文件系统 ( ext2-ext4 )分区的Linux 机器上创建它。但是,它们也在其他文件系统上创建,例如 UNIX 衍生产品上的 UFS 和 ZFS。

fsck实用程序在卷的根目录下创建lost+found目录。因此,我们可以有多个lost+found目录——每个卷一个。

2.1. lost+found的目的

lost+found目录包含在磁盘操作中已被删除或丢失的文件。**该目录中的文件有一个索引节点 ,但它们缺少通常使我们能够访问系统上文件的相应文件名。**但是,如果文件的完整性完好无损,我们仍然可以访问或恢复文件的数据

该目录中的文件曾经是带有inode和文件名的常规文件。然而,**在极少数情况下,当一个进程打开一个文件进行操作时,另一个进程以某种方式删除了该文件,而该文件仍在被旧进程使用,它就变成了一个数据片段。**因此,当进程正在使用数据时发生不正确的关闭或内核崩溃时,数据就会过时。

由于对该文件的引用不再存在并且该文件不再可以正常访问,因此fsck将数据变回一个新文件并将其存放在lost+found目录中。

由于我们已经删除了该文件,因此我们无需关心它,可以放心地忽略它。另一方面,**如果由于硬件或软件错误导致文件系统损坏,则由用户运行 fsck 检查fsck将这些文件放入lost+found目录后找到这些文件。**之后,我们可以从这些文件中恢复数据,这可能对我们有帮助,也可能没有帮助,具体取决于文件系统损坏的严重程度。

2.2. mklost+found实用程序

如果我们不小心删除了lost+found目录,我们应该使用mklost+found而不是使用mkdir。**mklost +found 命令在当前目录中创建lost+found目录并为fsck 预分配一些空间,因此fsck在恢复期间不必在文件系统中分配数据块。**这是因为同时恢复数据和更改文件系统可能会损坏数据。因此,我们应该避免使用mkdir而是使用mklost+found

使用mklost+found非常简单。我们只需要cd 进入卷并运行没有任何选项的命令:

$ mklost+found 
mklost+found 1.46.4 (18-Aug-2021)
$ ls -l
drwx------ 2 xsh xsh 49152 Dec  7 20:46 lost+found

此外,当我们在磁盘上创建新分区时,像mkfs 这样的工具也会创建目录。

3. 从lost+found的目录中恢复数据

fsck实用程序使我们可以轻松恢复丢失的数据。**要恢复丢失的数据,我们需要之前运行过fsck。**如果机器没有正确关闭,大多数 Linux 发行版都会在启动时运行fsck命令。否则,我们将不得不手动运行它。

我们必须确保正在运行fsck 的分区已卸载,因为在已挂载的分区上运行fsck可能非常有害。例如,让我们在映射到*/home分区的/dev/sda3上运行fsck*:

$ fsck /dev/sda3
fsck from util-linux 2.37.2
fsck.fat 4.2 (2021-01-31)
/dev/sda3: 200 files, 38/130811 clusters

fsck命令对*/dev/sda1运行检查并在分区的根目录下创建一个lost+found目录。接下来,我们将挂载分区并导航到lost+found*目录:

$ mkdir -p /tmp/home
$ mount /dev/sda3 /tmp/home
$ cd /tmp/home/lost+found

**这些文件丢失了它们的原始文件名,因此fsck使用随机数重命名它们。因此,我们将研究数据以从中获得一些意义。**首先,我们将使用file命令,它从文件的标题中提取元数据:

$ file *
#4605470:          ASCII text
#4655470:          PNG image data, 943 x 436, 8-bit/color RGBA, non-interlaced
#4610801:          directory
#4613588:          PDF document, version 1.4, 1 pages
...

如果我们有很多文件,那么遍历每个文件的元数据可能会让人不知所措。因此,我们可以从file命令的输出中grep 一些有用的信息并对其进行操作:

$ file * | grep PNG
#4655470: PNG image data, 943 x 436, 8-bit/color RGBA, non-interlaced
...

现在,假设我们要恢复第一个 PNG 文件。我们将简单地通过awk 获取它的文件名并将文件复制到一个位置:

$ cp "$(file * | grep PNG | awk '{print $1}' | cut -d':' -f1)" /tmp/home/username/image.png

从理论上讲,数据可能已损坏,因此更难恢复,但恢复数据的完整性也很有可能完好无损。

4. 查找和删除lost+found目录

有时, lost+found目录中的数据可能很大,我们可能不需要它。但是,我们必须知道lost+found与普通目录不同,因为fsck不会在恢复期间创建它,因为它已经预先分配了与之关联的块。虽然不建议删除 lost+found目录,但如果我们想腾出磁盘空间,删除数据也无妨。

我们可以使用find 工具删除所有分区上的lost+found目录。请注意,我们需要确保所有分区都已挂载并且我们拥有root访问权限:

$ find "-iname" lost+found -type d -exec rm -r "{}" \;