Чи добре просто витягнути вилку?


18

Щоразу, коли я вимикаю своє пі, я використовую sudo poweroff, що (на моє розуміння) - безпечний спосіб зупинити всі процеси та вимкнутись.

Хоча іноді, коли я використовую Pi для вбудованих проектів, де я не завжди SSHing до Pi, часто відчуваю, що втрачає час, виймаючи телефон або ноутбук і підключаючись до Pi для вимкнення живлення.

Деякі люди, з якими я спілкувався, казали, що вони просто вибивають живлення, коли вони хочуть вимкнути, і що вони ніколи не помічали з цим жодних проблем.

Отже, що може піти не так, просто відключивши мережу Pi? Чи варто починати просто відключати штепсельну вилку?

Примітка. У цьому випадку я не надто переживаю втрату даних. Я зберігаю регулярні резервні копії, і єдині важливі дані цього Pi - на моєму GitHub.


1
Я б радив не просто витягувати штепсельну вилку, а постійне підключення та відключення шнура живлення зменшить термін служби роз’єму на Pi. По-друге, SD-карта може опинитися в середині виконання операції, коли ви витягнете вилку - це, швидше за все, може пошкодити її. І це стане незручністю незалежно від того, наскільки добре ви створюєте резервну копію даних.
Дарт Вейдер

2
@DarthVader Що ви маєте на увазі під "скороченням терміну служби роз'єму"? Я б не відключав і не підключався до підключення частіше, я б просто відключався від вилки до відключення. Чи є пошкодження SD-карти єдиною проблемою, крім цієї? Чи завжди форматування картки SD зробить її знову корисною?
Джеймс Вікері

1
Я все ще думаю, що краще залишити Pi підключеним і вимкнути живлення біля стіни. Ви можете відновити пошкоджену SD-карту, відформатувавши та перевстановивши Вашу ОС за вибором, але, у першу чергу, уникати пошкодження SD-карти, безумовно, доцільно. Інша проблема полягає в тому, що частини Пі можуть бути в процесі щось робити, і ви скоротили владу, не давши їм можливості закінчити те, що вони робили.
Дарт Вейдер

Відповіді:


23

Я не маю звички відключати підключення пі в сенсі відключення їх належним чином відключення, за винятком випадків, коли я втратив мережу на безголовому пі, і в такому випадку я зазвичай лінивий підключати клавіатуру тощо

Як правило, я завжди перевіряю, чи не вмикається зелений індикатор ACT; для останніх моделей (або вбудованого програмного забезпечення?) це буде вимкнено, коли доступ до SD-карти не буде доступний. У чому ви хочете переконатися. Якщо ви не пишете до нього постійно, це повинно бути досить простим; до тих пір, поки у вільній оперативній пам’яті є пристойний простір (скажімо, 50-100 + МБ, залежно від контексту), то речі, які схильні до частого використання, але фактично не завантажуються процесом у будь-який момент буде в кешованому режимі у вільній пам’яті та перезавантажується звідти ОС, а не справжнім фізичним носієм. Так працюють усі сучасні операційні системи загального призначення.

Якщо pi використовує SD-карту, ось мінімально ризик : файлова система на карті не синхронізується зі станом пам'яті. Зазвичай це, мабуть, не велика проблема; Для початку файлова система, що використовується за замовчуванням на більшості піс, може бути захистом від неї, як і fsck, який повинен застосовуватися автоматично при завантаженні, якщо файлова система не була чисто відключена. Я поясню, чому я коротко кажу "могло", а не ", тому що в цьому контексті я думаю, що це часто не може .

Наскільки я знаю, я ніколи не стикався з пошкодженням файлової системи або втратою даних при витягуванні штекера, що я, можливо, робив сто і більше разів за ці роки. Однак, знову ж таки, я це не роблю звично. Якщо ви робите це кілька разів на день, ви, зрештою, можете зіткнутися з будь-яким рівнем статистичного ризику, і це може призвести до неприємного улову.

Ось ПРОБЛЕМА:

Нещодавно мені спало на думку, що з SD-картами виникає проблема, щодо якої механізми ОС / файлової системи можуть бути безсилими, і це може пояснити, чому деякі люди, здається, мають постійні проблеми з корупцією fs, особливо ті, хто потрапляє в потягування шнура незалежно від системи стан - наприклад, нещодавно хтось тут стверджував, що працює з обчислювальними модулями, коли корупція залишила системи незавантаженими в ~ 1/40 таких відключень електроенергії.

