fsck 说“无法继续,正在中止”,但设备已卸载

fsck 说“无法继续,正在中止”,但设备已卸载

问题

我想修复损坏的逻辑卷和分区。SSD 最初由 Proxmox OS 使用。但是,我尝试通过 Ubuntu(安全图形)从 Live USB 恢复它。

起初,我尝试fsck直接运行损坏的逻辑卷。但是,我发现修复超级块会导致分区级别出现另一个错误。

$ sudo fsck -b 32768 /dev/dm-11

...
fsck.ext2: Bad magic number in super-block while trying to open /dev/mapper/pve-data_meta1
...


$ journalctl | grep error

...
Apr 03 05:43:30 ubuntu kernel: blk_update_request: critical medium error, dev nvme0n1, sector 1902965000 op 0x0:(READ) flags 0x80700
Apr 03 05:43:30 ubuntu kernel: Buffer I/O error on dev dm-11, logical block 42, async page read

看到这个错误日志后,我开始尝试修复 nvme0n1。但是警告说它正在使用中。

$ sudo fsck -n /dev/nvme0n1

...
Warning! /dev/nvme0n1 is in use.
ext2fs_open2: Superblock invalid, trying backup blocks...
ext2fs_open2: Bad magi number in super-block while trying to open /dev/nvme0n1
...

$ sudo fsck -b 32768 /dev/nvme0n1

...
/dev/nvme0n1 is in use.
e2fsck: Cannot continue, aborting.

我尝试过

  • 运行umount /dev/nvme0n1但它返回umount: /dev/nvem0n1: not mounted.
  • mount /dev/nvme0n1 /mnt说道mount: /mnt: /dev/nvme0n1 already mounted or mount point busy
  • 运行sudo systemctl stop systemd-udevd但不起作用。
  • 运行sudo swapoff -a但不起作用。
  • 运行lsof /dev/nvme0lsof /dev/nvme0n1并且lsof /dev/dm-11不返回任何内容。
  • 运行sudo e2fsck -f -b 32768 /dev/nvme0n1但不起作用。

欢迎提出任何想法或意见。请给我一些提示来解决这个问题。

版本

  • ubuntu-20.04.4
  • 桌面
  • amd64

答案1

在我的情况下,该设备由正在运行的 Docker 使用。在我停止它之后,一切都正常了

sudo systemctl stop docker

答案2

我在 Rockylinux 8 上遇到了非常类似的问题。本质上,问题的根源是 Linux 挂载命名空间(https://man7.org/linux/man-pages/man7/mount_namespaces.7.html)。

解释:假设您已将 /dev/sda5 挂载到 /mnt/1。如果某个进程将 /dev/sda5 挂载到其命名空间内,mount则实用程序fuser -vm将看不到它。因此,如果您卸载 /mnt/1,它将从 /mnt/1 卸载,但 /dev/sda5 仍将挂载到某个命名空间内。在我的情况下,它是 flatpak 应用程序,在主题启动器的情况下,它是 docker。

因此,如果您退出上述应用程序,命名空间将被清除(fs 卸载?)并且 /dev/sda5 将不再被挂载。因此 fsck(或 resize2fs)将起作用。

PS /me 仍在寻找可以扫描所有命名空间以查找隐藏坐骑的实用程序。

相关内容