Nhờ ZFS, lượng dữ liệu mất chỉ khoảng 10 phút
(mastodon.social)- SSD 2 năm tuổi đột ngột chết, nhưng nhờ sao chép gia tăng của ZFS, hệ thống được khôi phục trên ổ mới và lượng mất mát thực tế chỉ khoảng 10 phút
- Kiến trúc là chụp snapshot toàn bộ filesystem mỗi 10 phút rồi gửi tới NAS; phần tự động hóa dùng zrepl
- Snapshot lưu trạng thái tại một thời điểm của hệ thống đang chạy và chỉ truyền phần thay đổi, nên có thể sao chép nền ngay cả trên mạng gia đình
- Quá trình khôi phục còn xa mới là tự động: phải chạy ZFS receive 625GiB qua đêm và khôi phục cả wrapper key mã hóa
- ZFS có gánh nặng lớn khi triển khai ban đầu và bảo trì, nhưng đã cho thấy hiệu quả khôi phục thảm họa khi khôi phục được cả trạng thái làm việc sau sự cố ổ đĩa thực tế
Sau lỗi SSD, phần mất mát còn lại là 10 phút
- Khi mở laptop để gửi email, màn hình đã đứng ở màu đen; sau khi khởi động lại, SSD 2 năm tuổi được xác nhận là đã chết
- Sau khi khôi phục hệ thống lên ổ mới, máy có thể dùng lại, và tổng lượng dữ liệu mất chỉ khoảng 10 phút
- Laptop được khôi phục đã boot vào đúng điểm đang bị gián đoạn, các tab trình duyệt cũng khôi phục công việc còn dang dở từ đêm trước
- Ý tưởng tiếp tục trạng thái cũ trên thiết bị mới, giống quảng cáo Chromebook 12 năm trước, đã thực sự hoạt động trong sự cố lần này
- Video liên quan: https://www.youtube.com/watch?v=lm-Vnx58UYo
Kiến trúc gần với sao chép hơn là backup
- Thay vì chỉ backup ổ đĩa, tác giả dùng cách sao chép toàn bộ filesystem
- Mùa đông vừa rồi, tác giả xây dựng hệ thống lưu trữ mạng gia đình để backup định kỳ các máy tính dùng cho công việc sáng tạo, và trong nhiều lựa chọn đã chọn sao chép gia tăng ZFS
- ZFS có thể tạo snapshot tại một thời điểm một cách hiệu quả ngay cả trên hệ thống đang chạy
- Khi gửi sang máy khác về sau, nó không truyền lặp lại toàn bộ dữ liệu mà chỉ truyền dữ liệu đã thay đổi
Gửi tới NAS mỗi 10 phút bằng zrepl
- Việc tự động hóa tạo snapshot và truyền tới NAS dùng zrepl
- Cấu hình là chụp snapshot toàn bộ filesystem mỗi 10 phút rồi truyền đi
- Nhờ snapshot gia tăng, bản sao có thể được giữ cập nhật ngay cả khi chạy nền trên mạng gia đình
- Lần chạy cuối mất 14 giây để truyền và gửi khoảng 64MiB
Gánh nặng thao tác thủ công lộ rõ trong quá trình khôi phục
- Khôi phục hệ thống là một quá trình cần học hỏi và phụ thuộc đáng kể vào thao tác thủ công
- Tác vụ ZFS receive 625GiB phải chạy qua đêm
- Snapshot được mã hóa bởi máy tính nguồn nên NAS không thể đọc nội dung
- Để thực sự dùng được bản backup, cũng phải khôi phục wrapper key mã hóa
- Cho đến khi xác nhận lần đầu rằng có thể giải mã dữ liệu, quá trình khôi phục rất bất an
Chi phí triển khai và thay thế phần cứng
- Thiết lập ban đầu của ZFS đòi hỏi thay toàn bộ filesystem nên chi phí khởi đầu cao
- Việc duy trì cần nhiều kiến thức liên quan và đi kèm quy trình vận hành có thao tác thủ công
- Dù vậy, việc đã thiết lập sao chép trước khi SSD hỏng lần đầu là may mắn, và trường hợp này cho thấy ưu điểm của ZFS
- Ổ đã chết là WD_BLACK SN850 vốn đi kèm đơn hàng Framework ban đầu
- Tác giả từng thấy trên diễn đàn Framework những trường hợp đáng lo về việc ổ này đột ngột chết hoặc không thể boot
- Cùng ngày, tác giả nhận được SK Hynix P41 SSD và Sabrent NVMe enclosure từ Amazon sau khoảng 3 giờ
1 bình luận
Ý kiến trên Hacker News
Vì đang dùng ZFS, có thể nói là đã chuẩn bị tốt hơn so với những người dùng SSD WD hay SanDisk khác
https://petapixel.com/2023/08/08/sandisk-portable-ssds-are-failing-so-frequently-we-can-no-longer-recommend-them/
https://www.theverge.com/22291828/sandisk-extreme-pro-portable-my-passport-failure-continued
https://news.ycombinator.com/item?id=37042587
https://www.theverge.com/23837513/western-digital-sandisk-ssd-corrupted-deleted-questions
https://news.ycombinator.com/item?id=37188736
Cả hai đều là HGST và đó thực sự là một ngày buồn, nhưng may là tôi vẫn đều đặn
zfs sendsang một địa điểm khác nên mất rất ít dữ liệu. ZFS thật tuyệtGoogle xem các truy vấn như “4TB SanDisk SSD” là để tìm trang sản phẩm, nên các tin tức như bài của The Verge hay Ars Technica bị đẩy xuống rất sâu trong kết quả tìm kiếm. Tôi đang thử công cụ tìm kiếm trả phí Kagi, nên đây là dịp tốt để xem một kiểu tìm kiếm web khác có thể cho ra kết quả khác hay không; nhưng nếu toàn bộ web đã tràn ngập các bài viết khen ngợi, thì dù quy tắc ưu tiên có khác cũng có vẻ khó hiển thị kết quả khác
5–6 kết quả đầu tiên là các trang mua sắm, tiếp theo là các bài đánh giá của easeus [1], techpowerup [2], anandtech [3], consumerreviews [4], nhưng không bài nào chứa từ “fail”. Cuối cùng, điểm duy nhất tốt hơn Google là có các gợi ý tìm kiếm liên quan như “sandisk 4tb ssd failure”, “sandisk 4tb ssd problems”; tuy nằm ở cuối trang nên khó thấy, nhưng vẫn còn hơn việc trang kết quả đầu tiên của Google hoàn toàn không xuất hiện từ “fail”
[1]: https://www.easeus.com/knowledge-center/sandisk-4tb-extreme-portable-ssd-v2-full-review.html
[2]: https://www.techpowerup.com/review/sandisk-ultra-3d-4-tb-ssd/
[3]: https://www.anandtech.com/show/16892/sandisk-extreme-pro-crucial-x6-4tb-portable-ssds
[4]: https://consumerreviews.store/sandisk-4tb-extreme-portable-ssd-up-to-1050mb-s-usb-c-usb-3-2-gen-2-review/
Ngay trước khi rời hẳn thế giới Linux, tôi bắt đầu đào bới chút ít tảng băng trôi mang tên btrfs, và thấy khá thú vị
Nó có vẻ rất tiềm năng ở nhiều tính năng như đổi mới sao lưu, cấu hình đĩa, v.v. btrfs không phải ZFS, nhưng có những phần chức năng chồng lấn, và cũng khá gần với “ZFS cho người nghèo”. Ngoài ra ZFS hơi lấn cấn về giấy phép, đóng gói và tình trạng được đưa vào kernel, nên trên một số hệ điều hành nhất định, btrfs vận hành hợp lý hơn nhiều
Ở Linux User Group, khi tôi nói rằng tôi đã phải rút dây nguồn để khởi động lại máy tính, tôi từng bị mắng một trận vì hành động ngu ngốc đó và được khuyên dùng ZFS. Tuy nhiên nếu xét việc hệ thống đó là Raspberry Pi, có lẽ cách nhìn về việc hành động nào trong hai hành động ấy là khôn ngoan cũng có thể khác đi
Miễn là không hành hạ thẻ SD, các thiết bị kiểu này chạy liên tục rất ổn định. ZFS trông thật sự tuyệt, nhưng kể cả một ngày nào đó mua NAS, tôi nghĩ mình cũng không muốn bỏ tiền cho thiết bị có thể chạy ZFS, nên chắc sẽ dùng RAID và ext4
Tôi vẫn tránh btrfs vì cứ vài tháng lại thấy bài “BTRFS làm mất dữ liệu của tôi”, rồi tranh cãi kéo dài xem đó có phải lỗi của btrfs không. Dạo này có vẻ ít thấy những bài như vậy hơn, nên có lẽ đã đến lúc xem lại
Đặc biệt là với image VM sparse, và tôi cho rằng zvol tốt hơn nhiều cho mục đích đó
Vài năm trước có khủng hoảng tụ điện, giờ không biết có phải chúng ta đang trải qua khủng hoảng thiết bị lưu trữ không
Việc mọi thiết bị lưu trữ ngày càng tệ đi đang trở nên vô lý. WD thì đang phá hỏng HDD bằng SMR, còn các nhà sản xuất nói thời gian hoạt động 3 năm của SSD và HDD đã là quá dài, không phải đùa đâu. Chỉ riêng năm nay, một SSD Kingston đã chết; cái đó khoảng 8 năm tuổi thì còn chấp nhận được, nhưng cả HDD di động WD cũng chết sau khoảng 2 năm
Internet ngày nay đầy rẫy chuyện mất dữ liệu và vấn đề tuổi thọ. 20 năm trước HDD cũng không phải thứ dùng mãi mãi, nhưng tôi nhớ ít nhất chúng chắc chắn trụ lâu hơn vòng đời hữu dụng của chiếc máy tính mua cùng
20 năm trước là thời của các ổ IBM Deathstar khét tiếng, khi lớp phủ từ tính theo nghĩa đen bong khỏi platter. Cũng có những ổ Maxtor kinh khủng chết sau 1–2 năm, và sau khi Seagate mua lại Maxtor, ổ Seagate cũng trở nên không ổn định một thời gian. Tôi vận hành một server gắn khoảng 8 đĩa và phải thay đều đều khoảng mỗi năm một cái
Ngược lại, hiện tôi đang hỗ trợ quản lý một server ZFS có hơn 20 ổ, và tuổi thọ ổ vào khoảng 4–5 năm. Hơn nữa máy tính thời đó lỗi thời nhanh hơn nhiều. Bây giờ máy tính 6 năm tuổi vẫn đủ dùng, nhưng hồi đó máy 3 năm tuổi thôi đã thấy khác biệt rõ
Chúng ta đang chạm giới hạn mở rộng, và tăng trưởng theo hàm mũ đang chậm lại
Giờ chuyện đó hầu như không xảy ra với SSD. Thậm chí một SSD Intel cũ từ cuối thập niên 2000, vốn nổi tiếng nhiều vấn đề, sau khi tôi dùng vài năm rồi đưa cho mẹ tôi, vẫn đang hoạt động bình thường trong cùng chiếc MacBook đời cũ đó. Tôi tò mò dữ liệu thực tế bên trong ra sao
Với SSD tôi cũng khá may, nhưng trên desktop tôi vẫn thường đặt thư mục
/homevà mảng RAID trên các ổ quay cũ, nên chỉ dùng SSD nhỏCó hai ngoại lệ. Tôi đã tháo hai ổ WD Red đời trước SMR khỏi NAS cũ để thay bằng đĩa lớn hơn; chúng hoàn toàn bình thường, được cho vào túi chống tĩnh điện và cất trong ngăn kéo. Khoảng 2,5 năm sau cần đĩa dự phòng nên lấy ra kiểm tra thì cả hai đều không hoạt động; một cái chết hẳn, cái còn lại chỉ vừa được nhận diện nhưng không đọc được. Cái đầu tiên cắm vào không hiện lên gì cả; tôi đã lau mọi tiếp điểm, gồm cả các chân PCB điều khiển, nhưng vô ích nên cuối cùng phải bỏ. Cái thứ hai chỉ có thể tái sử dụng sau khi format lại toàn bộ, nhưng ngay cả dùng testdisk cũng không có cách nào khôi phục dữ liệu cũ. Tôi chưa từng trải qua hay dự đoán chuyện như vậy, nên thật lòng khá lo
Đĩa luôn chết ngẫu nhiên, và đó cũng là một trong những lý do Sun tạo ra ZFS
Tóm rất ngắn gọn, luồng Mastodon đang trỏ tới https://zrepl.github.io
“zrepl là một giải pháp tích hợp một điểm đến cho nhân bản ZFS”
Ví dụ nếu có thể dùng trực tiếp S3 làm kho lưu trữ thì sẽ rất tuyệt
Zrepl là một lý do lớn giúp tôi yên tâm sống kiểu du mục số
Một script chạy khoảng mỗi đêm một lần sẽ mở một ZFS pool được bảo vệ bằng LUKS với header riêng, rồi sao chép tất cả snapshot. Vỏ NVME đó luôn nằm trong “túi” không rời khỏi người tôi
Nhờ cấu hình này và NixOS, tôi có thể provision một laptop mới giống hệt trong khoảng 10 phút. Gần đây tôi còn thêm nhân bản offsite, nên ngay cả nếu bị cướp cực kỳ tệ thì khả năng mất dữ liệu nghiêm trọng gần như bằng 0
Zrepl là phần mềm thật sự tuyệt vời. Dễ bắt đầu, nhưng tinh vi và mạnh mẽ đến mức khi cần có thể chạm vào mọi điểm tinh chỉnh. Tôi không thể khen đủ
Việc chụp snapshot mỗi 10 phút cho hệ thống tệp có thể đã ảnh hưởng đến cái chết của SSD không?
Theo trực giác thì dù chụp snapshot rất thường xuyên, lượng ghi bổ sung có vẻ cũng khá ít. Dù vậy nếu có đo đạc khoa học thì tốt hơn
Trên một số máy chủ tôi từng quản lý trước đây, tôi dùng ZFS để chụp snapshot mỗi phút, mỗi giờ và mỗi ngày. Snapshot theo phút bị xóa sau 60 phút, còn các snapshot theo giờ và theo ngày được sao lưu bằng cron job trên một máy khác. Snapshot theo giờ được giữ khoảng 72 giờ, còn snapshot theo ngày được giữ vĩnh viễn. Snapshot theo phút nhằm để hoàn tác lỗi thủ công trong lúc migration SQL, và nó hoạt động tốt
Hiện tôi vẫn dùng ZFS trên máy chủ FreeBSD, nhưng các dự án hiện tại có lưu lượng thấp và ít khi thay đổi dữ liệu quan trọng, nên trên máy chủ cá nhân tôi chỉ chụp snapshot thủ công khoảng mỗi tuần một lần và kích hoạt sao lưu thủ công từ máy chủ khác. Ngoài ra giờ tôi chỉ snapshot phần hệ thống tệp có cơ sở dữ liệu PostgreSQL và dữ liệu ứng dụng. Dữ liệu hệ điều hành thì tôi không còn quá bận tâm. Nếu xảy ra hỏng hóc phần cứng nghiêm trọng, tôi sẽ cài lại OS; các giá trị cấu hình quan trọng được ghi chép lại, và khi script sao lưu chạy thì nó sẽ sao chép các giá trị đó thay vì những thứ lặt vặt khác
Snapshot không ghi nhiều, và cả SSD lẫn ZFS đều là cơ chế copy-on-write. Tức là chi phí ghi sau snapshot giống như trước snapshot
Tuy nhiên vẫn thiếu ngữ cảnh. Cả SSD lẫn ZFS đều không thích trạng thái đầy hoặc gần đầy. Nếu dữ liệu làm việc khoảng 650GB và ổ là 1TB, snapshot có thể dễ dàng đẩy mức sử dụng ổ vượt 90%. Chỉ riêng điều đó cũng có thể đã khiến ZFS khó chịu
Giả sử dữ liệu 100GB, kích thước block 128K và con trỏ 64-bit, dữ liệu mới được ghi trong lúc snapshot có lẽ vào khoảng 5MB. Nếu làm việc này 6 lần mỗi giờ, 52.560 lần mỗi năm, thì để xem có đủ gây mòn ổ sớm không, con số là khoảng 256GB mỗi năm. Khả năng cao là dưới 1% độ bền ghi của SSD. Vì vậy tôi sẽ ngạc nhiên nếu snapshot mỗi 10 phút là nguyên nhân quan trọng
Tôi có thể sai, và ước tính này được đưa ra nhờ hỏi một nguồn không đáng tin cậy lắm. Rất hoan nghênh chỉnh sửa. Dù vậy, nếu ước tính của tôi còn cao hơn thực tế mà vẫn ít có khả năng ảnh hưởng đến tuổi thọ, thì bản thân luận điểm này có thể không có nhiều ý nghĩa
ZFS là copy-on-write, nên khi thay đổi tệp vẫn phát sinh cùng lượng ghi, chỉ là một phần dữ liệu cũ không bị xóa
Khi đó 5MB ghi mỗi 10 phút thực tế sẽ thành 600MB mỗi giờ, 4,8TB cho một ngày làm việc 8 giờ, 24TB cho tuần 40 giờ, và trên ổ 1TB thì tương đương 3,43 DWPD theo thời gian thực, hay 2500TBW trong 2 năm thời gian thực[2]
Độ bền ghi chính thức của SN850 là 600TBW, nhưng vì vấn đề bảo hành nên dĩ nhiên nhiều khả năng đó là con số được hạ thấp một cách thận trọng. Trùng hợp là 2500TB cũng là mức độ bền phổ biến ở nhiều SSD trong thị trường này. Nhìn tổng thể thì nghe có vẻ không phải hoàn toàn bất khả thi
Nếu ổ vẫn còn sống, tôi tò mò controller nói gì trong dữ liệu SMART. Trên Linux, chạy
apt install smartmontools; smartctl -s on /dev/sda; smartctl -A /dev/sdasẽ in ra một bảng[4]. Trên Windows thì cài CrystalDiskInfo[3] là được1: https://news.ycombinator.com/item?id=29165202
2: DWPD: drive writes per day, TBW: Total Bytes Written - tính bằng terabyte
3: https://crystalmark.info/en/software/crystaldiskinfo/
4: “Pre-fail” có nghĩa là giá trị đó phải thay đổi ngay trước khi hỏng, còn “Old_age” nghĩa là giá trị biểu thị tuổi thọ; không có nghĩa là “cái này tệ và sắp hỏng” hay “ổ này đã cũ”. Pre-fail và Old_age luôn được hiển thị cho mọi mục. Tôi nghĩ lẽ ra từ lâu ai đó nên đổi chúng thành “somewhat_boolean” và “life_remain”
Tôi thường sao lưu gia tăng bằng Apple Time Machine lên một máy chủ Synology dùng ổ đĩa quay
Khi làm việc rủi ro hoặc nâng cấp máy, tôi cũng mirror ổ nội bộ sang SSD gắn ngoài. Cách này hoạt động tốt. Khôi phục bằng Time Machine có thể khá chậm, nhưng phần lớn dữ liệu quan trọng của tôi nằm trong Git và các repository được host nên không phải vấn đề lớn. Thỉnh thoảng tôi dùng Time Machine khi muốn khôi phục một tệp riêng lẻ
Tôi cũng có một ổ SanDisk khét tiếng[0], nhưng không dùng cho việc quan trọng. Nó chỉ chứa thư viện game. Là người dùng Mac nên game không phải yếu tố lớn, và nếu chúng chết thì tôi cũng sẽ không khóc
[0] https://arstechnica.com/gadgets/2023/08/sandisk-extreme-ssds-are-worthless-multiple-lawsuits-against-wd-say/
Có vẻ nó hoạt động tốt hơn nhiều so với sao lưu tự động hoặc sao lưu theo thời gian của Apple
Snapshot của tôi được mã hóa trên máy tính gốc. Điểm hay là NAS không thể đọc được
Vì vậy để dùng bản sao lưu, tôi cũng phải khôi phục wrapper key mã hóa. Nói thật, cho đến khi có xác nhận đầu tiên rằng có thể giải mã dữ liệu, tôi đã khá sợ
Không nên giả định rằng một phương thức sao lưu tùy chỉnh là hoạt động cho đến khi thực sự kiểm tra định kỳ rằng có thể khôi phục dữ liệu
Tương lai gần của Linux ở đây là bcachefs
https://bcachefs.org/
Dù việc đưa vào upstream vẫn đang được tiến hành
Câu “cho đến khi có xác nhận đầu tiên rằng có thể giải mã dữ liệu, tôi đã khá sợ” nghe như nghĩa là quy trình này chưa được kiểm thử và ghi chép tài liệu đầy đủ như mức tối ưu
Với hệ thống gia đình hay máy desktop cá nhân thì chuyện này không quá hiếm. Nhưng trên server production thì chắc sẽ không muốn phải ứng biến tìm ra quy trình khôi phục ngay tại chỗ
Khi tải không thành công, tôi đã có một khoảnh khắc khá tuyệt vọng, nhưng rồi nhanh chóng nhận ra sai lầm. Trong những khoảnh khắc thất bại như vậy, các lỗ hổng của toàn bộ quy trình bỗng hiện ra rõ ràng đến chói mắt