Ada*_*ski 8 linux memory bcache
我相信,一旦我确定我的缓存设备状态是“干净的”:
$ sudo cat /sys/block/bcache0/bcache/state
Run Code Online (Sandbox Code Playgroud)
我可以在关机或使用 liveCD 启动时将其从机器上物理移除,并使用以下命令清理超级块:
$ sudo dd if=/dev/zero of=<backing device for cache> bs=1024 count=1024
Run Code Online (Sandbox Code Playgroud)
但我找不到任何地方确认,这个程序不会搞砸任何事情。
Mar*_*ich 13
我bcache只在 writethrough 配置中使用,即使bcache在机器运行时缓存设备消失,IIRC也不喜欢。bcache如果发生这种情况,预计设备会完全停止。
我没有尝试在机器断电时移除缓存设备,所以我不能说什么。我确实认为这bcache仍然很敏感,所以我建议你先用虚拟机或物理测试机试试。
要安全地移除缓存设备,您可以将缓存集与 bcache 设备分离:
echo <cache-set-uuid> > /sys/block/bcache0/bcache/detach
Run Code Online (Sandbox Code Playgroud)
要确定必要的缓存集 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
Run Code Online (Sandbox Code Playgroud)
因此,例如在这种情况下,运行:
echo eb99feda-fac7-43dc-b89d-18765e9febb6 > /sys/block/bcache0/bcache/detach
Run Code Online (Sandbox Code Playgroud)
该state文件应该说no cache后:
host ~ # cat /sys/block/bcache0/bcache/state
no cache
Run Code Online (Sandbox Code Playgroud)
假设你已经成功设置了一个bcache,你已经在处理它了,放了很多重要的数据,太大了,无法简单地备份并重新开始,当你意识到,你最好更换缓存设备。您可以这样做。该解决方案基于 VM 试验。
假设我们正在谈论设备/dev/bcache0,新的缓存设备是/dev/sdf1,支持设备是/dev/md1。所有命令均由 root 完成。
/sys/block/bcache0/bcache/detach。如果要对缓存设备重新分区,则需要重新启动,因为除非您取消注册,否则 bcache 仍会锁定分区。make-bcache -C /dev/sdf1记下该设备的 setUUID。使用新的缓存集注册我们的支持设备:
echo [setUUID of new cache device] >/sys/block/bcache0/bcache/attach
无需重新启动。