Làm cách nào để xóa thiết bị bộ đệm khỏi bcache?


7

Tôi tin rằng, một khi tôi đã chắc chắn rằng trạng thái thiết bị bộ nhớ cache của mình là "sạch":

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

Tôi chỉ có thể gỡ bỏ vật lý khỏi máy khi tắt nguồn hoặc khởi động với liveCD và làm sạch siêu khối bằng:

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

Nhưng tôi không thể tìm thấy bất cứ nơi nào một xác nhận, rằng thủ tục này sẽ không gây rối gì.

Câu trả lời:


12

Tôi bcachechỉ sử dụng trong cấu hình ghi thông qua và IIRC thậm chí sau đó bcachekhông thích chút nào nếu thiết bị bộ đệm biến mất trong khi máy đang chạy. Hy vọng bcachethiết bị sẽ bị đình trệ hoàn toàn nếu điều đó xảy ra.

Tôi đã không cố gắng xóa thiết bị bộ nhớ cache trong khi máy bị tắt nguồn, vì vậy tôi không thể nói bất cứ điều gì về điều đó. Tôi nghĩ mặc dù điều đó bcachevẫn còn khá cảm động, vì vậy tôi khuyên bạn nên thử điều đó với máy ảo hoặc máy thử vật lý trước.


Để xóa thiết bị bộ đệm một cách an toàn, bạn có thể tách bộ bộ đệm khỏi thiết bị bcache:

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

Để xác định bộ đệm cần thiết UUID, hãy xem /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

Vì vậy, ví dụ trong trường hợp này, hãy chạy:

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

Các statetập tin nên nói no cachesau đó:

host ~ # cat /sys/block/bcache0/bcache/state
no cache

6
Tôi có thể thiếu một số cảnh báo ở đây, nhưng AFAICT bộ đệm UUID không cần phải được lặp lại thành / sys / block / bcache0 / bcache / detach, bạn chỉ có thể lặp lại '1'. Ít nhất, nó hoạt động với tôi trên kernel 3.13. Để đính kèm, tuy nhiên, bạn cần cung cấp UUID.
DanielSmedegaardBuus

2

Giả sử bạn đã thiết lập thành công một bcache, bạn đã làm việc với nó, đặt rất nhiều dữ liệu quan trọng quá lớn để chỉ cần sao lưu và bắt đầu lại, khi bạn nhận ra rằng bạn nên thay thế thiết bị lưu trữ. Đây là cách bạn có thể làm điều đó. Giải pháp này dựa trên các thử nghiệm VM.

Hãy nói rằng chúng ta đang nói về thiết bị /dev/bcache0, thiết bị bộ đệm mới /dev/sdf1và thiết bị sao lưu /dev/md1. Tất cả các lệnh được thực hiện bởi root.

  1. Hãy chắc chắn rằng không có gì đang sử dụng thiết bị bcache0 đó.
  2. Làm theo thứ tự nào
    1. Xóa thiết bị bộ đệm giống như Martin von Wittich đã viết, bằng cách lặp lại setUUID /sys/block/bcache0/bcache/detach. Nếu bạn muốn phân vùng lại thiết bị lưu trữ, bạn cần khởi động lại, vì bcache vẫn khóa các phân vùng trừ khi bạn hủy đăng ký thiết bị.
    2. định dạng- thiết bị bộ đệm mới với make-bcache -C /dev/sdf1và ghi chú setUUID của thiết bị đó.
  3. Đăng ký thiết bị sao lưu của chúng tôi với bộ bộ đệm mới:

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

Không cần phải khởi động lại.


2

Lót:

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

Sau đó đợi cho đến khi xóa bộ nhớ cache:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.