无法启动磁盘空间不足的 Ubuntu 分区

无法启动磁盘空间不足的 Ubuntu 分区

我在启动 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 命令的情况下与子卷进行交互

现在,你可以做什么:

  1. 使用最新的 Ubuntu 或任何你喜欢的版本创建一个 live usb
  2. 从 live 启动,选择“试用 Ubuntu”
  3. 现在您可以从资源管理器中挂载 Ubuntu 分区,您将看到子卷@@home,如果您使用时间移位,您还将看到时间移位文件夹。您可以使用查看子卷的完整列表。我将路径称为和所在的btrfs subvolume list .路径。@@home<btrfs-root>
  4. 如果你有 Timeshift,你可以尝试删除一些快照,也许这将释放足够的空间来再次启动系统:btrfs subvolume delete ./timeshift/<date>

如果这不起作用或者您还想扩展 btrfs 分区,则可以使用 btrfs 发送/接收将@@home子卷临时移动到外部驱动器,然后扩展分区并最终将子卷放回原位。

  1. 获取一个足够大的外部硬盘来存储数据,也就是分区的大小,然后连接它。用资源管理器打开它,创建一个文件夹并复制其路径。注意如果路径包含空格,在这种情况下需要用“”括起来。我将此路径称为<ext-hdd>
  2. 打开终端并转到<btrfs-root>,现在我们要将子卷设置为只读*:btrfs property set -ts ./@ ro truebtrfs property set -ts ./@home ro true。(*您可以创建一个只读快照,但由于空间不足,我怀疑这是否可行。)
  3. 现在我们可以使用btrfs send将文件系统转换为文件:btrfs send ./@ > "<ext-hdd>/root.img"btrfs send ./@home > "<ext-hdd>/home.img"。您可以通过查看文件的属性来检查进度。如果您愿意,您可以对时间移位快照重复此过程并保存它们。
  4. 此时,您可以卸下外部硬盘并重新启动到 Windows 并缩小其分区。
  5. 重新启动进入实时 USB,然后使用 gparted 来:
    1. 删除旧的 btrfs 分区(所有数据都在外部硬盘上,您不会丢失任何东西)。
    2. 创建一个新的 btrfs 分区,其中包括缩小窗口后留下的空白空间。
  6. 在新的 btrfs 分区中打开一个终端,我将此路径称为<btrfs-root-new>
  7. 您可以使用 检查空间是否有效扩展btrfs filesystem usage .
  8. btrfs receive -f "<ext-hdd>/root.img" ./rootbtrfs receive -f "<ext-hdd>/home.img" ./home。完成此过程后,您将看到 中的 2 个文件夹<btrfs-root-new>。您可以使用 检查 btrfs 是否识别了子卷btrfs subvolume list .
  9. 新创建的子卷是只读的,为了使它们可读写,我们可以创建快照btrfs subvolume snapshot ./root ./@btrfs subvolume snapshot ./home ./@home
  10. 现在我们可以删除只读子卷:btrfs filesystem sync .btrfs subvolume delete ./root ./home
  11. 此时,系统有点回到原来的位置,但分区的 UUID 已更改,并且 grub 已损坏。为了修复此问题,我们将 chroot 到 btrfs 系统(如下这个答案)。
    1. 让我们创建一个文件夹来挂载@子卷:sudo mkdir -p /data/ubuntu
    2. 我们需要知道 btrfs 和 efi 分区的名称,我们可以使用 来获取lsblk。假设 btrfs 分区是/dev/<btrfs>,而 efi 分区是/dev/<efi>。仔细检查名称!
    3. 现在你可以开始安装东西了:
      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
      
    4. sudo chroot /data/ubuntu。如果此操作有效,则系统很有可能在重启后正常运行。您现在已 chroot 到 btrfs 分区。
    5. 我们先修复fstab一下。你可以用 获得新的 UUID lsblk -fs。复制相对于 的 UUID <btrfs>。然后用 nano 或 vim 编辑,用之前复制的/etc/fstabUUID 替换相对于/和的行的 UUID。/home
    6. 现在我们可以修复 grub grub-install /dev/<efi>update-grub
  12. 退出 chroot 环境并重新启动系统。如果一切按预期进行,您的系统将恢复到您离开时的状态!

相关内容