“Безпечна” конфігурація ext4 для систем, що працюють без нагляду


18

У мене працює система Linux, яка повинна працювати без нагляду протягом тривалих періодів часу. Система використовує промислові картки CF для зберігання. Більшу частину часу немає запису на спалах, хоча час від часу деякі конфігураційні дані / налаштування можна змінювати. Система повинна бути стійкою до відмов живлення.

Я хотів би використовувати для цього ext4. Який найкращий спосіб налаштувати ext4 для такого типу налаштування? Маючи на увазі, що:

  • Продуктивність зовсім не є проблемою (особливо виконання запису)
  • Після втрати електроенергії система повинна завжди завантажуватися в чистому стані, навіть якщо це означає, що дані, записані в останні кілька секунд, втрачаються
  • Якщо можна уникнути fsck, то все краще.

(Мені відомо про це пов'язане питання: Запобігання пошкодження даних на ext4 / Linux при втраті живлення )

Відповіді:


11

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

Моє рішення полягало у створенні системи initramfs на основі Gentoo, що містить лише папку rw для додатків та конфігурацій (такий підхід використовується у всіх постачальників маршрутизаторів / брандмауерів). Це рішення додасть додатковий рівень складності при роботі з оновленнями системи, але запевняємо, що система ВИНАГО завантажиться.

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

Відгуки: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt


Добре! Якщо програма не записує занадто багато даних, ви повинні бути задоволені параметром синхронізації.
Джованні Торальдо

1
Найкраще подивитись - це документація на ядро ​​Linux: kernel.org/doc/Documentation/filesystems/ext4.txt Увімкнути дані = журнал і виконувати = nrsec для мінімізації будь-якої потенційної втрати даних (* == за замовчуванням)
Giovanni Toraldo

Визначені тимчасові зобов’язання, безумовно, корисні - я вважаю, що ви можете зменшитись лише до інтервалів 1 секунди (хоч і з МАЄМО покаранням продуктивності за великі операційні записи), але якщо ви не можете дозволити собі 1 секунду втрати даних, у вас є більші проблеми;)
voretaq7

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

1
@Grodriguez "втратити" дані може бути що завгодно, від "Файлу вже немає" до "Чому в моїй базі даних є фрагмент ядра?" - Все залежить від того, що "втрачено" :)
voretaq7

12

Я виступлю з цим, кажучи про те, що, що стосується мене, EXT (у всіх його втіленнях) є досить жахливою файловою системою - я бачив більше " цікавих " випадків пошкодження файлової системи у відносно невеликій кількості Linux / EXT {2,3,4} систем, якими я керував, ніж у мене, у відносно великій кількості файлових систем Not-EXT, які мені довелося використовувати.
Якщо це можливо, спробуйте вибрати більш надійну файлову систему. Ви подякуєте собі, коли станеться неминуче.


Зважаючи на це, і всі мої особисті упередження відкрито і відсунуті в сторону, EXT4 має три особливості, про які я можу подумати, що можуть вам допомогти:

  • Журнал роботи
    EXT4 може бути Journaled файлової системи, якщо ви хочете бути. Увімкніть функцію ведення журналу (і спеціально встановіть режим журналу даних за journalдопомогою tune2fsабо як варіант монтажу).
    Це спричиняє звернення до продуктивності, оскільки всі дані повинні бути записані в журнал EXT до того, як вони "зафіксуються" у файловій системі (кожне записування в основному відбувається двічі), але це гарантує, що ви завжди зможете відновитись, оскільки перезапис журналу отримає вас без будь-якого проблеми.

  • SYNChronous Mounts
    Коли безпека є найважливішою, монтажу файлової системи з цим syncваріантом завжди є хорошою ідеєю. Це змушує всіх записувати на диск негайно - знову це хіт на продуктивність, але гарна ідея, якщо ви очікуєте відключення живлення або випадкових незнайомих людей, які виривають карту CF.

  • Максимально обмежте файлові системи, що записуються. Ця не є EXT-специфічною, але загальноприйнята філософія Linux "просто створити один великий корінний розділ і скинути все в нього" - це, чесно кажучи, нерозумно . Створіть правильну структуру файлової системи ( /, /var, /usr, /homeі т.д. ...), і встановити , як багато файлові системи тільки для читання , як це можливо.
    Це було звичайною порадою для Unix систем заради безпеки, але у вашому випадку це має додаткову перевагу: Ви не можете пошкодити файлову систему, якщо не можете записати на неї.


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

Яку файлову систему ви рекомендуєте? Чи можете ви оцінити свій досвід?
Марк Вагнер

@embobo мій досвід є абсолютно анекдотичним: я ніколи не перевіряв стрес сімейства файлових систем EXT, але один інцидент, який виникає в моїй свідомості, коли у мене був сервер Squid, який страждав від "Куди пішли всі мої вставки?!?" - файлова система затупилася і якось згодом була позначена чистою, але кожна індеда якось залишалася у заявленому, але ніколи не посилається стані. Fsck для виправлення цього конкретного безладу був позитивно EPIC (ми закінчились лише роблячи новий FS). Тоді я втратив довіру до файлових систем сімейства EXT.
voretaq7

@Grodriguez Re: Журналістика - це три варіанти data=journal(те, що я описав вище), data=ordered(метадані передаються в журнал. Дані фіксуються на диску до того, як метадані будуть зафіксовані у файловій системі), і data=writeback(що фактично не має журналу / захисту даних - Погані речі може статися після збою, як мотлох посередині файлів). Я вважаю, що orderedце за замовчуванням для більшості дистрибутивів Linux за ці дні ...
voretaq7

2
Окрім "Максимально обмежити файлові системи, що записуються": У debian wiki - це посібник, щоб зробити саме це з багатьма прикладами на демонах, які потребують спеціального лікування. Це має бути справедливим і для більшості інших дистриктів: wiki.debian.org/ReadonlyRoot
krissi

7

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

Дві кандидатські файлові системи - LogFS і NILFS . Обидва доступні в основному ядрі Linux.


1

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

Ext4 (та сімейство) - це чудова файлова система загального призначення з (я думаю) багатьма мільярдами годин використання на різноманітних апаратурах та випадках використання. Однак те, що ви запитуєте, не відповідає дійсності ext4. Покажчики від voretaq7 та Giovanni допоможуть вам найкраще використати ext4, якщо вам доведеться, але справжня відповідь - використовувати щось більш відповідне вашим вимогам. Стів дав вам кілька варіантів. Якщо ви продовжуєте тягнути силу з ext4 FS, з часом ви отримаєте безлад.

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

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

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