1. Lưu trữ dựa trên flash
Có phụ thuộc vào loại đĩa (ổ cứng truyền thống so với đĩa trạng thái rắn) hoặc bất kỳ biến nào khác mà tôi có thể không biết? Có xảy ra (nếu có) chỉ trong Linux hoặc điều này có trong các hệ điều hành khác không?
Khi bạn có lựa chọn, bạn không nên cho phép lưu trữ dựa trên flash bị mất nguồn mà không tắt máy sạch.
Trên bộ lưu trữ chi phí thấp như thẻ SD, bạn có thể mất toàn bộ khối xóa (lớn hơn vài lần so với 4KB), mất dữ liệu có thể thuộc về các tệp khác nhau hoặc cấu trúc thiết yếu của hệ thống tệp.
Một số ổ SSD đắt tiền có thể yêu cầu cung cấp bảo đảm tốt hơn khi đối mặt với sự cố mất điện. Tuy nhiên, thử nghiệm của bên thứ ba cho thấy nhiều ổ SSD đắt tiền không thực hiện được. Lớp ánh xạ lại các khối cho "cân bằng hao mòn" là phức tạp và độc quyền. Thất bại có thể bao gồm mất tất cả dữ liệu trên ổ đĩa.
Áp dụng khung thử nghiệm của chúng tôi, chúng tôi đã kiểm tra 17 ổ SSD hàng hóa từ sáu nhà cung cấp khác nhau sử dụng tổng cộng hơn ba nghìn chu kỳ phun lỗi. Kết quả thử nghiệm của chúng tôi cho thấy 14 trong số 17 thiết bị SSD đã được thử nghiệm thể hiện các hành vi lỗi đáng ngạc nhiên do lỗi nguồn, bao gồm tham nhũng bit, ghi shorn, ghi không thể chỉnh sửa, hỏng siêu dữ liệu và lỗi toàn bộ thiết bị.
2017: https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat
2013: https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf?wptouch_preview_theme=enables
2. Quay ổ đĩa cứng
Ổ cứng quay có các đặc điểm khác nhau. Để an toàn và đơn giản, tôi khuyên bạn nên giả sử rằng chúng có độ không đảm bảo thực tế giống như lưu trữ dựa trên flash.
Trừ khi bạn có bằng chứng cụ thể, mà bạn rõ ràng là không. Tôi không có số liệu so sánh để quay ổ cứng.
Một ổ cứng có thể để lại một khu vực được viết không hoàn chỉnh với một tổng kiểm tra tồi, điều này sẽ cho chúng ta một lỗi đọc tốt sau này. Nói rộng hơn, chế độ thất bại này của ổ cứng là hoàn toàn mong đợi; hệ thống tập tin Linux nguyên gốc được thiết kế với nó trong tâm trí. Họ nhằm mục đích bảo tồn hợp đồng fsync()
khi đối mặt với loại lỗi mất điện này. (Chúng tôi thực sự muốn thấy điều này được đảm bảo trên SSD).
Tuy nhiên tôi không chắc liệu các hệ thống tập tin Linux có đạt được điều này trong mọi trường hợp hay không, thậm chí điều đó có khả thi hay không.
Lần khởi động tiếp theo sau loại lỗi này có thể yêu cầu sửa chữa hệ thống tập tin. Đây là Linux, có thể việc sửa chữa hệ thống tập tin sẽ hỏi một số câu hỏi mà bạn không hiểu, nơi bạn chỉ có thể nhấn Y và hy vọng rằng nó sẽ tự giải quyết.
2.1 Nếu bạn không biết hợp đồng fsync () là gì
Hợp đồng fsync () là nguồn cung cấp cả tin tốt và tin xấu. Bạn phải hiểu tin tốt trước.
Tin tốt: fsync()
được ghi chép tốt là cách chính xác để ghi dữ liệu tệp, ví dụ như khi bạn nhấn "lưu". Và người ta hiểu rằng các trình soạn thảo văn bản phải thay thế các tệp hiện có bằng cách sử dụng rename()
. Điều này có nghĩa là để đảm bảo rằng bạn luôn giữ tệp cũ hoặc lấy tệp mới (được chỉnh sửa fsync()
trước khi đổi tên). Bạn không muốn bị bỏ lại với một phiên bản nửa viết của tệp mới.
Tin xấu: trong nhiều năm, việc gọi fsync () trên hệ thống tệp Linux phổ biến nhất có thể khiến toàn bộ hệ thống bị treo trong hàng chục giây. Vì các ứng dụng không thể làm gì về điều này, nên việc sử dụng đổi tên () mà không có fsync () là rất phổ biến trên hệ thống tập tin này là điều rất phổ biến.
Do đó, các ứng dụng tồn tại không sử dụng fsync () chính xác.
Phiên bản tiếp theo của hệ thống tập tin này thường tránh được lỗi treo fsync () - cùng lúc khi nó bắt đầu dựa vào việc sử dụng đúng fsync ().
Đây là tất cả khá xấu. Hiểu lịch sử này có lẽ không được giúp đỡ bởi giai điệu bác bỏ và lời mời được sử dụng bởi nhiều nhà phát triển nhân xung đột.
Độ phân giải hiện tại là hệ thống tệp Linux phổ biến nhất hiện nay mặc định để hỗ trợ mẫu đổi tên () mà không yêu cầu fsync ()thực hiện "khả năng tương thích bug-for-bug" với phiên bản trước. Điều này có thể được vô hiệu hóa với tùy chọn gắn kết noauto_da_alloc
.
Đây không phải là một sự bảo vệ hoàn toàn. Về cơ bản, nó xóa IO đang chờ xử lý tại thời điểm đổi tên (), nhưng nó không đợi IO hoàn thành trước khi đổi tên. Điều này tốt hơn nhiều so với cửa sổ nguy hiểm 60 giây! Xem thêm câu trả lời cho Hệ thống tệp nào yêu cầu fsync () để đảm bảo an toàn khi gặp sự cố khi thay thế tệp hiện có bằng đổi tên ()?
Một số hệ thống tập tin ít phổ biến hơn không cung cấp bảo vệ. XFS từ chối làm như vậy. Và UBIFS cũng không thực hiện nó, rõ ràng nó có thể được chấp nhận nhưng cần rất nhiều công việc để làm cho nó có thể. Cùng một trang chỉ ra rằng UBIFS có một số vấn đề "TODO" khác về tính toàn vẹn dữ liệu, bao gồm cả việc mất điện. UBIFS là một hệ thống tập tin được sử dụng trực tiếp trên bộ lưu trữ flash. Tôi tưởng tượng một số khó khăn mà UBIFS đề cập với bộ lưu trữ flash có thể liên quan đến các lỗi SSD.