Linux

如何從 bcache 中刪除記憶體設備?

  • December 5, 2019

我相信,一旦我確定我的記憶體設備狀態是“乾淨的”:

$ 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 完成。

  1. 確保沒有使用該 bcache0 設備。

  2. 做任何順序

  3. 正如 Martin von Wittich 所寫,通過將 setUUID 回顯到/sys/block/bcache0/bcache/detach. 如果要對記憶體設備重新分區,則需要重新啟動,因為 bcache 仍然會鎖定分區,除非您取消註冊它。

  4. 格式化新的記憶體設備make-bcache -C /dev/sdf1並記下該設備的 setUUID。

  5. 使用新的記憶體集註冊我們的支持設備:

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

引用自:https://unix.stackexchange.com/questions/115764