我的笔记本电脑上有一个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,我最终通过将所有内容移至新分区并删除旧分区来“解决”此问题(请参阅下面的评论),但是如果有人有实际解决方案,我将保留此问题。
我最近对此有一个时间敏感的问题,以下文本保存了我的培根:
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。
这具有不修改驱动器上的分区表的额外好处,因此您可以复制一些数据,并有可能将其重新安装回其原始主机。
如果您了解内部原理,这并不难。我从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之后只有几个文件被破坏。
一种解决方案是将设备与缓存分离,并以no cache
或直通模式使用它。为此,请以root
: