Как удалить кеш-устройство из 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только в перезаписываемой конфигурации, и IIRC даже тогда bcacheсовсем не нравится, если устройство кеша исчезает во время работы машины. Ожидайте, что bcacheустройство полностью остановится, если это произойдет.

Я не пытался удалить устройство кеша при выключенном компьютере, поэтому ничего не могу сказать по этому поводу. Я думаю, что bcacheэто все еще довольно обидно, поэтому я рекомендую вам сначала попробовать это с виртуальной машиной или физической тестовой машиной.


Чтобы безопасно удалить устройство кеша, вы можете отсоединить набор кеша от устройства 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, вы уже работаете над ним, поместили много важных данных, слишком больших, чтобы их можно было просто скопировать и начать заново, когда вы поняли, что вам лучше заменить устройство кеширования. Вот как вы можете это сделать. Это решение основано на испытаниях виртуальных машин.

Допустим, мы говорим об устройстве /dev/bcache0, новое устройство кэширования /dev/sdf1и устройство поддержки /dev/md1. Все команды сделаны root.

  1. Убедитесь, что ничто не использует это устройство bcache0.
  2. Делать в любом порядке
    1. Удалите устройство кеша, как писал Мартин фон Виттих, повторив 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
sanmai
источник