Абстрактно кажучи, не беручи до уваги природу SD-карт , це не повинно відбуватися навіть у тому випадку, якщо система зайнята, тому що найімовірніше, що це може стати пошкодженим, це некритичні речі, які записуються, а не будь-яке системне програмне забезпечення, яке ефективно лише для читання і змінюється лише під час оновлень.

Це може статися, якщо біти обертаються навколо, і так мета-інформація файлової системи, яка зберігає, де різні біти, пошкоджена. Знову ж таки, journalling і fsck повинні бути спроможні вирішити це, що вимагає завантаження ядра, але ядро ​​на pi знаходиться на окремому завантажувальному розділі, який також може бути відключений під час використання (за винятком оновлення), оскільки жоден з них не використовується після завантаження системи. Значення інформації про розділ повинно бути фактично нетлінним, навіть якщо його встановити.

Але ...

SD-карти - це чорна скринька для операційної системи. Виходу з цього немає. Хоча існують конкретні драйвери для контролерів SD-карт, які є частиною апаратних засобів комп'ютера (на пі, це частина SoC), немає такого поняття, як драйвер для різних, конкретних марок та моделей карт.

І все ж, всі вони мають мікроконтролери, які можуть працювати дуже різними способами. 1. Саме це робить карту чорною скринькою; він взаємодіє з операційною системою через стандартизований протокол SD, і це остання точка управління, яку має ОС.

Однією з речей SD-карт та інших твердотільних носіїв, яка відрізняється від традиційних спінінг-дисків, є використання непрозорого віртуальної адреси вони фізично не зберігають інформацію в послідовностях, які сприймає операційна система. Це здебільшого гарна річ, інакше нам можуть дійсно потрібні різні драйвери для різних марок карт тощо, і це дозволяє карткам (непрозоро) здійснювати вирівнювання зносу , що значно продовжує їхній термін експлуатації.

Інша річ, на яку вони покладаються, - це відносно великі «стираючі блоки»; коли дані в блоці потрібно змінити, весь блок стирається і переписується. Файлові системи також роблять подібні речі звичайно, але зауважте, що це на рівні системного програмного забезпечення, і проблеми, що виникають внаслідок цього, є саме типом проблем, що fsckстосуються розробки та вирішення проблем .

Суть найбільш непереборної проблеми полягає в тому, що файлові системи масштабування роблять це, як правило, набагато менше, ніж у масштабних SD-картах. Якби цього не було, ви б втратили багато місця на зберігання, оскільки блок файлової системи може містити дані лише з одного файлу. Якщо блок становить 2 Мб і є лише кілька кБ даних, решта витрачається даремно. Тож блоки файлової системи мають тенденцію до діапазону від 1/2 KiB до 4 KiB.

Досить очевидно, що карти SD не роблять цього, а насправді цього не могли, оскільки контролер на SD-картці не знає про межі, такі як "файл", "файлова система" або навіть "розділ пристрою". Він просто має справу з фрагментами даних, які ОС хоче, через непрозорий шар ізсередини чорної скриньки, де все може відбуватися на фізичному рівні.

Однією з причин, яка очевидна (окрім картки передумов «не можна було б зробити це в першу чергу»), це те, що блоки часто бувають досить великими, але карти, здається, виконують гідну роботу, використовуючи весь простір. Блок стирання може мати розмір декількох мегабайт . Більше того, деталі є власником. Хоча можуть існувати механізми, за допомогою яких ОС може запитувати розмір блоку стерти з картки, картка не повинна цього надавати, вона може брехати про це, і це стане абсурдом, якби ОС намагалася використовувати це.

З цього випливає, що оскільки:

  1. Контролер SD-карти не має поняття того, які дані "належним чином" належать куди в сенсі узгоджених файлових систем і розділів, і,

  2. SD-карта - це чорна скринька, в яку ОС не може по-справжньому побачити,

Тоді те, що є у заданому блоку стирання 1 Мб, де карта містить кілька розділів, використовуючи 4 кіБ або менші блоки файлової системи, має бути довільним, коли карта буде достатньо використана (і, можливо, навіть якщо вона не використовувалася багато в всі). Це, мабуть, справедливо, навіть якщо ви намагаєтесь змусити ОС використовувати більші / відповідні розміри блоків; вони закінчаться нерівними.

Так:

