`sudo apt-get dist-upgrade`/`autoremove` 确实会损坏文件系统和引导

`sudo apt-get dist-upgrade`/`autoremove` 确实会损坏文件系统和引导

我有一个使用 Ubuntu Mate 17.04 的双启动设置,已完全修补并保持最新状态。(首先安装另一个操作系统 Windows 10。然后使用默认选项安装 Ubuntu。)

然而,最近,每次sudo apt-get dist-upgrade运行非平凡程序(即尝试安装某些东西)时,都会发生一系列奇怪的事件:

  1. 将会打印出前几个命令,看似成功了。
  2. 其余操作将会因有关只读文件系统的奇怪错误而失败,并且操作将自行中止。
  3. 现在启动失败。有时,我可以启动 Windows,但启动 Linux 要么失败,要么进入恢复 shell。
  4. 我使用 USB 恢复驱动器启动。
  5. gparted给出了有关坏超级块的奇怪警告。我着手修复它(只需要最后一个命令,但前两个命令告诉我该怎么做):
    • sudo fdisk -l | grep Linux | grep -Ev 'swap'
    • sudo dumpe2fs /dev/nvme0n1p6 | grep superblock
    • sudo fsck -b 32768 /dev/nvme0n1p6 -y
  6. 它打印出很多垃圾和负数并说它改变了一些东西。
  7. 重新启动进入真正的 Linux。
  8. sudo apt-get dist-upgrade现在可以运行完成,没有任何奇怪的错误。
  9. 重新启动任一操作系统均可。
  10. sudo apt-get autoremove删除旧的 Linux 内核。
  11. 重启失败。使用步骤 4-7 再次修复。

奇怪的是,这是可重复的(在我尝试 dist-upgrade 的最后 3 次中都发生过这个序列),并且在其他操作中不会发生。

我怀疑 Ubuntu 在尝试更新每个更新的 Linux 内核的引导加载程序时错误地更新了超级块。我暂时排除了以下可能性:

  • 从本质上来说,这不是 Windows 的问题。损坏发生时甚至没有启动 Windows。但是,Linux 可能会被启动模式搞糊涂。
  • 不是硬盘的问题。该驱动器几乎是全新的 SSD,第一次发生这种情况时,我检查了驱动器表面以查找坏块。无论如何,驱动器硬件一旦发现坏块就会重新映射,并且不会再次破坏超级块。

我的问题:我该怎么做才能解决这个问题?否则,下次不可避免地发生这种情况时,我应该从日志、配置角度查看什么,以便进行调试?

相关内容