Hệ thống tập tin nào cung cấp sự bảo vệ tốt nhất để bảo vệ dữ liệu chống tham nhũng do mất điện?


9

Tôi đang chạy một hệ thống nhúng nhỏ uClibcbusyboxdựa trên thiết bị x86. Tôi đang sử dụng initramfs nhưng tôi cũng gắn một ext3thư mục tùy chỉnh trên thiết bị flash nhỏ gọn ở chế độ IDE mà tôi đang sử dụng để lưu trữ dữ liệu ghi nhật ký đo lường liên tục được tạo bởi ứng dụng c ++ được viết tùy chỉnh. Tôi đã chọn ext3hệ thống tệp vì nó được khuyến nghị về an toàn chống mất điện khi sử dụng ổ CF ở chế độ IDE trong một vài cuốn sách tôi đã đọc ( Xây dựng hệ thống nhúng nhúng của Karim Yaghmour và Primer Linux nhúng của Christopher Hallinan). Điều này đặc biệt quan trọng và dữ liệu rất quan trọng.

Tuy nhiên, do một số ý kiến ​​trong câu hỏi trước đây của tôi Nhầm lẫn với cách khôi phục các tệp ext3 bị hỏng nếu mất điện trong khi ghi tệp , có vẻ như trên thực tế hệ thống tệp này không đảm bảo an toàn chống hỏng dữ liệu do mất điện thua. Vì vậy, tôi muốn biết nếu

  1. ext3thực sự là sự lựa chọn tốt nhất cho thiết lập này?
  2. Có phải mất điện trong quá trình ghi đĩa chỉ làm hỏng phần dữ liệu tôi đang nối vào tệp theo định kỳ hoặc nó có thể làm hỏng toàn bộ tệp không?
  3. Là dữ liệu không được ghi tại điểm mất điện hoàn toàn an toàn? Cụ thể, có bất kỳ rủi ro nào mà initramfs.cpiotập tin của tôi cũng có thể bị hỏng không?
  4. Có phương pháp nào tôi có thể sử dụng trong mã ứng dụng của mình để bảo vệ dữ liệu (nghĩa là tạo thêm một phân vùng và ghi dữ liệu của mình vào hình ảnh phản chiếu để luôn có 2 bản sao) - tốc độ không phải là vấn đề thực sự đối với ứng dụng của tôi vì vậy các hoạt động sao chép tốn kém được chấp nhận

Tôi đã xem và đọc các câu trả lời cho câu hỏi liên quan này: Hệ thống tập tin nhật ký có đảm bảo chống tham nhũng sau khi mất điện không? , nhưng nó không hoàn toàn bao gồm một số điều làm tôi bối rối.

Tôi nhận ra rằng tôi đang hỏi rất nhiều câu hỏi nhưng có vẻ như mặc dù đã đọc rất nhiều tài liệu nhưng tôi đã thất bại cơ bản để hiểu những rủi ro đối với dữ liệu của mình trong trường hợp mất điện.

Câu trả lời:


11

Như với tất cả mọi thứ liên quan đến bảo mật, không có bất kỳ sự đảm bảo nào, nhưng bạn cũng cần phải cân bằng rủi ro (và chi phí) với xác suất. Từ kinh nghiệm (và tôi đã chạy hàng tá * nix boxen từ thời kỳ đen tối), tôi chưa bao giờ thực sự bị hỏng hệ thống tập tin gây ra đáng kể.

Một số trong số các máy này thậm chí còn chạy trên các hệ thống tệp không được ghi nhật ký (thường là ufs và ext2). Một số trong số chúng đã được nhúng và một số ít là điện thoại di động như Nokia N900 - vì vậy nguồn cung cấp năng lượng tốt không được đảm bảo.

Không phải là tham nhũng hệ thống tập tin không thể xảy ra, chỉ là xác suất xảy ra là đủ thấp để nó không làm bạn lo lắng. Tuy nhiên, không có lý do để không phòng ngừa các cược của bạn.

