Arch 上的 grub 更新后无法启动

Arch 上的 grub 更新后无法启动

我昨天进行了更新,直到断电后才重新启动笔记本电脑。重新启动后,我发现我没有硬盘驱动器(或者它声称如此)。我尝试启动到 arch live 磁盘,最终得到 rootfs。我真的不知道在这里做什么。我正在考虑安装磁盘,但不知道在哪里。我有 sda,1,2,3,4 和 sdb,1。执行时du -h /dev/sda*在每行的开头显示一个零。但随后再次df -h显示我使用了 0% 的 USB。不过,即使我安装了它们,我也不确定我会做什么,因为我将如何重新安装 grub 或 gutmiboot? (如果这就是问题所在。我认为这是因为我看到了 grub 更新)。

启动实时 USB 时出现的错误是

:: running early hook [udev]
:: running hook [udev]
:: Triggering uevents...
:: running hook [memdisk]
:: running hook [archiso]
:: running hook [archiso_loop_mnt]
:: running hook [archiso_pxe_common]
:: running hook [archiso_pxe_ndb]
:: running hook [archiso_pxe_http]
:: running hook [archiso_pxe_nfs]
:: Mounting '/dev/disk/by-label/ARCH_201409' to '/run/archiso/bootmnt'
Waiting 30 seconds for device /dev/disk/by-label/ARCH_201409 ...
[    9.375197] sd 6:0:0:0: [sdb] No Caching mode page found
[    9.375197] sd 6:0:0:0: [sdb] Assuming drive cache: write through
ERROR: '/dev/disk/by-label/ARCH_201409' device did not show up after 30 seconds...
   Falling back to interactive prompt
   You can try to fix the problem manually, log out when you are finished
sh: can't access tty; job control turned off
[rootfs /]#

我已经把它chrooted了,现在我位于[root@(none)]#

解决方案

Unetbootin 似乎在创建 Arch CD 时遇到问题。这需要两个USB。回退到 sdb 上的 rootfs 并插入 sdc 的 USB2。 rootfs 没有 fdisk 或任何东西,所以我分别将 sda1,2,4 安装在 /mnt、/mnt/boot、/mnt/home 上。然后我chroot 到/mnt ( [root@(none) ]#)。

从那里我可以重新格式化sdc(将 archiso 复制到 /home/name/wherever 后)。然后dd bs=4M if=/path/to/arch.iso of=/dev/sdc && sync然后重新启动。

这给了我一个正常的足弓靴,我有 arch-chroot 并且我可以正确地systemctl start dhcpcd.service运行互联网(以太网)。我尝试重新安装 grub,但没有成功。

我和橡胶靴(遵循初学者指南)。很快,系统就可以工作了。

答案1

经过一番交谈后,我发布了一个答案,总结了在面临此类问题时需要遵循的一些有趣的线索。

在 USB 映像上安全启动

正如您在此处所看到的,您的系统在尝试从 USB 驱动器启动时似乎遇到了一些问题:

ERROR: '/dev/disk/by-label/ARCH_201409' device did not show up after 30 seconds...
Falling back to interactive prompt
You can try to fix the problem manually, log out when you are finished

虽然您的 BIOS 成功检测到可启动介质并启动启动顺序,但由于某种磁盘错误,Arch 无法正确启动。正如您在聊天中所说,您多次格式化并发送了密钥上的映像,这可能会导致映像或分区表损坏。将可启动 ISO 映像发送到 USB 驱动器时,通常最好确保驱动器确实干净,然后再继续:

$ fdisk /dev/sdX # sdX being your USB drive (NOT partition!)
Command (m for help): d

反复使用d,直到没有剩余的分区。然后,重新创建一个占据整个设备的干净分区:

$ fdisk /dev/sdbX
Command (m for help): n
Partition type:
    p   primary (1 primary, 0 extended, 3 free)
    e   extended
Select (default p): p
Partition number (1-4, default 1): 1
# ...

然后会跟随一些与尺寸相关的选项,每次都选择默认即可。完成后,使用 将更改写入磁盘w。现在分区表干净了一些,您可以格式化...

$ mkfs.ext4 /dev/sdX1

...并将您的 Arch ISO 发送到驱动器上:

$ dd if=/path/to/arch.iso of=/dev/sdX # Again, the device, NOT the partition.

注意:Arch ISO 和硬系统共享相同的架构非常重要!

此时,您可以重新启动计算机并进入实时系统,而不会遇到太多麻烦。只需确保您的 USB 驱动器在 BIOS 启动顺序中排在第一位即可。

进入旧的/损坏的系统

现在这有点棘手,我主要会重用Arch Wiki 的内容。您在这里有两个选择:

  • 使用 Arch 脚本(推荐)。
  • 手动更改所有内容。

在第一种情况下,您所要做的就是安装您的“自制" 分区:您在安装系统时创建的分区:

$ mount -o exec /mnt /dev/sda1      # / partition.
$ mount /mnt/boot /dev/sda2         # /boot partition.
$ mount /mnt/home /dev/sda3         # /home partition.
$ # ... and so on.

完成后,只需使用arch-chroot即可进入:

$ arch-chroot /mnt /bin/bash

现在,如果您想自己更改所有内容,则需要做更多的工作。首先挂载之前的系统,然后添加:

$ mount -t proc proc /mnt/proc/     # procfs
$ mount --rbind /sys /mnt/sys/      # sysfs
$ mount --rbind /dev /mnt/dev/      # /dev
$ mount --rbind /run /mnt/run/      # /run

您可能还需要一个可用的 DNS 解析器(但它不太可能被损坏):

$ cp /etc/resolv.conf /mnt/etc/resolv.conf

最后,进入内部:

$ chroot /mnt /bin/bash

调查中

基本上,您的系统刚刚断电。正如您所说,没有运行任何重要的任务(至少没有升级),因此损失肯定是有限的。首先,首先,检查你的日志。查看/var/log并使用journalctl以查找有关关闭之前发生的情况的信息。

重新安装GRUB

在聊天中,您说您的系统在启动菜单中不再可用,可能与您所做的最新更新有关。让我们重新安装它:

$ pacman -S grub # Should not do anything though.
$ grub-install --recheck /dev/sdX # Your hard drive.
$ grub-mkconfig -o /boot/grub/grub.cfg

相关内容