我有一个在 bcache 之上带有 btrfs 文件系统的磁盘,该磁盘在我不再拥有的旧安装中使用(无意中被破坏)。当我插入驱动器时,/dev/bcache0 不会显示,并且不允许我回显/dev/{dev}
以/sys/fs/bcache/register
强制它。我已加载 bcache 模块,当我尝试 rmmod 它时,我收到一条“模块正在使用”消息。lsblk -f
表示驱动器上存在 bcache,但我无法将其映射到下面的 btrfs 文件系统并恢复我的数据。
我认为这并不重要,但这一切都在 dmcrypt 加密卷之上,我拥有该卷的密钥文件,并且可以毫无问题地访问该卷。
System information Distro: Arch Kernel: 4.12.5-1-ARCH x86_64 bcache Version: 1.0.8-1
答案1
将 bcache 分区挂载到循环设备上sudo losetup -f /dev/[DEVICE] -o 8192
bcache 数据可能只有 1KiB 或更小,但偏移量需要与磁盘的扇区大小对齐,在本例中为 8KiB。这非常有效,我已经连夜将文件传输到稳定的存储池。
如果其他人发现自己遇到了这个问题,请使用sudo smartctl -a /dev/[DEVICE]
(需要 smartmontools 包)获取磁盘的扇区大小,并使用该大小的增量作为我之前提到的 losetup 命令的偏移量,直到lsblk -f
运行时循环设备显示存在文件系统。
答案2
根据答案扩展 PSpacer 的答案这里
D) 在没有 bcache 的情况下恢复数据:
如果 bcache 在内核中不可用,则支持设备上的文件系统在 8KiB 偏移处仍然可用。因此,要么通过使用 --offset 8K 创建的支持设备的loopdev,要么通过 --data-offset 定义的任何值(当您最初使用
make-bcache
.例如:
losetup -o 8192 /dev/loop0 /dev/your_bcache_backing_dev
从https://www.kernel.org/doc/Documentation/bcache.txt。
创建环回设备
通过创建环回设备sudo losetup -o 8192 /dev/loop0 /dev/[DEVICE]
安装设备
然后你可以通过安装它sudo mount /dev/loop0 -o loop /mnt/[LOCATION]
之后,您可以转到/mnt/[LOCATION]/
并浏览您的分区。