Czy wystarczy wyciągnąć wtyczkę?

18

Ilekroć wyłączam moje pi, używam sudo poweroff, co (w moim rozumieniu) jest bezpiecznym sposobem na zatrzymanie wszystkich procesów i zamknięcie.

Chociaż czasami, gdy używam Pi do osadzonych projektów, w których nie zawsze jestem SSHing do Pi, często wydaje mi się, że marnuje się czas na wyjście z mojego telefonu lub laptopa i połączenie się z Pi, aby wyłączyć.

Niektórzy ludzie, z którymi rozmawiałem, powiedzieli, że po prostu wyciskają przewód, kiedy chcą się zamknąć, i że nigdy nie zauważyli z tym żadnych problemów.

Więc co może pójść nie tak po prostu odłączając Pi? Czy powinienem zacząć od odłączania?

Uwaga: w tym przypadku nie martwię się zbytnio o utratę danych. Zapisuję regularne kopie zapasowe, a jedyne ważne dane na temat tego Pi znajdują się na moim GitHub.

James Vickery
źródło
1
Odradzałbym po prostu wyciąganie wtyczki z gniazdka, ciągłe podłączanie i odłączanie kabla zasilającego skraca żywotność złącza w Pi. Po drugie, karta SD może być w trakcie wykonywania operacji po wyciągnięciu wtyczki - może to uszkodzić. Będzie to niewygodne niezależnie od tego, jak dobrze wykonasz kopię zapasową danych.
Darth Vader
2
@DarthVader Co rozumiesz przez „skrócenie żywotności złącza”? Nie odłączałbym się i nie podłączałbym już więcej, po prostu odłączałbym się przed wyłączeniem. Czy uszkodzenie karty SD to jedyny problem oprócz tego? Czy sformatowanie karty SD zawsze sprawi, że karta będzie ponownie używana?
James Vickery,
1
Nadal uważam, że lepiej zostawić Pi podłączone do sieci i wyłączyć zasilanie przy ścianie. możesz odzyskać uszkodzoną kartę SD, formatując i instalując ponownie wybrany system operacyjny, ale unikanie uszkodzenia karty SD jest na pewno wskazane. Innym problemem jest to, że części Pi mogą być w trakcie robienia czegoś, a ty obniżyłeś moc, nie dając im możliwości dokończenia tego, co robili.
Darth Vader

Odpowiedzi:

23

Nie mam zwyczaju odłączania pi w tym sensie, że unikam ich prawidłowego wyłączania, z wyjątkiem sytuacji, gdy straciłem połączenie sieciowe w bezgłowym pi, w którym to przypadku zwykle jestem zbyt leniwy, aby podłączyć klawiaturę itp.

Zasadniczo zawsze sprawdzam, czy zielone światło ACT nie świeci w tym momencie; w przypadku najnowszych modeli (lub oprogramowania układowego?) ta funkcja będzie wyłączona, gdy karta SD nie będzie dostępna. Tego właśnie chcesz się upewnić. O ile nie piszesz do niego stale, powinno to być dość proste; tak długo, jak w wolnej pamięci RAM jest wystarczająca ilość miejsca (powiedzmy 50-100 + MB, w zależności od kontekstu), wtedy rzeczy, które są często używane ponownie, ale w rzeczywistości nie są ładowane przez proces w danym momencie będzie buforowany w wolnej pamięci i stamtąd ponownie ładowany przez system operacyjny, a nie rzeczywisty nośnik fizyczny. Tak działają wszystkie współczesne systemy operacyjne ogólnego przeznaczenia.

Jeśli pi korzysta z karty SD, ryzyko jest minimalne : system plików na karcie nie jest zsynchronizowany ze stanem w pamięci. Zwykle nie jest to prawdopodobnie duży problem; na początek, dziennik systemu plików używany domyślnie w większości pisów może być przed nim obroną, podobnie jak fsck, który powinien być zastosowany automatycznie podczas rozruchu, jeśli system plików nie został całkowicie odmontowany. Wyjaśnię, dlaczego krótko mówię „może”, a nie „jest”, ponieważ w tym kontekście myślę, że często może nie .

