Chúng tôi đang làm việc trên một hệ thống Linux nhúng nhỏ (2.6,35-ish) với một thiết bị NAND bên trong nhỏ cho HĐH và các ứng dụng (250-500Meg) và thẻ SD với thẻ SD SDHC 8Gb cho dữ liệu.
Sức mạnh của đơn vị có thể bị cắt bất cứ lúc nào.
Hệ thống phải lưu trữ dữ liệu vào thẻ SD. Dữ liệu này khá quan trọng ... đó là toàn bộ mục đích của hệ thống. Các hệ thống thường hoàn toàn bị ngắt kết nối khỏi bất kỳ mạng nào ở các địa điểm từ xa và dữ liệu được truy xuất thông qua sneakernet cứ sau 4-8 tuần.
Hiện tại, chúng tôi chỉ đơn giản là có VFAT trên thẻ SD. Điều đó chủ yếu là để các khách hàng thử nghiệm đầu tiên có thể dễ dàng sao chép dữ liệu thủ công vào máy tính xách tay Win7 của họ.
Tuy nhiên, bây giờ tôi lo lắng rằng đó chỉ là vấn đề thời gian cho đến khi mất điện không đúng lúc gây mất dữ liệu.
Cách tốt nhất để cấu hình một hệ thống như vậy để ngăn ngừa mất dữ liệu là gì? JFFS2 nghe có vẻ như những gì tôi muốn về cách nó ghi dữ liệu (và nhu cầu về hiệu suất không cao chút nào), nhưng nghe có vẻ khá bẩn khi sử dụng block2mtd, v.v. Tôi cũng không chắc cách thức độ mòn của thẻ sẽ tương tác với nó.
Cách tốt nhất để làm điều này là gì?
BIÊN TẬP
Bây giờ tôi đang nghĩ đến việc rời khỏi hệ thống tập tin VFAT và phân bổ các tệp có kích thước ngày tại một thời điểm, chứa 0xFF, điều đó sẽ hạn chế đáng kể việc tiếp xúc với các lỗi trong chu kỳ nguồn. Sau đó, tôi chỉ có thể nối các bản ghi trong các khối được xử lý trước đó và hy vọng rằng thẻ SD không ngu ngốc đến mức chúng sẽ xóa / xóa mức ghi vào các vùng 0xFF.
Tôi có thể sử dụng noatime, nhưng có một thời gian danh nghĩa VFAT tương đương để ngăn ghi vào trường thời gian đã sửa đổi không? Tôi cần một số cách để ngăn chặn mọi cập nhật siêu dữ liệu cho đến khi tệp của một ngày mới được tạo.
CHỈNH SỬA 2
Một người nào đó trên sàn giao dịch ngăn xếp điện tử nhắc nhở tôi rằng cũng có dữ liệu ECC trên NAND, vì vậy không có cách nào để ngăn chặn nhu cầu xóa.
Vì vậy, liệu JFFS2 qua block2mtd có phù hợp trong tình huống này không?
EDIT 3
Nó tệ hơn tôi nghĩ. Thẻ SD tôi có sẽ xóa các khối dữ liệu ngay cả khi bạn ghi chính xác cùng một nội dung vào đĩa. Các eraseblocks là 64KB, và nó quá lớn để hoàn toàn trì hoãn việc viết. Tôi sẽ lưu trữ tới 128KB dữ liệu trong flash NAND (mà tôi có thể kiểm soát hành vi ghi của), trong một loại nhật ký, sau đó ghi các khối 128KB vào tệp được căn chỉnh 128KB trong phân vùng VFAT trên thẻ SD (trong trường hợp các thẻ SD khác có eraseblocks 128KB).
sync
lệnh sau mỗi lần ghi vào thẻ SD, nó sẽ ghi các bit ngay lập tức sau khi bạn thay đổi / tạo chúng mà không lưu trữ chúng trong RAM để thay đổi của bạn ít nhất là trên thẻ và sẽ không mất điện.
sync
có lẽ sẽ làm cho vấn đề tồi tệ hơn, vì nó làm tăng tỷ lệ thời gian mà siêu dữ liệu là cập nhật giữa.