如何從 bcache 中刪除記憶體設備?
我相信,一旦我確定我的記憶體設備狀態是“乾淨的”:
$ sudo cat /sys/block/bcache0/bcache/state
我可以在機器關閉或使用 liveCD 啟動時將其從機器上物理移除,並使用以下命令清理超級塊:
$ sudo dd if=/dev/zero of=<backing device for cache> bs=1024 count=1024
但我無法在任何地方找到確認,這個程序不會搞砸任何事情。
假設你已經成功設置了一個 bcache,你已經在處理它,放了很多重要的數據,太大了,無法簡單地備份並重新開始,當你意識到你最好更換記憶體設備時。這就是你可以做到的。此解決方案基於 VM 試驗。
假設我們談論的是設備
/dev/bcache0
,新的記憶體設備是/dev/sdf1
,支持設備是/dev/md1
。所有命令都由 root 完成。
確保沒有使用該 bcache0 設備。
做任何順序
正如 Martin von Wittich 所寫,通過將 setUUID 回顯到
/sys/block/bcache0/bcache/detach
. 如果要對記憶體設備重新分區,則需要重新啟動,因為 bcache 仍然會鎖定分區,除非您取消註冊它。格式化新的記憶體設備
make-bcache -C /dev/sdf1
並記下該設備的 setUUID。使用新的記憶體集註冊我們的支持設備:
echo [setUUID of new cache device] >/sys/block/bcache0/bcache/attach
無需重新啟動。
我只在直寫配置中使用,即使在機器執行時記憶體設備消失
bcache
,IIRC也不喜歡。bcache
如果發生這種情況,預計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