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

-1 boot kernel

我不小心删除了 下的所有文件/,我的系统不再启动。文件夹和链接仍然存在,似乎没有丢失任何东西。但是在 grub 尝试启动系统后“内核恐慌未同步无法挂载 root fs”

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

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

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

Bra*_*iam 8

好的,如果您在评论中说的是正确的,那么您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.
Run Code Online (Sandbox Code Playgroud)

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

幸运的是,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$ 
Run Code Online (Sandbox Code Playgroud)

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

$ ls -p / | grep -v /
0
initrd.img
vmlinuz
Run Code Online (Sandbox Code Playgroud)

(我真的不知道那里名为 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*
Run Code Online (Sandbox Code Playgroud)

如您所见,vmlinuz* 文件位于linux-image-3.10-1-686-pae.cs文件中,因此在 chroot 环境中进行简单的重新安装就足够了。对于 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
Run Code Online (Sandbox Code Playgroud)

通过调用update-initramfschrooted 环境,您可能会再次启动系统。