Чи може несподівана втрата електроенергії завдати шкоди встановленню Linux?


22

Я розробляю додаток на вбудованій дошці Linux (працює Debian), наприклад, Raspberry Pi, Beagle Board / Bone або olimex. Плати працюють в умовах, коли електроенергія відключається несподівано (розміщення блоку живлення тощо) дуже складно, і це буде щодня пару разів. Цікаво, чи несподіване відключення електроенергії спричинить збій / проблему в операційній системі Linux? Якщо я повинен хвилюватися через щось, що б ви запропонували запобігти пошкодженням ОС внаслідок несподіваних вимикань живлення?

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


1
Тримайтеся подалі від ext2 (використовуйте ext3 або вище) у файлових системах, які ви багато модифікуєте, і з більшою частиною вам повинно бути в порядку.
LawrenceC

Якщо ви не дуже обережні в spec'ing ваших SD карт, то карти не гарантують нічого , якщо ви ріжете влада несподівано. Картка може опинитися посеред кроку зношування, що призведе до дивної, несподіваної корупції - яка може бути навіть в іншому розділі!
дероберт

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

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

Відповіді:


14

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

Як писав l0b0, використання файлової системи журналу допоможе, оскільки вона зможе відстежувати, що насправді було зроблено. На додаток до інформації в вікіпедії , що l0b0 пов'язані, ви можете бути зацікавлені в /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure , а також .

Ви, як програміст, очевидно, повинні ретельно обмірковувати, як обробляти запис у файли, щоб він став атомним процесом (тобто це повністю зроблено або зовсім не зроблено, але ніколи не робиться наполовину). Це досить складне питання.


10
Загальний процес в коді для захисту від переривань запису, що пошкоджує файл, полягає в тому, що замість того, щоб безпосередньо змінювати file.name, ви замість цього записуєте абсолютно новий файл file.name.newversion, а потім використовуєте команди delete / перейменування для заміни старої версії новий. Вам потрібно додати код очищення, щоб відновитись після перерви на кожному кроці; але такий підхід завжди залишає хорошу копію файлу на диску. Це може вплинути на ваш дизайн, оскільки він погано оновлює величезні файли або вносить часті зміни до одного файлу.
Ден Нелі

11

Щоб мінімізувати можливість пошкодження ОС, напевно, найкраще мати окремі розділи "система" та "дані" на SD-картці. Таким чином ви зможете змонтувати "системний" розділ лише для читання та використовувати високоеластичний FS на розділі "дані".

Крім того, більшість цих плат мають дуже низькі вимоги до енергії, тому можливе резервне копіювання акумулятора. Дошка "LiPo rider" для Raspberry Pi може використовуватися як основний ДБЖ, щоб забезпечити чисте відключення від втрати електроенергії.


5

Це залежало б від

  1. чи використовуєте ви файлову систему журналу та
  2. наскільки добре програми можуть впоратися з перерваною обробкою.

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

Про гіпотетичну складну систему може бути дуже важко сказати що-небудь певне, але, здається, більшість стабільних програмних засобів Linux здатні справляти збої досить добре.


1

Оскільки ніхто не згадував про якісь конкретні файлові системи: більш сучасні файлові системи (ext3, ext4, ntfs) здатні обробляти збої набагато краще, ніж старі файлові системи (ext2, ext, fat32) завдяки журналу .

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

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