Я не маю звички відключати підключення пі в сенсі відключення їх належним чином відключення, за винятком випадків, коли я втратив мережу на безголовому пі, і в такому випадку я зазвичай лінивий підключати клавіатуру тощо
Як правило, я завжди перевіряю, чи не вмикається зелений індикатор 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-картці не знає про межі, такі як "файл", "файлова система" або навіть "розділ пристрою". Він просто має справу з фрагментами даних, які ОС хоче, через непрозорий шар ізсередини чорної скриньки, де все може відбуватися на фізичному рівні.
Однією з причин, яка очевидна (окрім картки передумов «не можна було б зробити це в першу чергу»), це те, що блоки часто бувають досить великими, але карти, здається, виконують гідну роботу, використовуючи весь простір. Блок стирання може мати розмір декількох мегабайт . Більше того, деталі є власником. Хоча можуть існувати механізми, за допомогою яких ОС може запитувати розмір блоку стерти з картки, картка не повинна цього надавати, вона може брехати про це, і це стане абсурдом, якби ОС намагалася використовувати це.
З цього випливає, що оскільки:
Контролер SD-карти не має поняття того, які дані "належним чином" належать куди в сенсі узгоджених файлових систем і розділів, і,
SD-карта - це чорна скринька, в яку ОС не може по-справжньому побачити,
Тоді те, що є у заданому блоку стирання 1 Мб, де карта містить кілька розділів, використовуючи 4 кіБ або менші блоки файлової системи, має бути довільним, коли карта буде достатньо використана (і, можливо, навіть якщо вона не використовувалася багато в всі). Це, мабуть, справедливо, навіть якщо ви намагаєтесь змусити ОС використовувати більші / відповідні розміри блоків; вони закінчаться нерівними.
Так:
Якщо живлення відключається, поки SD-карта знаходиться в середині зміни блоку, це може призвести до втрати досить великого обсягу довільних даних, які можуть бути будь-якими з карти. Це може бути інформація з позначкою "лише для читання". Це може бути інформація з розділу, який навіть не змонтований , і, очевидно, досить, з переважно невикористаного завантажувального розділу.
Якщо це трапиться, і на картці немає власної системи захисту (яка у деяких може бути, але я впевнений, що це не так), то ви можете подивитися на ситуацію FUBAR. Journalling не захистить від випадкових пошкоджень розміру MB, які навіть не визнають меж розділів. Або fsck.
Або, оскільки апаратне забезпечення картки, як правило, є власником, не могло б нічого іншого, окрім програмного забезпечення, виробленого виробником картки - припускаючи, що це правдоподібно. Я ніколи про таке не чув. Це зробить картки складнішими, дорожчими та більше клопоту у використанні. Що не є метою.
Інакше кажучи, SD карт не призначений для надійного використання таким чином . Вони дешеві і дуже зручні, але це результат компромісу в протоколі: загалом, немає гарантії цілісності даних ні для чого на картці, якщо ви довільно вбиваєте владу на неї.
Що може піти не так, просто відключивши мережу Pi? Чи варто починати просто відключати штепсельну вилку? Примітка. У цьому випадку я не надто переживаю втрату даних.
Це фізично не зашкодить пі, ні, просто остерігайтесь, що "втрата даних" може поширитися на "марну карту", яку потрібно повністю переформатувати. Однак я б сказав, що шанс цього, якщо ви робите це із вимкненим зеленим світлом ACT, дуже низький.
- Це може бути суттєвим, якщо врахувати, чому деякі конкретні моделі / моделі картки явно гірше, ніж інші для деяких людей. На жаль, хоча дві картки, позначені однаково, можуть бути однаковими за заявленими ознаками (розміром, швидкістю тощо), виробники не зобов’язані робити їх справді на 100% однаковими з точки зору складових частин.