Có ổn không khi chỉ cần rút phích cắm?


18

Bất cứ khi nào tôi tắt pi, tôi sử dụng sudo poweroff, theo cách hiểu của tôi là cách an toàn để dừng tất cả các quy trình và tắt.

Mặc dù đôi khi khi tôi sử dụng Pi cho các dự án nhúng mà tôi không phải lúc nào cũng SSH vào Pi, tôi thường cảm thấy lãng phí thời gian khi lấy điện thoại hoặc máy tính xách tay và kết nối với Pi để tắt nguồn.

Một số người mà tôi đã nói chuyện đã nói rằng họ chỉ rút điện dẫn ra khi họ muốn tắt máy và họ chưa bao giờ nhận thấy bất kỳ vấn đề nào với việc này.

Vì vậy, những gì có thể đi sai với chỉ rút phích cắm Pi? Tôi có nên bắt đầu rút phích cắm không?

Lưu ý: Trong trường hợp này tôi không quá lo lắng về việc mất dữ liệu. Tôi lưu các bản sao lưu thường xuyên và dữ liệu quan trọng duy nhất trên Pi này là trên GitHub của tôi.


1
Tôi sẽ khuyên bạn không nên rút phích cắm ra như vậy, liên tục cắm và rút cáp nguồn sẽ làm giảm tuổi thọ của đầu nối trên Pi. Thứ hai, thẻ SD có thể ở giữa thực hiện thao tác khi bạn rút phích cắm - điều này có khả năng làm hỏng nó. Và đó sẽ là một sự bất tiện cho dù bạn sao lưu dữ liệu của mình tốt đến đâu.
Darth Vader

2
@DarthVader Ý bạn là gì khi 'giảm tuổi thọ của đầu nối'? Tôi sẽ không rút phích cắm và cắm điện thường xuyên hơn nữa, tôi sẽ chỉ rút phích cắm trước khi tắt máy. Có phải làm hỏng thẻ SD là vấn đề duy nhất ngoài điều đó? Định dạng thẻ SD sẽ luôn khiến thẻ có thể sử dụng lại được không?
James Vickery

1
Tôi vẫn nghĩ tốt hơn là để Pi cắm vào và tắt nguồn ở tường. bạn có thể khôi phục thẻ SD bị hỏng bằng cách định dạng và cài đặt lại hệ điều hành bạn chọn, nhưng tránh làm hỏng thẻ SD ở nơi đầu tiên chắc chắn là điều nên làm. Một vấn đề khác là các bộ phận của Pi có thể đang trong quá trình thực hiện một việc gì đó và bạn đã cắt giảm sức mạnh mà không có cơ hội để hoàn thành những gì họ đang làm.
Darth Vader

Câu trả lời:


23

Tôi không tạo thói quen rút pi theo nghĩa là tránh tắt chúng đúng cách trừ khi tôi bị mất mạng trên pi không đầu, trong trường hợp đó tôi thường quá lười để cắm bàn phím, v.v.

Nói chung, tôi luôn kiểm tra để đảm bảo đèn ACT màu xanh lá cây không sáng ở điểm đó; đối với các kiểu máy gần đây (hoặc phần sụn?), phần này sẽ bị tắt khi thẻ SD không được truy cập. Đó là những gì bạn muốn chắc chắn. Trừ khi bạn viết cho nó liên tục, điều này sẽ đủ đơn giản; miễn là có một khoảng trống vừa đủ trong RAM miễn phí (giả sử 50-100 + MB, tùy theo ngữ cảnh), thì những thứ dễ bị sử dụng lại thường xuyên nhưng thực tế không được tải bởi một quy trình tại bất kỳ thời điểm nào sẽ được lưu trong bộ nhớ cache trong bộ nhớ trống và được hệ điều hành tải lại từ đó chứ không phải phương tiện vật lý thực sự. Đây là cách tất cả các hệ điều hành mục đích chung đương đại hoạt động.

Nếu pi đang sử dụng thẻ SD, thì đây là rủi ro tối thiểu : hệ thống tệp trên thẻ không đồng bộ với trạng thái trong bộ nhớ. Thông thường, đây có lẽ không phải là một vấn đề lớn; đối với người mới bắt đầu, việc ghi nhật ký hệ thống tập tin được sử dụng theo mặc định trên hầu hết các pis có thể là một sự bảo vệ chống lại nó, cũng như fsck sẽ được áp dụng tự động khi khởi động nếu hệ thống tập tin không được ngắt sạch. Tôi sẽ giải thích lý do tại sao tôi nói "có thể" chứ không phải "là" trong thời gian ngắn, bởi vì trong bối cảnh này tôi nghĩ nó thường có thể không .

