Trả lời nhanh: ZFS gộp vai trò của hệ thống file và bộ điều khiển RAID vào một chỗ, nhờ đó nó biết dữ liệu nào đúng và tự sửa được lỗi âm thầm mà RAID thông thường bỏ qua. Kèm theo là ảnh chụp gần như tức thì, nén trong suốt và nhân bản sang máy khác. Giá phải trả là ăn RAM và một số cấu hình khó sửa sau khi tạo.
Với dữ liệu giữ nhiều năm, có một loại hỏng hóc không báo trước: bit trong tệp bị đổi giá trị mà không hệ thống nào biết, cho tới ngày bạn mở tệp và thấy nó hỏng. RAID thông thường không phát hiện được điều này vì nó không biết dữ liệu nào là đúng. ZFS sinh ra chủ yếu để giải quyết đúng vấn đề đó.
Vấn đề mà RAID thường không giải được
Giả sử bạn có hai ổ chạy soi gương và một khối dữ liệu trên một ổ bị đổi giá trị âm thầm, do lỗi phần cứng hoặc do đường truyền. Khi đọc, bộ điều khiển RAID lấy dữ liệu từ một trong hai ổ. Nó không có cách nào biết bản nào đúng, vì nó chỉ thấy hai chuỗi bit khác nhau.
ZFS xử lý khác. Mỗi khối dữ liệu được lưu kèm một mã kiểm tra, và mã đó nằm ở nút cha trong cây chứ không nằm cạnh khối dữ liệu. Khi đọc, nó tính lại mã và so. Không khớp thì nó biết ngay khối này hỏng, lấy bản đúng từ ổ còn lại, trả về cho ứng dụng, đồng thời ghi đè bản hỏng.
Việc này chạy âm thầm mỗi lần đọc. Kèm theo là tác vụ quét toàn bộ theo lịch, đọc lại mọi khối để phát hiện lỗi trước khi bạn cần tới dữ liệu.
Ảnh chụp và nhân bản
ZFS ghi theo cơ chế không đè lên dữ liệu cũ. Khi sửa một khối, nó ghi bản mới ở chỗ khác rồi cập nhật con trỏ. Nhờ vậy tạo ảnh chụp chỉ là việc giữ lại con trỏ cũ, mất vài phần nghìn giây và không tốn dung lượng thêm tại thời điểm tạo.
Hệ quả thực tế rất mạnh.
- Chụp mỗi giờ, giữ vài chục bản, phần dung lượng tốn thêm chỉ bằng phần dữ liệu đã thay đổi.
- Người dùng xóa nhầm tệp, khôi phục từ ảnh chụp trong vài giây.
- Nhân bản sang máy khác chỉ gửi phần chênh lệch giữa hai ảnh chụp, nên đồng bộ qua đường truyền hẹp vẫn khả thi.
Vẫn phải nhắc lại điều quan trọng: ảnh chụp nằm cùng kho với dữ liệu gốc. Kho hỏng là mất cả hai. Ảnh chụp chống xóa nhầm, còn nhân bản sang máy khác mới là sao lưu.
Nén, thứ nên bật mặc định
Trực giác nói rằng nén làm chậm vì tốn CPU. Với ZFS và thuật toán nén nhẹ mặc định thì thường ngược lại.
Lý do: CPU hiện đại nén và giải nén nhanh hơn nhiều so với tốc độ ổ đĩa. Dữ liệu nén lại nghĩa là đọc ít byte hơn từ đĩa, và phần thời gian tiết kiệm được lớn hơn phần CPU bỏ ra. Với dữ liệu nén tốt như văn bản, cơ sở dữ liệu hay tệp nhật ký, cả dung lượng lẫn tốc độ đều lợi.
Với dữ liệu đã nén sẵn như video hay ảnh, ZFS phát hiện nén không có lợi và lưu nguyên bản, nên bật nén không gây hại. Đây là lựa chọn nên bật cho mọi kho mới.
Riêng tính năng loại bỏ dữ liệu trùng lặp thì nên tắt trừ khi bạn biết chắc mình cần. Nó ăn RAM rất nhiều và bật rồi thì khó tắt.
Giá phải trả
Ba khoản, cần biết trước khi chọn.
RAM. ZFS dùng bộ nhớ làm bộ đệm đọc rất mạnh tay. Quy tắc thô là một gigabyte cho mỗi terabyte dung lượng, tối thiểu mười sáu gigabyte cho hệ thống thật. Thiếu RAM là chậm thấy rõ chứ không phải chậm một chút.
Cấu hình nhóm ổ khó sửa. Cách gom ổ thành nhóm chịu lỗi gần như cố định sau khi tạo. Mở rộng thường làm bằng cách thêm cả một nhóm mới, không phải thêm ổ lẻ. Nghĩa là phải lên kế hoạch cho ba năm ngay từ đầu.
Không chồng lên RAID phần cứng. ZFS phải nhìn thấy từng ổ riêng mới làm được việc của nó. Card RAID gộp ổ rồi đưa một khối duy nhất là cấu hình sai, và nó vô hiệu hóa gần hết lợi ích.
Dùng ở đâu và không dùng ở đâu
Nên dùng khi: làm kho lưu trữ giữ dữ liệu nhiều năm, làm kho cho máy ảo nơi ảnh chụp có giá trị cao, hoặc khi cần nhân bản sang máy khác qua đường truyền hạn chế.
Không nên dùng khi: máy ít RAM, hoặc hệ thống đã có card RAID phần cứng tốt và bạn không muốn đổi cấu hình phần cứng, hoặc khi người vận hành không quen Linux và cần một thứ đơn giản chạy êm.
Trong hệ sinh thái Proxmox, ZFS là lựa chọn phổ biến cho máy chủ đơn lẻ vì gộp được chịu lỗi, ảnh chụp và sao lưu vào một chỗ. Với cụm nhiều máy cần kho dùng chung thì Ceph thường hợp hơn.
Vấn đề mà lớp RAID thông thường không giải được
| Vấn đề | RAID thường | Hệ thống tệp có kiểm tra toàn vẹn |
|---|---|---|
| Một ổ hỏng hẳn | Xử lý được | Xử lý được |
| Dữ liệu bị đổi âm thầm do lỗi bit | Không phát hiện, chép nguyên lỗi sang ổ dự phòng | Phát hiện được nhờ mã kiểm tra, và sửa lại nếu còn bản đúng |
| Mất điện giữa lúc ghi | Có thể để lại dữ liệu ở trạng thái dở dang | Cấu trúc ghi được thiết kế để không rơi vào trạng thái dở dang |
| Cần quay lui về trạng thái vài giờ trước | Không có sẵn | Ảnh chụp trạng thái làm được trong vài giây |
Giá phải trả, nói thẳng
- Cần nhiều bộ nhớ. Đây là yêu cầu thật, không phải khuyến nghị cho vui. Thiếu bộ nhớ thì hiệu năng đọc kém rõ rệt.
- Mở rộng nhóm ổ không tự do như bạn tưởng. Có những cách bố trí rất khó thay đổi sau khi đã có dữ liệu, nên phải nghĩ kỹ ngay từ đầu.
- Không hợp với mọi loại tải. Với một số dạng ghi ngẫu nhiên rất dày, cấu hình mặc định có thể không phải lựa chọn phù hợp.
Việc vận hành hằng tháng
# Ba viec, tong cong khoang 10 phut moi thang: # 1. Xem trang thai nhom ozpool status -v # 2. Chay kiem tra toan ven du lieuzpool scrub ten-nhom# Voi nhom lon viec nay chay nhieu gio, nen dat vao cuoi tuan # 3. Kiem dung luong con laizfs list# Tren 80 phan tram la luc phai len ke hoach mo rong,# khong phai luc de tinh sau # Bat nen ngay tu dau neu du lieu la tai lieu van phong hoac ma nguon:zfs set compression=lz4 ten-nhom/thu-muc# Voi anh, video, tep da nen san thi bat nen khong giup gi # Anh chup trang thai KHONG phai ban sao luu.# Van phai chep du lieu ra mot noi khac.Câu hỏi thường gặp
ZFS có cần RAM có sửa lỗi không
Không bắt buộc, hệ thống vẫn chạy với RAM thường. Nhưng nên có với dữ liệu quan trọng, vì ZFS tin vào dữ liệu đọc từ bộ nhớ, và một bit lỗi trong RAM có thể được ghi xuống đĩa như dữ liệu hợp lệ, đúng thứ mà ZFS sinh ra để ngăn chặn.
Thêm một ổ vào nhóm đã có được không
Tùy phiên bản và tùy kiểu nhóm, và nói chung là hạn chế hơn nhiều người mong đợi. Cách mở rộng chính thống là thêm cả một nhóm ổ mới vào kho. Vì vậy hãy chọn kích thước nhóm cho đúng ngay từ lần tạo đầu tiên.
Nên chọn cấu hình chịu một ổ hỏng hay hai ổ hỏng
Với ổ dung lượng lớn, hãy chọn chịu được hai ổ hỏng. Thời gian dựng lại dữ liệu sau khi thay ổ kéo dài nhiều giờ tới nhiều ngày, và các ổ còn lại phải đọc toàn bộ trong thời gian đó, đúng lúc dễ lộ ra ổ thứ hai đang yếu.
Quét toàn bộ dữ liệu nên chạy bao lâu một lần
Mỗi tháng một lần là mức phổ biến cho ổ cơ. Nên đặt vào thời điểm hệ thống rảnh vì tác vụ này đọc toàn bộ dữ liệu và tạo tải đáng kể. Bỏ qua nó nghĩa là lỗi âm thầm chỉ bị phát hiện đúng lúc bạn cần dữ liệu.