O ile mi wiadomo, nigdy nie skończyłem z uszkodzeniem systemu plików lub utratą danych podczas wyciągania wtyczki, co mogłem zrobić sto lub więcej razy przez lata. Jednak znowu nie robię tego zwykle. Jeśli robisz to kilka razy dziennie, możesz w końcu natknąć się na statystyczny poziom ryzyka i wiąże się to z potencjalnie nieprzyjemnym połowem.

Oto PROBLEM:

Ostatnio przyszło mi do głowy, że istnieje problem z kartami SD, przeciwko którym mechanizmy systemu operacyjnego / systemu plików mogą być bezsilne i które mogą wyjaśniać, dlaczego niektórzy ludzie wydają się mieć ciągłe problemy z korupcją FS, szczególnie ci, którzy zaczynają szarpać za kabel niezależnie od systemu stan - np. ostatnio ktoś tutaj twierdził, że uruchamia moduły obliczeniowe, w których uszkodzenie spowodowało, że systemy nie dały się uruchomić w ~ 1/40 takich przerw w zasilaniu.

W sposób abstrakcyjny, bez uwzględnienia charakteru kart SD , nie powinno się to zdarzyć, nawet jeśli system jest zajęty, ponieważ to, co najprawdopodobniej doprowadzi do uszkodzenia, to niekrytyczne rzeczy, które są pisane, a nie żadne oprogramowanie systemowe, które jest skutecznie tylko do odczytu i zmienia się tylko podczas aktualizacji.

Może się to zdarzyć, jeśli bity są żonglowane, a meta informacje o systemie plików, które przechowują różne bity, są uszkodzone. Ponownie jednak dziennikowanie i fsck powinny być w stanie sobie z tym poradzić, co wymaga jądra do uruchomienia, ale jądro na pi znajduje się na osobnej partycji rozruchowej, która równie dobrze może zostać odmontowana podczas użytkowania (z wyjątkiem aktualizacji), ponieważ żadne z nich nie jest używane po uruchomieniu systemu. Oznacza to, że informacja o partycji powinna być, skutecznie, niezniszczalna, nawet jeśli pozostanie zamontowana.

Ale...

Karty SD to czarna skrzynka dla systemu operacyjnego. Nie ma z tego wyjścia. Chociaż istnieją specjalne sterowniki dla kontrolerów kart SD, które są częścią sprzętu komputerowego (na pi, jest to część SoC), nie ma czegoś takiego jak sterownik dla różnych, konkretnych marek i modeli kart.

A jednak wszystkie mają w sobie mikrokontrolery, które mogą działać na bardzo różne sposoby. 1. To sprawia, że ​​karta jest czarną skrzynką; współdziała z systemem operacyjnym za pośrednictwem znormalizowanego protokołu SD i jest to ostatni punkt kontroli w systemie operacyjnym.

Jedną z rzeczy, które robią karty SD i inne nośniki półprzewodnikowe, która różni się od tradycyjnych wirujących dysków, jest stosowanie nieprzejrzystego adresowania wirtualnego; nie przechowują informacji fizycznie w sekwencjach postrzeganych przez system operacyjny. Jest to w większości dobra rzecz, w przeciwnym razie możemy potrzebować różnych sterowników dla różnych marek kart itp. I pozwala kartom (nieprzejrzysto) wprowadzać wyrównanie zużycia , co znacznie wydłuża ich żywotność.

Kolejną rzeczą, na której polegają, są stosunkowo duże „kasowanie bloków”; gdy dane w bloku wymagają zmiany, cały blok jest kasowany i ponownie zapisywany. Systemy plików również robią tego rodzaju rzeczy, ale należy pamiętać, że jest to na poziomie oprogramowania systemowego, a wynikające z tego problemy są dokładnie tego rodzaju problemami, z którymi się zmagasz fsck.

