Mất điện bất ngờ có thể gây hại cho cài đặt Linux?


22

Tôi đang phát triển một ứng dụng trên bảng nhúng Linux (chạy Debian), ví dụ Raspberry Pi, Beagle Board / Bone hoặc olimex. Các bảng hoạt động trên một môi trường mà điện bị cắt bất ngờ (rất khó để đặt PSU, v.v.) và nó sẽ xảy ra mỗi ngày vài lần. Tôi tự hỏi liệu việc cắt điện đột xuất có gây ra sự cố / sự cố trên Hệ điều hành Linux không? Nếu đó là điều mà tôi nên lo lắng, bạn sẽ đề nghị gì để ngăn chặn thiệt hại trên HĐH chống lại việc cắt điện bất ngờ?

Tái bút Ứng dụng cần ghi một số dữ liệu vào phương tiện lưu trữ (thẻ SD), tôi nghĩ rằng nó sẽ không phù hợp để gắn kết nó dưới dạng chỉ đọc.


1
Tránh xa ext2 (sử dụng ext3 trở lên) trên các hệ thống tệp mà bạn sửa đổi rất nhiều và bạn sẽ ổn với hầu hết các phần.
LawrenceC

Trừ khi bạn rất cẩn thận trong việc chỉ định thẻ SD của mình, các thẻ không đảm bảo bất cứ điều gì nếu bạn cắt điện bất ngờ. Thẻ có thể ở giữa một nước cờ mòn, dẫn đến tham nhũng kỳ lạ, bất ngờ mà thậm chí có thể nằm trong một phân vùng khác!
derobert

Tôi không biết chính xác làm thế nào để làm điều đó, nhưng bạn có thể muốn xem xét thực hiện giao dịch các ứng dụng chính của mình. Bằng cách đó, bạn có thể có tập tin hiện tại của bạn và một bản sao lưu. Bạn áp dụng các giao dịch cho tệp hiện tại của mình và nếu thất bại, bạn có thể khôi phục tệp hiện tại từ bản sao lưu và áp dụng lại các giao dịch. Nếu bạn chuyển đổi giữa hiện tại và sao lưu bằng cách sử dụng liên kết tượng trưng hoặc hoán đổi tên tệp, thì điều đó có thể xảy ra rất nhanh với ít khả năng xảy ra lỗi hơn so với sao chép. Sau khi cập nhật thành công, tệp hiện tại của bạn trở thành bản sao lưu của bạn và bản sao lưu trở thành hiện tại.
Joe

Tiếp tục. Điều này gần như hoạt động. Tệp hiện tại mới cũng sẽ cần các giao dịch được áp dụng cho nó đòi hỏi phải xử lý các giao dịch hai lần, vì vậy tôi chắc chắn có một cách tốt hơn. Trong mọi trường hợp, nó vẫn có thể nhanh hơn và an toàn hơn nhiều so với sao chép toàn bộ tệp nếu nó lớn.
Joe

Câu trả lời:


14

Việc cắt điện bất ngờ có thể gây ra hỏng dữ liệu hệ thống tệp - ví dụ: nếu một quá trình đã bắt đầu ghi vào tệp, nhưng chưa viết xong, tệp có thể chỉ được ghi một nửa. Bây giờ hãy tưởng tượng nếu việc cắt điện xảy ra khi bạn đang thực hiện nâng cấp kernel ...

Như l0b0 đã viết, sử dụng một hệ thống tệp nhật ký sẽ giúp ích, vì nó sẽ có thể theo dõi những gì đã thực sự được thực hiện. Ngoài các thông tin wikipedia mà l0b0 liên kết, bạn có thể quan tâm đến https://unix.stackexchange.com/questions/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure cũng .

Bạn là một lập trình viên rõ ràng cần phải xem xét cẩn thận cách xử lý việc ghi vào các tệp để nó trở thành một quy trình nguyên tử (nghĩa là nó hoàn thành hoặc không được thực hiện, nhưng chưa bao giờ được thực hiện một nửa). Đây là một vấn đề khá phức tạp.


10
Quy trình chung trong mã để bảo vệ chống gián đoạn ghi làm hỏng tệp là thay vì trực tiếp sửa đổi tệp.name, thay vào đó bạn viết tệp tệp hoàn toàn mới.name.newversion, sau đó sử dụng các lệnh xóa / đổi tên để thay thế phiên bản cũ bằng cái mới Bạn cần thêm mã dọn dẹp để phục hồi sau khi bị gián đoạn ở mỗi bước; nhưng cách tiếp cận này luôn để lại một bản sao tốt của tệp trên đĩa. Điều này có thể ảnh hưởng đến thiết kế của bạn vì nó thực hiện cập nhật kém các tệp lớn hoặc thực hiện thay đổi thường xuyên thành một tệp duy nhất.
Dan Neely

10

Để giúp giảm thiểu khả năng tham nhũng của hệ điều hành, có lẽ tốt nhất là có các phân vùng "hệ thống" và "dữ liệu" riêng biệt trên thẻ SD. Bằng cách đó, bạn có thể gắn kết phân vùng "hệ thống" chỉ đọc và sử dụng một FS có độ đàn hồi cao trên phân vùng "dữ liệu".

Ngoài ra, hầu hết các bo mạch có yêu cầu năng lượng rất thấp, vì vậy có thể dự phòng pin. Bảng "LiPo rider" cho Raspberry Pi có thể được sử dụng như một UPS cơ bản để cung cấp tắt máy sạch khi mất điện.


5

Điều này phụ thuộc vào

  1. cho dù bạn đang sử dụng một hệ thống tập tin nhật ký
  2. làm thế nào tốt các ứng dụng có thể xử lý hủy bỏ xử lý.

Ví dụ, xem xét một ứng dụng xử lý một tệp và ghi kết quả khi chúng được tính toán (một dòng đầu ra trên mỗi dòng đầu vào) vào một tệp khác. Nếu nguồn bị cắt trong quá trình xử lý và cùng một ứng dụng được chạy sau khi khởi động lại, nó không thể khởi động lại quá trình xử lý từ đầu tệp đầu vào - điều đó có nghĩa là tệp đầu ra sẽ chứa thông tin trùng lặp.

Có thể rất khó để nói bất cứ điều gì chắc chắn về một hệ thống phức tạp giả định, nhưng phần mềm Linux ổn định nhất dường như có thể xử lý các sự cố khá độc đáo.


0

Vì không ai đề cập đến bất kỳ hệ thống tệp cụ thể nào: các hệ thống tệp hiện đại hơn (ext3, ext4, ntfs) có thể xử lý sự cố tốt hơn nhiều so với các hệ thống tệp cũ (ext2, ext, fat32) do ghi nhật ký .

Giả sử ổ cứng không bị sập và không nói dối , sự cố mất điện hoàn toàn sẽ không làm hỏng hệ thống tập tin. Tuy nhiên, các tệp riêng lẻ đang được ghi có thể vẫn bị hỏng, do đó, nếu bạn đang cập nhật HĐH khi xảy ra sự cố mất điện, vẫn có thể làm hỏng HĐH.

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.