Theo như tôi biết, tôi chưa bao giờ bị hỏng hệ thống tập tin hoặc mất dữ liệu khi rút phích cắm, điều mà tôi có thể đã thực hiện hàng trăm lần trở lên trong nhiều năm qua. Tuy nhiên, một lần nữa, tôi không làm điều đó theo thói quen. Nếu bạn làm điều đó nhiều lần trong ngày, cuối cùng bạn có thể gặp phải bất kỳ mức độ rủi ro thống kê nào, và có một nguy cơ khó chịu liên quan.

Đây là VẤN ĐỀ:

Gần đây, tôi nhận thấy có một vấn đề với thẻ SD mà các cơ chế hệ điều hành / hệ thống tập tin có thể bất lực và điều này có thể giải thích tại sao một số người dường như gặp vấn đề dai dẳng với tham nhũng fs, đặc biệt là những người mắc phải dây bất kể hệ thống trạng thái - ví dụ, gần đây có người ở đây tuyên bố đang chạy các mô-đun tính toán trong đó tham nhũng khiến các hệ thống không thể khởi động trong ~ 1/40 lần cắt điện như vậy.

Nói một cách trừu tượng, không tính đến bản chất của thẻ SD , điều đó không nên xảy ra ngay cả khi hệ thống đang bận, bởi vì những gì có khả năng cuối cùng bị hỏng là những thứ không quan trọng được viết, không phải bất kỳ phần mềm hệ thống nào hiệu quả chỉ đọc và chỉ bị thay đổi trong quá trình cập nhật.

Nó có thể xảy ra nếu các bit bị xáo trộn xung quanh, và do đó thông tin meta của hệ thống tệp lưu trữ các bit khác nhau bị hỏng. Tuy nhiên, một lần nữa, tạp chí và fsck phải có khả năng xử lý việc này, điều này đòi hỏi kernel phải khởi động, nhưng kernel trên pi nằm trên một phân vùng khởi động riêng biệt cũng có thể bị ngắt trong quá trình sử dụng (trừ khi cập nhật) không có cái nào được sử dụng sau khi hệ thống đã khởi động. Có nghĩa là thông tin về phân vùng phải, hiệu quả, không thể bị phá hủy, ngay cả khi nó được gắn kết.

Nhưng...

Thẻ SD là một hộp đen cho hệ điều hành. Không có cách nào thoát khỏi điều đó. Mặc dù có các trình điều khiển cụ thể cho các bộ điều khiển thẻ SD là một phần của phần cứng máy tính (trên pi, đây là một phần của SoC), không có trình điều khiển nào cho các kiểu và kiểu thẻ khác nhau, cụ thể.

Tuy nhiên, tất cả chúng đều có bộ vi điều khiển bên trong chúng có thể hoạt động theo những cách rất khác nhau. 1. Đây là những gì làm cho thẻ một hộp đen; nó tương tác với hệ điều hành thông qua giao thức SD được tiêu chuẩn hóa và đó là điểm kiểm soát cuối cùng mà HĐH có.

Một trong những điều mà thẻ SD và các phương tiện truyền thông trạng thái rắn khác làm khác với các đĩa quay truyền thống là sử dụng địa chỉ ảo mờ; họ không lưu trữ thông tin vật lý theo trình tự mà hệ điều hành cảm nhận được. Điều này chủ yếu là một điều tốt, nếu không chúng ta có thể thực sự cần các trình điều khiển khác nhau cho các nhãn hiệu thẻ khác nhau, v.v., và nó cho phép các thẻ (thực tế) thực hiện cân bằng hao mòn , giúp kéo dài đáng kể tuổi thọ của chúng.

Một điều khác mà họ dựa vào là "khối xóa" tương đối lớn; khi dữ liệu trong một khối cần được thay đổi, toàn bộ khối sẽ bị xóa và ghi lại. Các hệ thống tập tin cũng làm điều này như một vấn đề tất nhiên, nhưng lưu ý rằng ở cấp độ phần mềm hệ thống, và các vấn đề phát sinh từ đây chính xác là các loại vấn đề được đưa ra và fsckgiải quyết.

