如何将bcache设备恢复为常规设备

问题描述 投票:8回答:3

我的笔记本电脑上有一个20 GB的SSD设备,因此我决定尝试使用bcache。它似乎工作正常,但是一段时间以来,我在启动时遇到了错误:

error on 0f3bbb55-6839-4ed6-8127-7976a969f726: corrupted btree at bucket 17571, block 483, 61 keys, disabling caching

我想我可以尝试修复它,但是我认为禁用bcache可能会更好-我对此不了解,如果发生故障,可能会丢失数据/头发,我想最好使用分区作为交换以更快地休眠。

我的问题是,如何在不重新格式化后备设备的情况下安全地停止在设备上使用bcache?

我正在使用/ dev / sda7作为我的备份设备,并使用/ dev / sdb2作为缓存设备(/ dev / sdb1是root)。

[如果有关系,我正在使用内核3.13.0-21-generic运行Ubuntu 14.04。

更新:我本质上是在寻找一种解决方案,该解决方案可以还原由make-bcache -B进行的更改。 FWIW,我最终通过将所有内容移至新分区并删除旧分区来“解决”此问题(请参阅下面的评论),但是如果有人有实际解决方案,我将保留此问题。

linux filesystems block-device diskcache bcache
3个回答
7
投票

我最近对此有一个时间敏感的问题,以下文本保存了我的培根:

D)不使用bcache恢复数据:

如果内核中没有bcache,则为后备文件系统该设备仍然可以8KiB的偏移量使用。所以要么通过loopdev--offset 8K或由--data-offset,当您最初使用make-bcache格式化bcache时。

例如:losetup -o 8192 /dev/loop0 /dev/your_bcache_backing_dev

来自https://www.kernel.org/doc/Documentation/bcache.txt

这具有不修改驱动器上的分区表的额外好处,因此您可以复制一些数据,并有可能将其重新安装回其原始主机。


3
投票

如果您了解内部原理,这并不难。我从blocks中了解到,为了将普通分区转换为bcache,它会将分区缩小一些,然后在其中添加bcache超级块。因此分区数据保留在那里。我做了一个测试,发现bcache超级块是8192字节大:

for i in {1..20}; do dd if=my_bcache_device skip=$i | file -; done

因此,要将其转换回来,只需更改分区表,使其在以后开始8192字节。使用gdisk(如果使用MBR,则使用fdisk),先删除分区,然后在新位置重新创建分区,然后完成:-)如果需要,可以稍后将其放大(但我没有尝试过)。 >

请注意,如果您的bcache脏了(并且您将无法再使用它),则必须fsck分区并弄乱损坏的数据。我很幸运,手动fsck之后只有几个文件被破坏。


1
投票

一种解决方案是将设备与缓存分离,并以no cache或直通模式使用它。为此,请以root

© www.soinside.com 2019 - 2024. All rights reserved.