Trả lời các câu hỏi theo nghĩa đen của bạn:

  1. Ít nhất là cuốn sách đầu tiên bạn tham chiếu đã được viết trước đây ext4- khi tác giả đề nghị sử dụng ext3, họ thực sự nói rằng 'không sử dụng các hệ thống tệp không ổn định hoặc không bị tạp chí như ext2'). Hãy thử ext4, nó khá hoàn thiện và có một số tùy chọn phù hợp cho các đĩa không quay có thể kéo dài tuổi thọ của thiết bị flash của bạn.
  2. Rất có thể nó sẽ mất bạn một hoặc hai khối cuối cùng, không phải toàn bộ tập tin. Với một hệ thống tập tin tạp chí, đây sẽ là mất mát duy nhất. Có những kịch bản thất bại trong đó tôi có thể thấy dữ liệu ngẫu nhiên được phun trên tệp, nhưng chúng có vẻ giống như một thiên thạch micromet đập vỡ ngay qua thiết bị nhúng của bạn.
  3. Xem 2. Không có gì là an toàn 100,00%.
  4. Nếu bạn có kênh IDE thứ hai, hãy gắn thẻ CF thứ hai vào đó và lấy bản sao lưu của hệ thống tệp theo định kỳ. Có một số cách để làm điều này: rsync, cp dump, dd, thậm chí sử dụng md(4)(phần mềm RAID) thiết bị (bạn thêm ổ đĩa thứ hai thỉnh thoảng, để cho nó đồng bộ, sau đó loại bỏ nó - nếu cả hai thiết bị này trực tiếp tất cả các thời gian, họ có nguy cơ tương tự của tham nhũng hệ thống tập tin). Nếu bạn sử dụng LVM, bạn thậm chí có thể chụp ảnh nhanh. Đối với một thiết bị nhúng thu thập dữ liệu, tôi chỉ cần sử dụng giải pháp ad hoc gắn kết hệ thống tập tin thứ hai, sao chép qua nhật ký dữ liệu, ngay lập tức ngắt kết nối nó. Nếu bạn lo lắng về việc thiết bị có hình ảnh khởi động tốt, hãy dán bản sao thứ hai của trình quản lý khởi động và tất cả các hình ảnh khởi động cần thiết trên thiết bị thứ hai và định cấu hình máy tính để khởi động từ thẻ CF.

    Tôi sẽ không tin tưởng một bản sao thứ hai trên cùng một thiết bị vì các thiết bị lưu trữ bị lỗi thường xuyên hơn các hệ thống tệp ổn định. Nhiều hơn thường, trong kinh nghiệm của tôi cho đến nay (tại nơi làm việc, có một nửa đùa cay đắng về những cơ hội cao uncannily thất bại đĩa chiều thứ Sáu. Đó là gần như một sự kiện hàng tuần trong một thời gian). Cho dù đĩa quay hay không, nó có thể thất bại. Vì vậy, hãy giữ trứng của bạn trong hai giỏ nếu bạn có thể, và bạn sẽ bảo vệ dữ liệu của bạn tốt hơn.

    Nếu dữ liệu đặc biệt nhạy cảm, tôi sẽ trả tiền cho các lượt truy cập thường xuyên vào thiết bị, trao đổi CF dự phòng cho một bản mới và khởi động lại, để cho fscktất cả các hệ thống tập tin của nó được đo lường tốt.


Tuy nhiên, +1 sao chép bị các vấn đề tương tự như bản sao chính - nếu bạn bắt đầu đồng bộ hóa hai thiết bị (có thể thông qua RAID hoặc tiện ích cấp cao hơn) và mất điện (trong khi có dữ liệu liên tục nối vào dữ liệu), bạn sẽ nhận lại rác. Điều có thể giúp là có RAID1, thỉnh thoảng thay đổi vật lý một trong các thiết bị và tạo một bản sao lưu ngoại tuyến. Bạn sẽ cần phải đóng băng FS trước khi gỡ bỏ nó, để đảm bảo nó phù hợp (ví dụ: tạo ảnh chụp nhanh). XFS là một trong những hệ thống tập tin hỗ trợ cho việc này.
peterph