Istota bardziej nie do pokonania problemu polega na tym, że skalowane systemy plików, które to robią, są zwykle znacznie mniejsze niż skalowane karty SD. Gdyby tak nie było, marnowałbyś dużo miejsca do przechowywania, ponieważ blok systemu plików może zawierać tylko dane z jednego pliku. Jeśli blok ma 2 MB, a danych jest tylko kilka KB, reszta jest marnowana. Bloki systemu plików mają więc zakres od 1/2 KiB do 4 KiB.

Jest całkiem oczywiste, że karty SD tego nie robią, aw rzeczywistości nie mogą, ponieważ kontroler na karcie SD nie ma świadomości granic, takich jak „plik”, „system plików”, a nawet „partycja urządzenia”. Zajmuje się tylko kawałkami danych, których potrzebuje system operacyjny, za pomocą nieprzezroczystej warstwy z czarnej skrzynki, w której wszystko może się dziać na poziomie fizycznym.

Jednym z powodów, dla których jest to oczywiste (poza założeniem, że karty „nie były w stanie tego zrobić”) jest to, że bloki te są często dość duże, ale karty wydają się dobrze wykonywać całą przestrzeń. Blok usuwania może mieć rozmiar kilku megabajtów . Co więcej, szczegóły są zastrzeżone. Chociaż mogą istnieć mechanizmy, za pomocą których system operacyjny może zażądać usunięcia bloku z karty, karta nie musi tego zapewniać, może o tym kłamać i byłoby absurdalne, gdyby system operacyjny próbował go wykorzystać.

Wynika z tego, że ponieważ:

  1. Kontroler karty SD nie ma pojęcia, do jakich danych „słusznie” należą, w sensie spójnych systemów plików i paritycji, oraz

  2. Karta SD to czarna skrzynka, w której system operacyjny nie może naprawdę zobaczyć,

To, co znajduje się w danym bloku usuwania 1 MB, w którym karta zawiera kilka partycji wykorzystujących 4 KiB lub mniejsze bloki systemu plików, musi być dowolne, gdy karta zostanie wystarczająco użyta (a być może nawet jeśli nie była używana zbyt często w wszystko). Jest to prawdopodobnie prawdą, nawet jeśli spróbujesz zmusić system operacyjny do używania większych / odpowiednich rozmiarów bloków; skończą źle ustawione.

Więc:

Jeśli zasilanie jest cięty, gdy karta SD jest w środku zmieniając blok, który mógłby skutkować utratą dość dużej objętości dowolnych danych, które mogą być coś z karty. Może to być informacja oznaczona jako „tylko do odczytu”. Mogą to być informacje z partycji, która nawet nie jest zamontowana , i oczywiście z najczęściej nieużywanej partycji rozruchowej.

Jeśli tak się stanie, a karta nie ma własnego systemu zabezpieczeń (który niektórzy mogą mieć, ale jestem pewien, że większość tego nie ma), możesz spojrzeć na sytuację FUBAR. Journalling nie ochroni przed przypadkowym uszkodzeniem rozmiaru MB, który nawet nie rozpoznaje granic partycji. Lub fsck.

Lub, ponieważ sprzęt karty jest generalnie zastrzeżony, może cokolwiek innego oprócz oprogramowania wyprodukowanego przez producenta karty - zakładając, że jest to prawdopodobne. Nigdy o tym nie słyszałem. Sprawiłoby to, że karty byłyby bardziej skomplikowane, droższe i bardziej kłopotliwe w użyciu. Co nie jest celem.

Innymi słowy, karty SD nie są przeznaczone do niezawodnego użytku w ten sposób . Są tanie i bardzo poręczne, ale wynika to z kompromisu w protokole: Ogólnie rzecz biorąc, nie ma gwarancji integralności danych dla czegokolwiek na karcie, jeśli arbitralnie zabijesz do tego moc.

