我粉碎了 / 下的文件,现在出现内核恐慌,我该怎么办?

我粉碎了 / 下的文件,现在出现内核恐慌,我该怎么办?

我意外删除了 下的所有文件/,我的系统无法启动。文件夹和链接仍然存在,似乎没有丢失。但是“内核崩溃,无法同步,无法挂载根文件系统”grub 尝试启动系统后。

完全加密的 xubuntu 12.04 系统,加密正常,可使用救援访问。尝试了几种救援方法,并在其他分区上安装了新系统以手动复制已删除的文件。但那里没有其他文件。也许文件只出现在加密系统上?

  • 我需要一种方法来修复我的系统(丢失文件?)

  • 还有一种再次启动它的方法,因为我必须在另一个分区上的系统的 MBR 中安装 grub(其他方式不起作用,安装/救援/ubuntu 变得荒谬)。

答案1

好的,如果您在评论中说的是正确的,那么您使用的shred *是 root 用户(这是唯一可以这样做的方法)。但首先,让我们阅读手册:

描述:重复覆盖指定的文件,以使即使非常昂贵的硬件探测也更难恢复数据。

那么,你做了什么呢?你只是用垃圾替换了文件的内容(而不是文件本身):

braiam@bt:~/lab$ touch file1 file2 file3
braiam@bt:~/lab$ ls
file1  file2  file3
braiam@bt:~/lab$ cat *
braiam@bt:~/lab$ 
braiam@bt:~/lab$ shred *
braiam@bt:~/lab$ cat *
VXK��6z�z�-K� Eˎ�F��O�č��ؖɄw����Pw(R�����xd/���O��2����lD�y�0��8Gй�4Q�k�7��ݤ
## Actually there was more garbage here, but it would make this answer too long.

是的,最后一行是曾经是空文件的“内容”。这就是为什么当你检查文件时,它们仍然存在,但内容却一片混乱。

幸运的是,shred 无法打开目录:

braiam@bt:~/lab$ mkdir dir
braiam@bt:~/lab$ mkdir dir1
braiam@bt:~/lab$ mkdir dir2
braiam@bt:~/lab$ ls 
dir  dir1  dir2  file1  file2  file3
braiam@bt:~/lab$ touch dir/file2
braiam@bt:~/lab$ touch dir1/file2
braiam@bt:~/lab$ touch dir2/file2
braiam@bt:~/lab$ shred *
shred: dir: failed to open for writing: Is a directory
shred: dir1: failed to open for writing: Is a directory
shred: dir2: failed to open for writing: Is a directory
braiam@bt:~/lab$ cat dir/file2 
braiam@bt:~/lab$ 

所以,下面的一切/*/都是安全的。这给我们留下了一个问题,那么你到底搞砸了什么?

$ ls -p / | grep -v /
0
initrd.img
vmlinuz

(我真的不知道那个名为 0 的文件在做什么,不过我们先忽略它)

因此,您搞乱了initrd.img在我的情况下链接到的initrd.img -> /boot/initrd.img-3.10-1-686-paevmlinuz在我的情况下链接到的vmlinuz -> boot/vmlinuz-3.10-1-686-pae。 Adpkg -S将告诉我们哪些软件包包含这些文件:

$ dpkg -S boot/vmlinuz-3.10-1-686-pae
linux-image-3.10-1-686-pae: /boot/vmlinuz-3.10-1-686-pae
$ dpkg -S initrd.img-3.10-1-686-pae
dpkg-query: no path found matching pattern *initrd.img-3.10-1-686-pae*

如您所见,vmlinuz* 文件位于 中linux-image-3.10-1-686-pae,因此在 chrooted 环境中进行简单的重新安装就足够了。对于 initrd.img 来说,事情比较棘手,需要使用mkinitramfs或更具体地说update-initramfs

$ update-initramfs -h
Usage: /usr/sbin/update-initramfs [OPTION]...

Options:
 -k [version]   Specify kernel version or 'all'
 -c     Create a new initramfs
 -u     Update an existing initramfs
 -d     Remove an existing initramfs
 -t     Take over a custom initramfs with this one
 -b     Set alternate boot directory
 -v     Be verbose
 -h     This message

通过调用update-initramfschrooted 环境,您很可能会使系统重新启动。

相关内容