Thật. Giống như tôi đã viết, không có bất kỳ đảm bảo. Bất cứ khi nào bạn đang viết dữ liệu, bạn có thể có tham nhũng. Mọi người tại Electronics.stackexchange.com đã chơi xung quanh với các siêu tụ điện và phát hiện ra màu nâu trong đó hệ thống nhúng nhận được thông báo hết điện và vẫn đủ nước để hủy bỏ việc viết. Có lẽ. :) Tất cả chỉ là vấn đề bạn nghĩ nguy cơ tiềm ẩn là bao nhiêu và bạn muốn bỏ ra bao nhiêu tiền / công sức để loại bỏ vấn đề trong tay (và bắt đầu xem xét vấn đề tiếp theo).
Alexios

Cảm ơn câu trả lời này. Điều này làm rõ mọi thứ cho tôi đáng kể.
nhà toán

4

Dường như với tôi rằng những gì việc triển khai hệ thống tập tin có thể đạt được trong trường hợp mất điện đột ngột bị hạn chế - xét cho cùng, nó thực sự đang can thiệp vào phần cứng, vì vậy điều gì xảy ra giữa thời gian nó gửi dữ liệu / hướng dẫn đến phần cứng và khi nó nhận được một phản ứng là ngoài tầm kiểm soát của nó. Nếu có một hệ thống tập tin có thể phá vỡ vấn đề này, bạn sẽ nghe về nó.

Do đó, chiến lược bảo vệ dữ liệu quan trọng sẽ được hưởng lợi nhiều nhất từ ​​các quyết định được đưa ra ở cấp độ phần cứng , ví dụ: bằng cách sử dụng nguồn cung cấp điện liên tục. Có lẽ điều này là không khả thi trong tình huống của bạn.

Bạn đã nói hiệu suất không thực sự là một vấn đề lớn, vì vậy hãy sử dụng hợp lý fsync().

Có phải mất điện trong quá trình ghi đĩa chỉ làm hỏng phần dữ liệu tôi đang nối vào tệp theo định kỳ hoặc nó có thể làm hỏng toàn bộ tệp không?

Tôi đã sử dụng các hệ thống tập tin extN cá nhân và trên các máy chủ internet lưu lượng trung bình thấp trong nhiều năm, và giống như Alexios, tôi đã không thấy nhiều tham nhũng do mất điện (mặc dù công bằng mà nói, các máy chủ có UPS và tôi không thể nhớ lại một trong số họ thực sự đi xuống theo cách đó). Một vấn đề nghiêm trọng hơn nhiều là tham nhũng do lỗi phần cứng, mà các hệ thống tập tin khác nhau có thể (một lần nữa) có khả năng xử lý vấn đề nhiều hơn, nhưng (một lần nữa) điều này về cơ bản nằm ngoài tầm kiểm soát của chúng và chúng không thể ngăn chặn được.

Tôi đã thỉnh thoảng thấy các tập tin bị mất, hoặc bị cắt giảm đến kích thước không. Tôi cho rằng có một cơ hội tốt những thứ này sẽ được phục hồi bằng cách nào đó; điều này là không cần thiết đối với tôi vì chúng đã được sao lưu. Hầu hết thời gian nếu có bất cứ điều gì sai trái fsckdường như để đối phó với nó.

Là dữ liệu không được ghi tại điểm mất điện hoàn toàn an toàn? Cụ thể, có bất kỳ rủi ro nào khi tệp initramfs.cpio của tôi cũng có thể bị hỏng không?

Tôi nghĩ rằng rủi ro thực sự rất thấp chỉ từ một sự cố mất điện, ngoại trừ loại lưu trữ flash tham nhũng có thể phải chịu do sự cố tăng điện có thể đi kèm với sự cố mất điện - điều mà tôi không có kinh nghiệm, nhưng hy vọng bạn đã nghĩ về và nghiên cứu điều này.