Якщо живлення відключається, поки SD-карта знаходиться в середині зміни блоку, це може призвести до втрати досить великого обсягу довільних даних, які можуть бути будь-якими з карти. Це може бути інформація з позначкою "лише для читання". Це може бути інформація з розділу, який навіть не змонтований , і, очевидно, досить, з переважно невикористаного завантажувального розділу.

Якщо це трапиться, і на картці немає власної системи захисту (яка у деяких може бути, але я впевнений, що це не так), то ви можете подивитися на ситуацію FUBAR. Journalling не захистить від випадкових пошкоджень розміру MB, які навіть не визнають меж розділів. Або fsck.

Або, оскільки апаратне забезпечення картки, як правило, є власником, не могло б нічого іншого, окрім програмного забезпечення, виробленого виробником картки - припускаючи, що це правдоподібно. Я ніколи про таке не чув. Це зробить картки складнішими, дорожчими та більше клопоту у використанні. Що не є метою.

Інакше кажучи, SD карт не призначений для надійного використання таким чином . Вони дешеві і дуже зручні, але це результат компромісу в протоколі: загалом, немає гарантії цілісності даних ні для чого на картці, якщо ви довільно вбиваєте владу на неї.

Що може піти не так, просто відключивши мережу Pi? Чи варто починати просто відключати штепсельну вилку? Примітка. У цьому випадку я не надто переживаю втрату даних.

Це фізично не зашкодить пі, ні, просто остерігайтесь, що "втрата даних" може поширитися на "марну карту", яку потрібно повністю переформатувати. Однак я б сказав, що шанс цього, якщо ви робите це із вимкненим зеленим світлом ACT, дуже низький.


  1. Це може бути суттєвим, якщо врахувати, чому деякі конкретні моделі / моделі картки явно гірше, ніж інші для деяких людей. На жаль, хоча дві картки, позначені однаково, можуть бути однаковими за заявленими ознаками (розміром, швидкістю тощо), виробники не зобов’язані робити їх справді на 100% однаковими з точки зору складових частин.

1

Це сильно залежить від вашої робочої схеми ОС:

  • Якщо ви використовуєте стандартну схему, коли ви використовуєте SD-карту в режимі r / w для фактичних даних (заміни розділів тут не враховуються) - це проблема, як у звичайному випадку "підключення живлення ПК до ПК" : все навколо Google, тож ви матимете безліч інформації про цю справу. Це абсолютно те саме: ті ж проблеми, однакові ризики та однаковий вплив.
  • Якщо ви просто читаєте дані зі своєї SD-картки, тобто монтуєте кожен розділ, що містить дані, зі своєї SD-картки з roможливістю, то це, без проблем, просто витягнути штекер: ви закінчуєте роботу своїх служб, вони збираються для резервного копіювання даних на зовнішній сховище для запису (наприклад, NAS або NFS / SMB / CIFS, наприклад), і після вимкнення служб - так, просто витягніть штекер: вам не потрібен диск RAM / tmpfs (s ) більше, і ви нічого не пошкодите

1
Ваш перший пункт невірний; SD-карта вводить ускладнення, які роблять її не "точно такою ж" проблемою, як, наприклад, спінінг-диски, де переміщення та перевірка повинні бути ефективними гарантіями більшості часу, або більш дорогі носії SSD, які можуть мати додаткове обладнання, і відповідатимуть суворіший стандарт порівняно зі ЗМІ. Qv моя відповідь, де я говорю про "Абстрактно, без врахування природи SD-карт ..."
goldilocks

1
@goldilocks, звичайно, в глибокому налаштуванні механіки носіїв зберігання різне. Я говорю тут більш загально, тобто "чому погано витягувати вилку, якщо ви не гарантуєте, що всі ваші дані зберігаються безпечно та точно".
Олексій Веснін

@goldilocks Дякую обом за чудові відповіді. Ви обоє зробили чудові бали, хоча я вирішив прийняти відповідь золотистого хлопця, оскільки він дає багато релевантної інформації, все ще відповідаючи на питання; однак я підтримав обидві відповіді.
Джеймс Вікері

1

Як відповів @goldilocks, ризик мало, але більшість з нас цього не робить.

Дуже просто додати безпечний перемикач потужності, який я використовую на голові Pi. Див. Як безпечно вимкнути Raspberry Pi? для цього майже немає ресурсів - крім трохи оперативної пам’яті та простої кнопки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.