我意外删除了 下的所有文件/
,我的系统无法启动。文件夹和链接仍然存在,似乎没有丢失。但是“内核崩溃,无法同步,无法挂载根文件系统”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-pae
和vmlinuz
在我的情况下链接到的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-initramfs
chrooted 环境,您很可能会使系统重新启动。