首先,是的,事实上,我确实怀疑将文件系统从 ext4 更改为 btrfs 会破坏 GRUB 和 fstab。
现在,这就是发生的事情。我无缝地将文件系统转换为btrfs并且效果很好。现在,我似乎无法启动,因为我收到“GRUB 错误:未知文件系统”。如何修复 GRUB 和 fstab 以使用新文件系统进行更新?
这是一个漫长而奇怪的过程,但它确实有效。
第一个问题是我使用的是 GPT 分区表。仅仅因为您可以安装 Linux 并以某种方式引导它并不意味着 GRUB 工作正常。我认为如果我之前可以启动,那么一切都好,但事实并非如此。创建一个bios_boot设置了标志的未格式化分区。执行此操作的最佳方法是从一开始就在硬盘上安装任何内容之前,但如果您稍后需要执行此操作,它仍然可以工作,尽管您的磁盘末尾会出现一个奇怪的分区。我喜欢奇怪的东西出现在磁盘的开头。无论如何,这就是您需要做的。
由于 GPT 的效率和智能程度比 MBR 高出 1,000,000 倍(但支持程度仍然低得多),因此磁盘上没有空间用于安装 GRUB。通常,GRUB 将自身安装在分区之间的磁盘开头,因为 MBR 后面需要有一个间隙。诡异的?完全是这样,但事实就是这样。让我们开始吧。
首先,确保您拥有正确的驱动器。/dev/sdX在您知道这就是您认为的驱动器之前,请勿继续。现在您已经完成了尽职调查,请再做一次。三次,只是为了确定。好吧,我们继续吧。
现在,安装parted( # apt-get install parted) 并针对您的驱动器启动它:
$ sudo parted /dev/sdX
Run Code Online (Sandbox Code Playgroud)
如果尚未设置引导记录标签为 GPT:
(parted) mklabel gpt
Run Code Online (Sandbox Code Playgroud)
接下来,为 BIOS 引导内容创建一个分区。我把我的放在磁盘的开头,所以我的看起来像这样:
(parted) mkpart primary 0MB 1MB
Run Code Online (Sandbox Code Playgroud)
您应该更改上面的数字来告诉parted您希望分区分别在哪里开始和停止。
现在,让我们在此分区上设置标志。您可能希望print在parted中运行命令来获取分区号。就我而言,1因为它将是第一个分区,所以我们如何在其上设置标志:
(parted) set 1 bios_grub on
Run Code Online (Sandbox Code Playgroud)
好的,既然您已经创建了这个分区,我们就完成了这一部分。如果您愿意,可以通过执行以下操作来创建实际的文件系统分区:
(parted) mkpart primary 1MB 1TB
Run Code Online (Sandbox Code Playgroud)
仅当您确实想要执行此操作并且尚未安装任何内容时才运行上述命令。如果您的系统已损坏,请不要创建另一个分区。
现在,您需要修复 GRUB 和 fstab。我们将首先解决 fstab。加载 Live CD 并将文件系统挂载到/mntLive CD 上。
$ sudo mount /dev/sda /mnt
Run Code Online (Sandbox Code Playgroud)
现在,使用以下命令获取硬盘的 UUID blkid:
$ sudo blkid /dev/sda1
UUID="abcdef-1231241241-12124124-12ae21331"
Run Code Online (Sandbox Code Playgroud)
获取 UUID,我们将/etc/fstab使用它进行更新。打开/etc/fstabUUID 并使用您刚刚从 获得的新 UUID 进行更新blkid。既然您已经更改了文件系统类型,请确保也替换ext4为。btrfs查找其中包含 的行/,这是您的根分区,这是您要调整的分区。伟大的。
现在,让我们更新 grub。
$ sudo grub-install --root-directory=/mnt /dev/sda
Run Code Online (Sandbox Code Playgroud)
Grub 将更新并安装到硬盘上。凉爽的。下一步是更新 GRUB 配置文件。让我们将一些系统分区绑定到/mnt目录中:
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /sys /mnt/sys
$ sudo mount --bind /proc /mnt/proc
Run Code Online (Sandbox Code Playgroud)
现在,让我们 chroot 进入您的文件系统。
$ sudo chroot /mnt
Run Code Online (Sandbox Code Playgroud)
这将有效地让您登录到文件系统,就像您的计算机正在运行它一样。接下来,更新 grub。
$ sudo update-grub2
Run Code Online (Sandbox Code Playgroud)
希望它能愉快地进行更新并更新所有内容。凉爽的。现在,回到您的生活并备份您的更改。从错误中吸取教训。
| 归档时间: |
|
| 查看次数: |
4252 次 |
| 最近记录: |