grub 救援/移动文件夹

Ale*_*hys 5 boot virtualization grubrescue

我做了一个很傻的事

须藤 mv /* /some_folder

在我的远程服务器 vm ubuntu 12.04 上移动命令

将我的启动文件夹移动到

/home/.../somefolder/boot

我可以通过浏览器终端访问该文件夹,该终端为我提供了 grub 救援。

如何将整个文件夹移回根位置以便正常启动?

如果这是不可能的,那么如果我从这个位置启动,我是否能够遍历到比启动文件夹更高的文件夹,至少可以通过 ssh 复制我的文件?

更新

我设法做到以下几点

 grub rescue> set prefix=(hd0,1)/home/path_to_boot/boot/grub
 grub rescue> set root=(hd0,1)/home/path_to_boot/
 grub rescue> insmod normal
 grub rescue> normal
Run Code Online (Sandbox Code Playgroud)

这将启动一个菜单,其中包含选择 Ubuntu 启动的选项。我按 c 进入控制台并进入 grub 模式以发出 linux 命令。

grub> linux /home/path_to_boot/boot/vmlinuz-3.xx.x-67-generic
grub> initrd /home/path_to_boot/boot/initrd.img-3.xx.x-67-generic
grub> boot
Run Code Online (Sandbox Code Playgroud)

之后我陷入困境

(initramfs)

此时我无法访问 /home 文件夹,只能访问 /home/path_to_boot/boot 中的文件夹。

任何想法如何继续?

更新 2

我联系了我的服务器公司,并获得了通过实时 CD 启动的选项。

有了它我做了一个

鹦鹉螺

并设法复制我的文件。

不幸的是,虽然我无法通过 grub 保存我的系统,但是我得到了我需要的文件。

Ytv*_*wlD 2

如果您可以直接访问这台机器(也许通过浏览器终端弹出窗口(?)),您可以尝试加载内核和 initramfs 并启动它。

这不会再次启动您的系统(因为引导过程不仅仅依赖于 /boot),但您可以进入 shell。

如果您拥有 GRUB 的完全访问权限,这可能会起作用:

linux /<path>/boot/vmlinuz<...>
initrd /<path>/boot/initrd<...>
Run Code Online (Sandbox Code Playgroud)

因为您还没有指定根文件系统(通过root=...) - 因为您当前没有可用的根文件系统 - 所以您的系统将直接从 initramfs 运行 busybox shell。

这个(initramfs)提示符就是一个完整的shell。您需要创建一个文件夹 - run mkdir /rootfs)。然后您需要挂载根文件系统 ( mount -o rw /dev/<...> /rootfs) 并对其进行 chroot ( chroot /rootfs /bin/bash)。

然后您可以挂载其他文件系统 ( mount -a)。然后你就可以做任何你想做的事了。

免责声明:正如问题一样,这也是超级用户的交叉帖子。


kra*_*xor 1

根据手册,GRUB 中没有任何文件操作命令(除了ls)。好吧,它毕竟是一个引导加载程序,而不是一个文件管理器。

由于你的根目录不在你的分区根目录中,我认为不可能使你的Linux正确启动。您可以使用该normal命令进入原始引导菜单并编辑引导项,以便 GRUB 可以找到您的内核,但我认为您不能指定特定的子目录作为系统根目录。