Bagaimana cara menghapus perangkat cache dari bcache?

7

Saya percaya, setelah saya memastikan keadaan perangkat cache saya "bersih":

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

Saya hanya dapat menghapusnya secara fisik dari mesin saat dimatikan atau boot dengan liveCD dan bersihkan superblock dengan:

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

Tetapi saya tidak dapat menemukan konfirmasi di mana pun, bahwa prosedur ini tidak akan mengacaukan apa pun.

Adam Ryczkowski
sumber

Jawaban:

12

Saya bcachehanya menggunakan dalam konfigurasi writethrough, dan IIRC itupun bcachetidak suka sama sekali jika perangkat cache menghilang ketika mesin sedang berjalan. Harapkan bcacheperangkat berhenti sepenuhnya jika itu terjadi.

Saya belum mencoba menghapus perangkat cache saat mesin dimatikan, jadi saya tidak bisa mengatakan apa-apa tentang itu. Saya pikir itu bcachemasih cukup sensitif, jadi saya sarankan Anda mencobanya dengan VM atau mesin uji fisik terlebih dahulu.


Untuk menghapus perangkat cache dengan aman, Anda dapat melepaskan set cache dari perangkat bcache:

echo <cache-set-uuid> > /sys/block/bcache0/bcache/detach

Untuk menentukan set cache yang diperlukan UUID, lihat di /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

Jadi misalnya dalam hal ini, jalankan:

echo eb99feda-fac7-43dc-b89d-18765e9febb6 > /sys/block/bcache0/bcache/detach

The statefile harus mengatakan no cachesetelah itu:

host ~ # cat /sys/block/bcache0/bcache/state
no cache
Martin von Wittich
sumber
6
Saya mungkin kehilangan beberapa peringatan di sini, tetapi AFAICT cache UUID tidak perlu di-echo ke / sys / block / bcache0 / bcache / detach, Anda bisa menggema '1'. Setidaknya, itu bekerja untuk saya di kernel 3.13. Namun, untuk melampirkan, Anda harus menyediakan UUID.
DanielSmedegaardBuus
2

Misalkan Anda berhasil mengatur bcache, Anda sudah bekerja di sana, menaruh banyak data penting di sana terlalu besar untuk dicadangkan dan memulai kembali, ketika Anda menyadari, bahwa Anda sebaiknya mengganti perangkat caching. Ini adalah bagaimana Anda dapat melakukannya. Solusi ini didasarkan pada uji coba VM.

Katakanlah kita berbicara tentang perangkat /dev/bcache0, perangkat cache baru /dev/sdf1dan perangkat pendukung /dev/md1. Semua perintah dilakukan oleh root.

  1. Pastikan tidak ada yang menggunakan perangkat bcache0 itu.
  2. Lakukan dalam urutan apa pun
    1. Hapus perangkat cache seperti yang ditulis Martin von Wittich, dengan menggemakan setUUID ke /sys/block/bcache0/bcache/detach. Jika Anda ingin mempartisi ulang perangkat caching, Anda harus reboot, karena bcache masih mengunci partisi kecuali Anda membatalkan registrasi.
    2. format- perangkat cache baru dengan make-bcache -C /dev/sdf1dan catat setUUID perangkat itu.
  3. Daftarkan perangkat dukungan kami dengan set cache baru:

    echo [setUUID of new cache device] >/sys/block/bcache0/bcache/attach

Tidak perlu reboot.

Adam Ryczkowski
sumber
2

Satu-liner:

echo $(ls -d /sys/fs/bcache/*-*-* | cut -f5 -d/) > /sys/block/bcache0/bcache/detach

Kemudian tunggu hingga cache dihapus:

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
sumber