Co może pójść nie tak po prostu odłączając Pi? Czy powinienem zacząć od odłączania? Uwaga: w tym przypadku nie martwię się zbytnio o utratę danych.

Nie zaszkodzi fizycznie pi, nie, po prostu uważaj, że „utrata danych” może rozciągać się na „bezużyteczną kartę”, którą należy całkowicie sformatować. Powiedziałbym jednak, że szansa na to, jeśli robisz to z wyłączonym zielonym światłem ACT, jest bardzo niska.


  1. Może to mieć znaczenie przy rozważaniu, dlaczego niektóre określone marki / modele kart są wyraźnie gorsze niż inne dla niektórych osób. Niestety, podczas gdy dwie identycznie oznaczone karty mogą być identyczne pod względem podanych cech (rozmiar, szybkość itp.), Producenci nie są zobowiązani do uczynienia ich naprawdę w 100% identycznymi pod względem części składowych.
Złotowłosa
źródło
1

Zależy to ściśle od schematu działania systemu operacyjnego:

  • Jeśli używasz standardowego schematu, kiedy używasz karty SD w trybie r / w do danych rzeczywistych ( partycje wymiany nie liczą się tutaj) - to jest problem jak w zwykłej obudowie „podłączania zasilania do komputera” : jest wszędzie w Google, więc będziesz mieć mnóstwo informacji o sprawie. Jest dokładnie tak samo: te same problemy, takie same ryzyko i taki sam wpływ.
  • Jeśli tylko odczytujesz dane z karty SD, tj. Montujesz każdą partycję zawierającą dane z karty SD z roopcją, to zdecydowanie nie ma problemu po prostu wyciągnąć wtyczkę: kończysz pracę swoich usług, chodzi o aby wykonać kopię zapasową danych na zewnętrzną zapisywalną pamięć (na przykład NAS lub udział NFS / SMB / CIFS), a po zamknięciu usług - tak, po prostu wyciągnij wtyczkę: nie potrzebujesz dysku RAM / tmpfs (s) ), a nic nie uszkodzisz
Alexey Vesnin
źródło
1
Twój pierwszy punkt jest nieprawidłowy; karta SD wprowadza komplikacje, które sprawiają, że nie jest to „dokładnie ten sam” problem, jak np. w przypadku wirujących dysków, w których dziennikowanie i sprawdzanie powinno być skutecznym zabezpieczeniem przez większość czasu, lub droższych nośników SSD, które mogą mieć dodatkowy sprzęt i być zgodne z bardziej rygorystyczny standard w porównaniu z mediami SD. Qv moja odpowiedź, w której mówię o „abstrakcyjnie, bez uwzględnienia charakteru kart SD ...”
goldilocks
1
@Goldilocks oczywiście w głębokim majsterkowaniu mechaniki nośników danych jest inaczej. Mówię tu bardziej ogólnie, tj. „Dlaczego wyciąganie wtyczki jest złe, jeśli nie upewniasz się, że wszystkie twoje dane są bezpiecznie i na pewno zapisane”.
Alexey Vesnin
@goldilocks Dziękuję zarówno za doskonałe odpowiedzi. Oboje osiągnęliście doskonałe punkty, chociaż zdecydowałem się przyjąć odpowiedź goldilocks, ponieważ daje ona wiele istotnych informacji, wciąż odpowiadając na pytanie; jednakże głosowałem za obiema odpowiedziami.
James Vickery,
1

Jak odpowiedział @goldilocks, ryzyko jest niewielkie, ale większość z nas tego nie robi.

Bardzo łatwo jest dodać bezpieczny wyłącznik zasilania, którego używam na moim bezgłowym Pi. Zobacz, jak bezpiecznie wyłączyć Raspberry Pi? nie wykorzystuje prawie żadnych zasobów - oprócz odrobiny pamięci RAM i prostego przycisku.

Milliways
źródło