我现在真的有大麻烦了,所以如果能有一个非常快速的解决方案就太好了。我当时在笔记本电脑上使用 LUKS 加密,我以为我正在恢复它的标头。但后来我意识到我实际上已经通过 SSH 连接到我的桌面,并意外地使用 LUKS 标头备份文件在我的桌面上进行恢复,而桌面没有任何 LUKS 加密。现在,我根本无法启动到我的文件系统。有什么方法可以恢复我的操作系统,或者至少恢复我的文件?我也删除了试图在我意识到后立即擦除标头,但这没有帮助,标头仍然保留,只是所有的键都被禁用了。
64 位 Kali Linux ext4 文件系统,与 Windows 10 分区双启动 Kali Linux 分区是意外覆盖了标题的分区。
我使用的意外恢复标题的命令是:cryptsetup luksHeaderRestore /dev/sda5 --header-backup-file header.bak
答案1
您可能几乎可以恢复所有内容,但如果出现问题,您可能会发现自己的情况比现在更糟。
自己动手的选项是从其中一个备份超级块恢复文件系统:
- 制作损坏分区的磁盘映像,并在该映像上完成所有工作。您需要一个具有足够空闲空间的硬盘来容纳此磁盘映像。
- 用于
losetup
将图像设置为环回设备。这将为其指定一个设备名称,例如/dev/loop0
。 - 在环回设备上运行
mke2fs -n
以找出备份超级块的位置。您在这里假装创建一个新的文件系统(选项-n
),以便mke2fs
告诉您它将把东西放在哪里。 e2fsck -n -b <insert a superblock address here>
依次使用每个备份超级块地址在环回设备上运行,直到找到一个可以工作的地址。在这里,您假装修复文件系统(-n
再次)以查看它是否有效。很有可能,您第一次尝试就会成功。e2fsck
在回送设备上重新运行,但不带-n
选项。这将最大程度地修复文件系统。- 将回送设备挂载为文件系统,并查看损坏程度。
完成此操作后,您有两个选择:您可以在原始文件系统上重复这些步骤,或者您可以从图像中复制所需的文件,擦除原始文件系统,重新安装 Kali,然后将恢复的文件复制到它上面。
安全的选择是将您的驱动器送到数据恢复公司。他们基本上会执行与上述相同的步骤,但由于他们熟悉该程序,所以不会搞砸。这可能要花费几百美元。
答案2
Mount 有一个选项可以尝试使用备份超级块(-o b=40961
例如),因此使用只读命令加上一个备份超级块,例如
mount -v -o ro,b=40961 /dev/sda5 mountpoint
可能值得一试,至少它是只读的,不会造成任何伤害,并且不需要复制。
我尝试创建一个小型(50M)ext4 文件系统,将 40 个文件中的约 34M 复制到其中,然后用零覆盖前 2M(luks 备份头的大小)。
e2fsck 命令(使用 & 而不使用 尝试所有备份超级块-b
)没有恢复任何文件。也许是因为覆盖了较小的大小和相对较大的 %,但即使现在可以挂载,也没有文件(甚至 lost+found 也是空的)。另一个答案(https://superuser.com/a/1044614/307834) 表示文件和目录列表可能已被覆盖,显然备份超级块可能没有帮助。
但是,Photorec 能够恢复 40 个文件中的 33 个(没有文件名),其中 31 个是相同的,但有 2 个被更改(md5 不匹配)。以下是分步说明的链接。(它也将显示备份超级块)。
如果您有所有文件名和哈希值的备份列表(如 md5find | md5sum
或 crc32),那么将文件与其文件名匹配起来会容易得多。当然,最好备份文件本身 - 不是所有系统文件,它们可以轻松下载并重新安装,而是您的个人数据和文件 ($HOME?),以及 /etc 中的一些配置文件。
无论如何,如果有人感兴趣的话,这里有一些命令可以创建一个小型的 ext4 并破坏它并尝试恢复:
$ fallocate -l 50M 50
$ mke2fs -v -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 50
mke2fs 1.43.4 (31-Jan-2017)
fs_types for mke2fs.conf resolution: 'ext4', 'small'
Discarding device blocks: done
Discard succeeded and will return 0s - skipping inode table wipe
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
12824 inodes, 51200 blocks
2560 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33685504
7 block groups
8192 blocks per group, 8192 fragments per group
1832 inodes per group
Filesystem UUID: b42aef3d-4e2a-44c3-8bb1-967968f61e38
Superblock backups stored on blocks:
8193, 24577, 40961
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo mount -v 50 /media/50
mount: /dev/loop1 mounted on /media/50.
$ cp -ar /usr/share/backgrounds /media/50/backgrounds # 40 files totaling 34M
$ sudo umount -v /media/50
umount: /media/50 unmounted
保存原始的“好”文件以供比较
$ cp -v 50 50-bak
'50' -> '50-bak'
没有转换,dd
只需用零填充的 2M 文件覆盖 50
$ dd if=/dev/zero of=50 bs=1M count=2 conv=notrunc
2+0 records in
2+0 records out
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.00552528 s, 380 MB/s
保存损坏文件的副本,以便稍后重试
$ cp -v 50 50-broken
'50' -> '50-broken'
运行“e2fsck 50”将“修复”文件系统,但挂载时未发现任何恢复的文件
获取/仔细检查备份超级块
$ mke2fs -n 50
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 51200 1k blocks and 12824 inodes
Filesystem UUID: 7a31ebab-ddc2-40a6-89f6-39ecc26578cc
Superblock backups stored on blocks:
8193, 24577, 40961
e2fsck 命令应该/ 可能有帮助:
$ e2fsck -v -b 40961 50
e2fsck 1.43.4 (31-Jan-2017)
Superblock has an invalid journal (inode 8).
Clear<y>? yes
*** journal has been deleted ***
Resize inode not valid. Recreate<y>? yes
Pass 1: Checking inodes, blocks, and sizes
Root inode is not a directory. Clear<y>? yes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Root inode not allocated. Allocate<y>? yes
/lost+found not found. Create<y>? yes
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +(1--1875) +1878 +(8193--8450) +(24577--24834) +(40961--41218)
Fix<y>? yes
Free blocks count wrong for group #0 (6301, counted=6314).
Fix<y>? yes
Free blocks count wrong for group #2 (4096, counted=8192).
Fix<y>? yes
Free blocks count wrong (44438, counted=48547).
Fix<y>? yes
Inode bitmap differences: +1 +(3--10)
Fix<y>? yes
Free inodes count wrong for group #0 (1820, counted=1821).
Fix<y>? yes
Directories count wrong for group #0 (3, counted=2).
Fix<y>? yes
Free inodes count wrong (12812, counted=12813).
Fix<y>? yes
Recreate journal<y>? yes
Creating journal (4096 blocks): Done.
*** journal has been regenerated ***
50: ***** FILE SYSTEM WAS MODIFIED *****
11 inodes used (0.09%, out of 12824)
0 non-contiguous files (0.0%)
0 non-contiguous directories (0.0%)
# of inodes with ind/dind/tind blocks: 0/0/0
6749 blocks used (13.18%, out of 51200)
0 bad blocks
0 large files
0 regular files
0 directories
0 character device files
0 block device files
0 fifos
1 link
0 symbolic links (0 fast symbolic links)
0 sockets
------------
1 file
安装后仍未显示任何文件恢复...
尝试使用备份超级块 (-b) 直接安装,但无法与任何备份块配合使用
$ sudo mount -vo ro,b=40961 50 /media/50
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
# Nothing in syslog/dmesg.