Buộc cập nhật tổng kiểm tra trên zfs?


13

Gần đây tôi đã thay đổi thuộc checksumtính trên một trong các hệ thống tập tin zfs không trùng lặp của tôi thành sha256từ on(fletcher4) để hỗ trợ tốt hơn việc gửi các bản sao nhân bản, như trong lệnh này zfs send -DR -I _starting-snaphot_ _ending-snapshot_.

Tuy nhiên, trang web zfs có điều này để nói về send -D:

Cờ này có thể được sử dụng bất kể thuộc tính khấu trừ của tập dữ liệu, nhưng hiệu suất sẽ tốt hơn nhiều nếu hệ thống tệp sử dụng tổng kiểm tra có khả năng khấu trừ (ví dụ: sha256).

Trang web zfs cũng nói điều này về checksumtài sản:

Thay đổi thuộc tính này chỉ ảnh hưởng đến dữ liệu mới được viết.

Tôi không muốn tin tưởng fletcher4. Sự đánh đổi là không giống như SHA256, fletcher4 không phải là hàm băm giả ngẫu nhiên, và do đó không thể tin tưởng để không va chạm. Do đó, nó chỉ phù hợp để khấu trừ khi kết hợp với tùy chọn 'xác minh', giúp phát hiện và giải quyết các va chạm băm.

Làm thế nào tôi có thể cập nhật tổng kiểm tra của hệ thống tập tin, tốt nhất là không làm lệch hệ thống?

Câu trả lời:


11

Để thay đổi các thuộc tính (có thể là nén, sao chép hoặc kiểm tra) dữ liệu đã được ghi, phương pháp zfs là chạy dữ liệu thông qua một zfs send | zfs receivechuỗi. Rõ ràng, bạn không cần ngoại tuyến hệ thống cho điều đó, nhưng bạn sẽ cần

  1. đủ tài nguyên trong zpool / trên hệ thống của bạn để giữ hai bản sao dữ liệu được trích lập trong câu hỏi
  2. thời gian chết cho tập dữ liệu vì bạn cần phải hủy nó hoặc đổi tên nó trong thủ tục
  3. đủ thời gian và sự kiên nhẫn để hoàn thành thao tác

Vì bạn đã sử dụng tính năng chống trùng lặp cho zpool, nên việc chạy zfs send | zfs receivevới đích trên cùng một nhóm vì nguồn sẽ chỉ sử dụng không gian cần thiết cho các khối siêu dữ liệu mới được viết. Nhưng hãy chuẩn bị cho việc sao chép mất một thời gian - việc khấu trừ có thể rất chậm, đặc biệt là nếu bạn không có đủ RAM để giữ toàn bộ bảng khấu trừ trong RAM.

Bạn obvisouly sẽ cần phải dừng tất cả các hoạt động ghi để tạo bản sao cuối cùng, có thẩm quyền của bộ dữ liệu, nhưng có thể giảm thiểu thời gian chết bằng cách sao chép một ảnh chụp trước, dừng tất cả ghi và thực hiện tăng dần zfs send -i | zfs receivenhư bước cuối cùng.


Tôi hoàn toàn không rõ ràng về việc zfs receivecập nhật siêu dữ liệu của hệ thống tập tin. Dường như với tôi rằng nó sẽ nhanh hơn nhiều nếu chỉ đơn giản là lấy siêu dữ liệu. Tuy nhiên, làm như vậy có thể là không thể do khối tổng kiểm tra, thay vì tệp, tính chất cấp độ. Trong trường hợp zfs send | zfs receiveđó sẽ tạo thành một cơ sở chấp nhận được cho một giải pháp.
84104

1
gửi zfs | zfs recv sẽ thay đổi hiệu quả tất cả các siêu dữ liệu (lựa chọn nén, lựa chọn tổng kiểm tra, lựa chọn khấu trừ). zfs gửi đang tạo một đối tượng mà sau đó bạn nhập bằng cách sử dụng zfs recv, nó viết nó ra khá nhiều như thể đó là tất cả dữ liệu mới. Tuy nhiên - tôi nghĩ rằng bạn có thể có một quan niệm sai lầm về zfs gửi | recv liên quan đến sự trùng lặp. zfs gửi -D cố gắng khấu trừ dữ liệu / trong chính luồng /, không duy trì sự trùng lặp dữ liệu hiện có từ bộ dữ liệu nguồn. Đây là lý do tại sao không có yêu cầu rằng phía recv cũng đã kích hoạt tính năng trích xuất trên tập dữ liệu đích.
Nex7

Để giải thích thêm - hiện tại không có cách nào để zfs gửi | recv dữ liệu bị trùng lặp theo cách mà tất cả những gì đi qua dây là một bản sao duy nhất của dữ liệu bị trùng lặp và các mục trong bảng khấu trừ liên quan. Ngay cả khi nguồn và đích được đồng bộ hóa và bạn không gửi gì ngoài một ảnh chụp nhanh tăng dần. ZFS vẫn hiển thị dữ liệu gửi lên tới kích thước đầy đủ nếu dữ liệu trong đó xảy ra không thể lặp lại / trong phạm vi của chính luồng /. Bạn có thể có dữ liệu dễ dàng được khấu trừ trong POOL DDT, nhưng với tư cách là một đối tượng gửi nhỏ, hoàn toàn không bị trùng lặp.
Nex7
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.