我在启动 Ubuntu 20.04.5 分区时遇到问题(我已将其安装在 Windows 10 的双启动中)。昨天我在 Ubuntu 上工作,一直收到消息说我的磁盘空间不足(大约 60Kb),我不得不切换到 Windows,但之后我无法重新启动进入 Ubuntu。这是我遇到的错误:
[FAILED] Failed to start **Load/Save Random Seed**
我使用的是 btrfs 文件系统。我该怎么办?谢谢
答案1
由于您使用 btrfs,因此您可以利用此文件系统的特性。
但首先,有几件事不能做:
- 尝试从 Windows 分区中删除文件,因为 btrfs 本质上使用 CoW,因此不会创建任何可用空间
- 尝试在不使用 btrfs 命令的情况下与子卷进行交互
现在,你可以做什么:
- 使用最新的 Ubuntu 或任何你喜欢的版本创建一个 live usb
- 从 live 启动,选择“试用 Ubuntu”
- 现在您可以从资源管理器中挂载 Ubuntu 分区,您将看到子卷
@
和@home
,如果您使用时间移位,您还将看到时间移位文件夹。您可以使用查看子卷的完整列表。我将路径称为和所在的btrfs subvolume list .
路径。@
@home
<btrfs-root>
- 如果你有 Timeshift,你可以尝试删除一些快照,也许这将释放足够的空间来再次启动系统:
btrfs subvolume delete ./timeshift/<date>
如果这不起作用或者您还想扩展 btrfs 分区,则可以使用 btrfs 发送/接收将@
和@home
子卷临时移动到外部驱动器,然后扩展分区并最终将子卷放回原位。
- 获取一个足够大的外部硬盘来存储数据,也就是分区的大小,然后连接它。用资源管理器打开它,创建一个文件夹并复制其路径。注意如果路径包含空格,在这种情况下需要用“”括起来。我将此路径称为
<ext-hdd>
。 - 打开终端并转到
<btrfs-root>
,现在我们要将子卷设置为只读*:btrfs property set -ts ./@ ro true
和btrfs property set -ts ./@home ro true
。(*您可以创建一个只读快照,但由于空间不足,我怀疑这是否可行。) - 现在我们可以使用
btrfs send
将文件系统转换为文件:btrfs send ./@ > "<ext-hdd>/root.img"
和btrfs send ./@home > "<ext-hdd>/home.img"
。您可以通过查看文件的属性来检查进度。如果您愿意,您可以对时间移位快照重复此过程并保存它们。 - 此时,您可以卸下外部硬盘并重新启动到 Windows 并缩小其分区。
- 重新启动进入实时 USB,然后使用 gparted 来:
- 删除旧的 btrfs 分区(所有数据都在外部硬盘上,您不会丢失任何东西)。
- 创建一个新的 btrfs 分区,其中包括缩小窗口后留下的空白空间。
- 在新的 btrfs 分区中打开一个终端,我将此路径称为
<btrfs-root-new>
。 - 您可以使用 检查空间是否有效扩展
btrfs filesystem usage .
。 btrfs receive -f "<ext-hdd>/root.img" ./root
和btrfs receive -f "<ext-hdd>/home.img" ./home
。完成此过程后,您将看到 中的 2 个文件夹<btrfs-root-new>
。您可以使用 检查 btrfs 是否识别了子卷btrfs subvolume list .
。- 新创建的子卷是只读的,为了使它们可读写,我们可以创建快照
btrfs subvolume snapshot ./root ./@
:btrfs subvolume snapshot ./home ./@home
- 现在我们可以删除只读子卷:
btrfs filesystem sync .
,btrfs subvolume delete ./root ./home
- 此时,系统有点回到原来的位置,但分区的 UUID 已更改,并且 grub 已损坏。为了修复此问题,我们将 chroot 到 btrfs 系统(如下这个答案)。
- 让我们创建一个文件夹来挂载
@
子卷:sudo mkdir -p /data/ubuntu
- 我们需要知道 btrfs 和 efi 分区的名称,我们可以使用 来获取
lsblk
。假设 btrfs 分区是/dev/<btrfs>
,而 efi 分区是/dev/<efi>
。仔细检查名称! - 现在你可以开始安装东西了:
sudo mount /dev/<btrfs> /data/ubuntu -o subvol=@ sudo mount /dev/<efi> /data/ubuntu/boot/efi sudo mount --bind /sys /data/ubuntu/sys sudo mount --bind /proc /data/ubuntu/proc sudo mount --bind /run /data/ubuntu/run sudo mount --bind /dev /data/ubuntu/dev
sudo chroot /data/ubuntu
。如果此操作有效,则系统很有可能在重启后正常运行。您现在已 chroot 到 btrfs 分区。- 我们先修复
fstab
一下。你可以用 获得新的 UUIDlsblk -fs
。复制相对于 的 UUID<btrfs>
。然后用 nano 或 vim 编辑,用之前复制的/etc/fstab
UUID 替换相对于/
和的行的 UUID。/home
- 现在我们可以修复 grub
grub-install /dev/<efi>
:update-grub
- 让我们创建一个文件夹来挂载
- 退出 chroot 环境并重新启动系统。如果一切按预期进行,您的系统将恢复到您离开时的状态!