如何从bcache中删除缓存设备?


7

我相信,一旦确定我的缓存设备状态为“干净”:

$ sudo cat /sys/block/bcache0/bcache/state

我可以将其关闭后再从计算机上物理移除,或者使用liveCD进行引导,并使用以下方法清洁超级块:

$ sudo dd if=/dev/zero of=<backing device for cache> bs=1024 count=1024

但是我在任何地方都找不到确认,这个过程不会弄乱任何东西。

Answers:


12

bcache仅在直写配置中使用,即使bcache计算机运行时高速缓存设备消失,IIRC 也不喜欢。bcache如果发生这种情况,期望设备完全停止。

在计算机关闭电源时,我没有尝试删除缓存设备,因此我对此一无所知。我确实认为这bcache仍然很棘手,所以我建议您首先使用VM或物理测试机进行尝试。


为了安全地删除缓存设备,可以将缓存集与bcache设备分离:

echo <cache-set-uuid> > /sys/block/bcache0/bcache/detach

要确定必要的缓存集UUID,请查看/sys/fs/bcache/

host ~ # ll /sys/fs/bcache/
total 0
drwxr-xr-x 7 root root    0 Feb 19 00:11 eb99feda-fac7-43dc-b89d-18765e9febb6
--w------- 1 root root 4096 Feb 19 00:11 register
--w------- 1 root root 4096 Feb  7 07:17 register_quiet

因此,例如在这种情况下,运行:

echo eb99feda-fac7-43dc-b89d-18765e9febb6 > /sys/block/bcache0/bcache/detach

state文件应该说no cache

host ~ # cat /sys/block/bcache0/bcache/state
no cache

6
我在这里可能会缺少一些警告,但是AFAICT不需要将缓存UUID回显到/ sys / block / bcache0 / bcache / detach,您只需回显“ 1”即可。至少,这对我在内核3.13上有效。但是,要进行附加,您需要提供UUID。
DanielSmedegaardBuus

2

假设您已经成功设置了一个bcache,您已经在对其进行处理,那么将许多重要数据放置得太大而无法简单地备份并重新开始,那么当您意识到最好更换缓存设备时。这就是您可以做到的。该解决方案基于VM试用。

可以说我们正在谈论该设备/dev/bcache0,新的缓存设备是/dev/sdf1,后备设备是/dev/md1。所有命令均由root执行。

  1. 确保没有任何东西正在使用该bcache0设备。
  2. 以任何顺序进行
    1. 就像Martin von Wittich所写的那样,通过将setUUID回显到来删除缓存设备/sys/block/bcache0/bcache/detach。如果要重新分区缓存设备,则需要重新启动,因为bcache仍会锁定分区,除非您取消注册。
    2. 格式化新的缓存设备,make-bcache -C /dev/sdf1并记下该设备的setUUID。
  3. 使用新的缓存集注册我们的后备设备:

    echo [setUUID of new cache device] >/sys/block/bcache0/bcache/attach

无需重启。


2

单线:

echo $(ls -d /sys/fs/bcache/*-*-* | cut -f5 -d/) > /sys/block/bcache0/bcache/detach

然后等待直到缓存清除:

while true; do if [[ $(cat /sys/block/bcache0/bcache/state) != "dirty" ]]; 
then echo "DONE"; break; 
else cat /sys/block/bcache0/bcache/dirty_data; sleep 30; fi; done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.