Btrfs super-recover 说所有超级块都很好,但 mount 不同意

Liv*_*ius 8 superblock linux-mint btrfs

我有一个用 BTRFS 格式化的外部驱动器似乎拒绝安装:

$ sudo mount -vs -t btrfs  -o ro,recovery,errors=continue /dev/sdb2 /media/user/dir
mount: /dev/sdb2: can't read superblock
Run Code Online (Sandbox Code Playgroud)

但是,当 BTRFS 认为所有超级块都可以时:

$ sudo btrfs rescue super-recover -v /dev/sdb2                 
All Devices:
        Device: id = 1, name = /dev/sdb2

Before Recovering:
        [All good supers]:
                device name = /dev/sdb2
                superblock bytenr = 65536

                device name = /dev/sdb2
                superblock bytenr = 67108864

                device name = /dev/sdb2
                superblock bytenr = 274877906944

        [All bad supers]:

All supers are valid, no need to recover
Run Code Online (Sandbox Code Playgroud)

如果我尝试指定sb=$((67108864/4))mount使用 1k 单位,因此您必须在具有 4k 块的系统上除以 4)以使用替代超级块之一,我会得到相同的错误。btrfs restore从驱动器读取数据似乎也没有问题,并且btrfs check只抱怨无效的缓存条目(并且clear_cache在安装时没有帮助)。这种情况以前在另一个驱动器上发生过一次,btrfs check --repair也没有奏效。 [1] 由于此驱动器上有大量数据,因此我有点不愿意将所有内容复制到其他地方btrfs restore(这也意味着在其他地方寻找空间)、重新格式化并将所有内容复制回来。

有没有办法解决这个问题?有没有办法btrfs直接调用,以便它执行挂载而不是依赖mount?我找不到mount.btrfs.

[1] 我有点不愿意使用btrfs check --repair它,因为它带有很多关于作为最后手段的警告,特别是在它以前不起作用之后。

unf*_*nfa 1

只需重新启动

看起来 Btrfs 在更改块设备文件名(如 /dev/sda)方面存在问题。我也遇到过同样的问题:

创建了一个 Btrfs 文件系统,写入了一些数据,卸载了,从我的系统中删除了磁盘(它是一个 2.5 英寸 SATA 驱动器)。一周后,我用热插拔重新连接了驱动器,但无法安装它。.Can't read superblockbtrfs rescue super-recover一切都很好。我什至已经完成了btrfs check,它也证实了一切都很好。

我正在运行较旧的内核:4.15 - 我认为这已经在较新版本的 Btrfs(较新的内核)中得到解决,但对于旧版本 - 只需重新启动即可。

系统将枚举驱动器,并且您的 Btrfs 文件系统挂载应该不会出现问题。

如果不起作用 - 尝试升级内核。