Điểm mấu chốt của vấn đề không thể vượt qua hơn là những loại phân vùng quy mô làm điều đó trên thường là nhiều nhỏ hơn so với thẻ SD quy mô làm điều đó trên. Nếu không, bạn sẽ lãng phí rất nhiều dung lượng lưu trữ, bởi vì một khối hệ thống tệp chỉ có thể chứa dữ liệu từ một tệp. Nếu khối là 2 MB và chỉ có một vài kB dữ liệu, phần còn lại sẽ bị lãng phí. Vì vậy, các khối hệ thống tập tin có xu hướng nằm trong khoảng từ 1/2 KiB đến 4 KiB.

Một thẻ SD khá rõ ràng không làm điều đó, và trên thực tế, không thể, bởi vì bộ điều khiển trong thẻ SD không có nhận thức về các ranh giới như "tệp", "hệ thống tệp" hoặc thậm chí là "phân vùng thiết bị". Nó chỉ xử lý các khối dữ liệu mà HĐH muốn, thông qua một lớp mờ từ bên trong hộp đen nơi mọi thứ có thể xảy ra ở cấp độ vật lý.

Một trong những lý do rõ ràng (ngoài các thẻ tiền đề "không thể làm điều đó ngay từ đầu") là những khối đó thường khá lớn, nhưng các thẻ dường như làm rất tốt việc tận dụng mọi không gian. Một khối xóa có thể có kích thước vài megabyte . Hơn nữa, các chi tiết là độc quyền. Mặc dù có thể có các cơ chế mà HĐH có thể yêu cầu kích thước khối xóa khỏi thẻ, nhưng thẻ không phải cung cấp điều này, nó có thể nói dối về nó và nó sẽ trở nên vô lý nếu HĐH cố gắng tận dụng nó.

Nó xuất phát từ điều này kể từ:

  1. Bộ điều khiển thẻ SD không có khái niệm về dữ liệu "đúng" thuộc về nơi nào trong ý nghĩa của các hệ thống tập tin và kết nối chặt chẽ, và,

  2. Thẻ SD là một hộp đen mà HĐH không thể thực sự nhìn thấy,

Sau đó, những gì trong một khối xóa 1 MB đã cho, trong đó thẻ chứa một số phân vùng sử dụng 4 khối KiB hoặc các khối hệ thống tệp nhỏ hơn, bị ràng buộc là tùy ý một khi thẻ đã được sử dụng đủ (và thậm chí nếu nó không được sử dụng nhiều tại tất cả các). Điều này có thể đúng ngay cả khi bạn cố gắng buộc HĐH sử dụng kích thước khối lớn hơn / tương ứng; họ sẽ kết thúc sai.

Vì thế:

Nếu nguồn bị cắt trong khi thẻ SD ở giữa thay đổi một khối, điều đó có thể dẫn đến việc mất một khối lượng dữ liệu tùy ý khá lớn có thể là bất cứ thứ gì từ thẻ. Nó có thể là thông tin được đánh dấu "chỉ đọc". Đó có thể là thông tin từ một phân vùng thậm chí không được gắn kết và rõ ràng là đủ từ phân vùng khởi động hầu hết chưa được sử dụng.

Nếu điều đó xảy ra và thẻ không có hệ thống tự vệ nào đó (mà một số có thể có, nhưng tôi chắc chắn là không), thì bạn có thể xem xét tình huống FUBAR. Nhật ký sẽ không bảo vệ chống lại tham nhũng kích thước MB ngẫu nhiên mà thậm chí không nhận ra ranh giới phân vùng. Hoặc fsck.

Hoặc, vì phần cứng của thẻ nói chung là độc quyền, có thể là bất cứ thứ gì khác ngoại trừ phần mềm do nhà sản xuất thẻ sản xuất - cho rằng điều đó là hợp lý. Tôi chưa bao giờ nghe nói như vậy. Điều này sẽ làm cho thẻ phức tạp hơn, đắt tiền hơn và rắc rối hơn khi sử dụng. Đó không phải là mục tiêu.

Nói cách khác, thẻ SD không được sử dụng một cách đáng tin cậy theo cách này . Chúng rẻ và rất tiện dụng nhưng đó là kết quả của sự đánh đổi trong giao thức: Nói chung, không có gì đảm bảo tính toàn vẹn dữ liệu cho bất cứ thứ gì trên thẻ nếu bạn tự ý giết chết nguồn điện của nó.