Có phương pháp nào tôi có thể sử dụng trong mã ứng dụng của mình để bảo vệ dữ liệu không?

Đáng nhắc lại điểm về fsync () . Các đối tượng C ++ / iostream không có phương thức cho điều này (:: flush và :: sync không phải là fsync), nhưng tất cả những gì bạn cần là một bộ mô tả tệp.


Thankyou cho câu trả lời này nó cũng rất hữu ích. Tôi đang gắn kết phân vùng được ghi vào thông qua synctùy chọn trong /etc/fstabtệp vì tôi hiểu rằng điều này buộc việc ghi xảy ra đồng bộ. Tôi giả sử rằng điều này có nghĩa là khi tệp của tôi ghi mã trở lại, thì dữ liệu đã được ghi vào đĩa. Tôi hiểu rằng gắn kết với syncvề cơ bản giống như gọi fsync(my_filedescriptor)sau khi viết. Sự hiểu biết của tôi về điều này có đúng không?
nhà toán

@ mathicalian1975 Tôi sẽ đoán như vậy, đây không phải là điều tôi đã nghiên cứu. IMO, miễn là nó không gây bất tiện, bằng cách nào đó, ném fsync()vào những điểm bạn nghĩ là phù hợp sẽ không bị tổn thương và làm cho hệ thống mạnh mẽ hơn (ví dụ: nếu thiết bị được gắn ngẫu nhiên mà không cần đặt đồng bộ hóa, v.v.).
goldilocks

1

ZFS chắc chắn là một hệ thống tệp được bảo vệ chống tham nhũng theo thiết kế và có thể là duy nhất. Tuy nhiên, tôi không chắc về tính khả dụng của việc triển khai ZFS (dựa trên cầu chì hoặc nguồn gốc) cho các nền tảng dựa trên uClinux.


0

Có ít nhất một hệ thống tệp thương mại thực hiện một công việc to lớn đảm bảo rằng hệ thống tệp gần như không thể bị hỏng do mất điện và dữ liệu duy nhất bạn có nguy cơ mất là dữ liệu được thêm vào khi mất điện.

Mặt trái của nó là rất đắt tiền, về mặt tích cực, họ cung cấp sự hỗ trợ tuyệt vời. Do chi phí, nó thực sự chỉ là một lựa chọn cho cổ phần cao và / hoặc sản phẩm khối lượng lớn. Giống như thiết bị nhúng quan trọng trong sản xuất dầu khí cần đảm bảo tính toàn vẹn của hệ thống trong điều kiện vận hành "không chắc chắn" (ví dụ như mất điện thường xuyên, v.v.).

Kiểm tra DataLight (công ty) và / hoặc sản phẩm " Reliance NITRO ". (Reliance là di sản và giải pháp an toàn nhưng không hiệu quả của họ, được thay thế bởi Reliance NITRO ). Ngay cả khi bạn không có tiền để sử dụng hệ thống này, họ cũng có một số bài viết khá hay thảo luận về cách hệ thống của họ hoạt động, tại sao nó đáng tin cậy hơn ví dụ như ext3 và ext4.

Tôi xin lỗi nếu điều này đọc như một quảng cáo, chỉ muốn chỉ ra các tùy chọn.


Xin chào và chào mừng đến với trang web. Nếu bạn định đề xuất sản phẩm, vui lòng i) cung cấp một liên kết đến sản phẩm được đề cập; ii) giải thích lý do tại sao nó tốt hơn các lựa chọn thay thế (bạn chỉ cho rằng nó làm một công việc to lớn nhưng không giải thích tại sao nó tốt hơn bất cứ thứ gì khác); iii) nếu bạn liên kết với công ty thực hiện việc này, bạn cần phải làm cho rõ ràng hoặc bị buộc tội spam (không nói rằng bạn là, chỉ là một người đứng đầu).
terdon
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.