キャッシュデバイスをbcacheから削除するにはどうすればよいですか?


7

私は、キャッシュデバイスの状態が「クリーン」であることを確認したら、次のように考えています。

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

電源がオフになっているとき、またはliveCDで起動しているときにマシンから物理的に削除して、次のコマンドでスーパーブロックをクリーニングできます。

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

しかし、私はどこにも確認を見つけることができません、この手順は何も台無しにしないでしょう。

回答:


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
私はここでいくつかの警告を見逃しているかもしれませんが、キャッシュUUIDを/ sys / block / bcache0 / bcache / detachにエコーする必要はありません。単に「1」をエコーすることができます。少なくとも、これはカーネル3.13では動作します。ただし、アタッチの場合は、UUIDを指定する必要があります。
DanielSmedegaardBuus 14年

2

bcacheの設定が成功し、すでにbcacheに取り組んでいて、単純にバックアップしてやり直すには大きすぎる大量の重要なデータをそこに置いた場合、キャッシュデバイスを交換するほうがよいことに気づいたとき。これはあなたがそれを行う方法です。このソリューションは、VMトライアルに基づいています。

デバイスについて話しているとしましょう。/dev/bcache0新しいキャッシュデバイス/dev/sdf1とバッキングデバイスです/dev/md1。ルートによって実行されるすべてのコマンド。

  1. そのbcache0デバイスを使用しているものがないことを確認してください。
  2. 順不同
    1. Martin Uvon Wittichが書いたように、setUUIDをにエコーして、キャッシュデバイスを削除し/sys/block/bcache0/bcache/detachます。キャッシュデバイスを再パーティション化する場合は、登録を解除しない限りbcacheがパーティションをロックするため、再起動する必要があります。
    2. format-新しいキャッシュデバイスを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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.