Điều gì có thể đi sai với chỉ rút phích cắm Pi? Tôi có nên bắt đầu rút phích cắm không? Lưu ý: Trong trường hợp này tôi không quá lo lắng về việc mất dữ liệu.

Nó sẽ không gây hại về mặt vật lý, không, chỉ cần cẩn thận "mất dữ liệu" có thể mở rộng thành "thẻ vô dụng" cần được định dạng lại hoàn toàn. Tuy nhiên, tôi muốn nói rằng cơ hội của điều đó nếu bạn đang làm điều đó với đèn ACT màu xanh lá cây tắt là rất thấp.


  1. Điều này có thể có ý nghĩa khi xem xét lý do tại sao một số kiểu / mẫu thẻ cụ thể rõ ràng tệ hơn so với những người khác đối với một số người. Thật không may, trong khi hai thẻ được dán nhãn giống hệt nhau về các tính năng đã nêu (kích thước, tốc độ, v.v.), các nhà sản xuất không bị ràng buộc làm cho chúng thực sự giống nhau 100% về các bộ phận cấu thành.

1

Nó phụ thuộc rất nhiều vào sơ đồ làm việc của hệ điều hành của bạn:

  • Nếu bạn đang sử dụng sơ đồ tiêu chuẩn, khi bạn sử dụng thẻ SD ở chế độ r / w cho dữ liệu thực tế ( phân vùng trao đổi không được tính ở đây) - thì đó là một vấn đề như trong trường hợp "cắm điện cho PC" thông thường : tất cả đều trên Google, vì vậy bạn sẽ có rất nhiều thông tin về vụ án. Nó hoàn toàn giống nhau: cùng một vấn đề, cùng rủi ro và tác động như nhau.
  • Nếu bạn chỉ đọc dữ liệu từ thẻ SD của mình, tức là gắn mọi phân vùng chứa dữ liệu từ thẻ SD của bạn với rotùy chọn, thì chắc chắn không có vấn đề gì chỉ cần rút phích cắm: bạn đang hoàn thành công việc của dịch vụ, họ sẽ về để sao lưu dữ liệu vào bộ lưu trữ có thể ghi bên ngoài (ví dụ như chia sẻ NAS hoặc NFS / SMB / CIFS) và sau khi tắt dịch vụ - vâng, chỉ cần rút phích cắm: bạn không cần đĩa RAM / tmpfs của bạn ) nữa, và bạn sẽ không thiệt hại

1
Điểm đầu tiên của bạn là không chính xác; Thẻ SD giới thiệu các biến chứng khiến vấn đề không "chính xác" giống như, ví dụ, các đĩa quay trong đó ghi nhật ký và kiểm tra sẽ bảo vệ hiệu quả hầu hết thời gian hoặc phương tiện SSD đắt tiền hơn có thể có phần cứng bổ sung và tuân thủ tiêu chuẩn chặt chẽ hơn so với phương tiện SD. Qv câu trả lời của tôi khi tôi nói về "Nói một cách trừu tượng, không tính đến bản chất của thẻ SD ..."
goldilocks

1
@goldilocks tất nhiên trong sự nghiên cứu sâu về cơ học phương tiện lưu trữ thì khác. Tôi đang nói ở đây nói chung hơn, tức là "tại sao việc rút phích cắm lại không tốt nếu bạn không đảm bảo thực tế là tất cả dữ liệu của bạn được lưu an toàn và chắc chắn".
Alexey Vesnin

@goldilocks Thankyou cả cho câu trả lời tuyệt vời của bạn. Cả hai bạn đều đạt điểm tuyệt vời mặc dù tôi đã quyết định chấp nhận câu trả lời của goldilocks, vì nó cung cấp nhiều thông tin liên quan trong khi vẫn trả lời câu hỏi; tuy nhiên, tôi đã đưa ra cả hai câu trả lời.
James Vickery

1

Như @goldilocks đã trả lời, có rất ít rủi ro, nhưng hầu hết chúng ta không làm điều đó.

Rất đơn giản để thêm một công tắc nguồn an toàn, mà tôi sử dụng trên Pi không đầu của mình. Xem cách tắt Raspberry Pi một cách an toàn? việc này hầu như không sử dụng tài nguyên - ngoài một chút RAM và một nút bấm đơn giản.

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.