Чи є спосіб захистити SSD від корупції через втрату електроенергії?


15

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

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

  • файли з неправильними дозволами
  • файли, які стали каталогами (наприклад, index.phpзараз це каталог)
  • каталоги, які стали файлами
  • файли із зашифрованими даними

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

Це "нормально" для корупції SSD? Спочатку ми думали, що це відбувається на деяких дешевих SSD-дисках, але у нас це відбувається на найменуванні (бренд споживача.)

FWIW, ми не робимо autofsck під нечистим завантаженням (не знаю, чому я новачок). У нас встановлені ДБЖ в деяких місцях, але іноді це не робиться належним чином і т. Д. Це потрібно виправити, але навіть тоді люди можуть нечисто вимикати термінал і т. Д. - тож це не дурно. Файлова система ext4.

Питання: чи є щось, що ми можемо зробити для пом’якшення проблеми на системному рівні?

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

Це приклад приводу sudo hdparm -i /dev/sda1:

Model=KINGSTON RBU-SMS151S364GG, FwRev=S9FM02.5, SerialNo=<deleted>
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=125045424
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes:  pio0 pio3 pio4
DMA modes:  mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7

5
Ви можете придбати кращі SSD-диски. Типові фірмові SSD мають вбудовані конденсатори, щоб забезпечити пристрій достатньою потужністю, щоб закінчити виписувати дані під час польоту у разі відключення електроенергії. Гроші, які ви економите, не потребуючи відновлення з повністю скрутованої файлової системи, легко виправдають скромні додаткові витрати.
Майкл Хемптон

1
Ну, ніхто не сказав , що ти повинен був замінити всі з них. Але ви можете використовувати кращі SSD для заміни та / або нових установок.
Майкл Хемптон

2
"Замінити їх усіх непросто" - це абсолютно. Почніть з того, щоб сказати хлопцеві makiong про рішення про купівлю, він несе відповідальність за витрати через грубі нехтування та некомпетентність. Хтось допустив істотну помилку, не будучи компетентним на кордоні.
TomTom

7
WriteCache=enabled. Це величезна проблема. Кеш запису ніколи не повинен бути включений на жорстких дисках, які мають базу даних. Деякі виробники, наприклад, HP, фактично не дають змоги кешувати запис на жорсткий диск саме з цієї причини.
Грег Аскеу

3
@ Зауважте, що відключення кешування запису в ОС не виправить факт, що ваш накопичувач пошкоджує дані про втрату електроенергії. Заради більшої швидкості та довговічності споживчі диски SSD можуть не записувати дані в енергонезалежну пам'ять під час запису у файл, і, на жаль, немає апаратного механізму для накопичувача, який би переніс дані з енергонезалежного кешу до енергонезалежного сховища на відключення електроенергії, це можуть зробити лише фірмові SSD. Повірте чи ні, я опинився в подібній ситуації, коли хтось купував багато споживчих SSD, наш постачальник, який цитував це обладнання, не знав, що це станеться.
jrh

Відповіді:


14

Коли раптово втрачається потужність, MLC / TLC / QLC SSD мають два режими відмови:

  • вони втрачають під час польоту і пише лише DRAM;
  • вони можуть пошкодити будь-які дані в стані спокою, що зберігаються на нижній сторінці комірки програми NAND.

Перша умова відмови очевидна: без захисту живлення втрачаються будь-які дані, які знаходяться не на стабільному сховищі (тобто: сам NAND), а лише в непостійному кеші (DRAM). Те ж саме відбувається з класичними механічними дисками (і лише вони можуть спричинити хаос у файловій системі, яка не видає належним чином fsyncs).

Друга умова відмови - справа MLC + SSD: при перепрограмуванні біту високої сторінки для зберігання нових даних несподівана втрата електроенергії також може знищити / змінити нижній біт (тобто попередні скоєні дані).

Єдине вірне і найбільш очевидне рішення - інтегрувати захищений від втрат електроенергією кеш-пам'ять DRAM (як правило, використовуючи батарею / суперкап), як це робиться назавжди висококласними RAID-контролерами; це, однак, збільшує вартість / ціну приводу. Споживчі накопичувачі, як правило, не мають кешованих захищених втрат потужності; скоріше, вони використовують масив більш економічних рішень як:

  • частково захищений кеш-запис (тобто: вирішальний M500 / M550 / M600 +);
  • Журнал змін NAND (тобто: накопичувачі Samsung, див. Атрибут SMART PoR);
  • спеціальні області SLC / pseudo-SLC NAND для поглинання нових записів без попередніх даних загрози (тобто: Sandisk, Samsung тощо).

Поверніться до свого запитання: ваші накопичувачі Kingstone - це наддешеві пристрої, що використовують не визначений контролер і, як правило, не публічні характеристики. Мене не дивує, що раптова втрата електроенергії пошкодила попередні дані. На жаль, навіть відключення кеш-пам’яті DRAM диска (з великою втратою продуктивності, яку він командує) не вирішить вашу проблему, оскільки попередні дані (тобто дані в стані спокою) можуть бути, і будуть пошкоджені несподіваними втратами електроенергії. Якщо вони базуються на старому контролері Sandforce, то при «правильних» обставинах можна очікувати навіть загальну цеглину приводу.

Я наполегливо пропоную переглянути Ваш ДБЖ та в середньостроковій перспективі замінити ці накопичувачі.

Остання примітка про PostgreSQL та інших базах даних Linux: вони не відключать кеш диска і не повинні бути вилучені для цього. Швидше, вони потребують періодичних / необхідних fsyncs / FUA, щоб ввести ключові дані для стабільного зберігання. Так потрібно робити, якщо не існує дуже вагомої причини (тобто: привід, який лежить про ATA FLUSHES / FUA).

EDIT: якщо можливо, розгляньте можливість переміщення до файлової системи контрольної суми як ZFS або BTRFS. По крайней мере, розглянемо XFS, в якому є контрольна сума журналів, а останнім часом навіть контрольна сума метаданих. Якщо ви змушені використовувати EXT4, подумайте про включення авто-fsck при запуску (fsck.ext4 дуже добре виправляє пошкодження).


Відмінна відповідь. Будь ласка, дивіться моє відповідне запитання serverfault.com/questions/924054/… - якщо ви хочете скопіювати / адаптувати цю відповідь туди, я би радий подати заявку / вибрати її. Здається, що відключення кешу запису допоможе лише у першому випадку. Чи є більше деталей щодо другого режиму відмови? Це пов'язано з відновленням балансу / вивезення сміття чи просто близькістю?
Єгосеф

1
@Yehosef Подивіться тут, у розділі "втрати електроенергії": anandtech.com/show/8528/…
shodanshok

1
Проблема будь-якого програмного рішення полягає в тому, що багато SSD-дисків прямо лежать в операційній системі щодо безпечного зберігання даних чи ні, в тому числі у відповідь на команди fsync / FUA. Для корпоративних накопичувачів, які мають достатнє сховище енергії для завершення потоку кеш-пам'яті при відключенні живлення, це не проблема.
BeowulfNode42

@ BeowulfNode42 Бар'єри ATA та FUA повинні бути виконані. У той час, коли в дні IDE / PATA деякі помилки накопичувалися, в даний час будь-який такий "брехливий" привід не сумісний з SATA / SAS, і його слід негайно викинути.
shodanshok

і все-таки ці невідповідні диски продаються все одно, особливо в сегменті споживчого ринку.
BeowulfNode42

11

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


Вони є Кінгстоном - тож я не знаю, чи вважаються вони дешевими, чи це несправна партія. Більша проблема полягає в тому, що блоки (~ 6k) вже знаходяться в полі і більшість не спрацьовує (можливо, лише тому, що не мають втрат електроенергії). Тож їх заміна - це дорога остання інстанція, до якої ми ще не потрапили.
Yehosef

додано інформацію про привід до запитання.
Yehosef

5
Вони дуже дешеві. Вони орієнтовані на цінові накопичувачі. Шукайте накопичувачі малих підприємств. ЧИТАЙТЕ СПЕЦИ. Взагалі захист від відключення живлення - це те, що є у специфікації.
TomTom

1
Щоб додати до @TomTom - іноді його насправді не називають захистом від відключення живлення - а іноді захист від відключення живлення насправді не є справді захистом від відключення електроенергії! Ви повинні ознайомитися з кожним виробником і дізнатися, як вони називають його для конкретної марки корпоративних SSD. (Дивіться, для кожного Номери проївши, для білих робіт вони написали про те , як дійсно перевершує їх власні твердотільні накопичувачі підприємства є.) І, я виявив , що, по крайней мере , для окремих покупок, це робить вартість трохи більше. Але я не роблю масових покупок, і, напевно, це може бути різним.
davidbak

3
З того, що я читав до цих пір, ці виробники мають такі назви для цієї функції, як: Kingston = "Pfail", як у серії DC400; Samsung = "Захист від втрати живлення"; Intel = "Покращений захист даних від втрати енергії"; Sandisk = "Захист від втрати даних із захистом від відключення живлення". Я не знаю, як це називають інші виробники, але потрібно глибоко читати специфікаційні листи. Зауважте, це також можна досягти за допомогою прошивки, якщо виробник надає це. Якщо у вас дійсно є> 6000 з них, я б зв’язався з Kingston і пояснив ситуацію та запропонував заплатити за прошивку за привід.
BeowulfNode42

7

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

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

Отже, влада. Встановіть, налаштуйте та перевірте, що UPS витончено закриє систему. Це дозволяє кешувати файлові системи та самі диски записувати.

І, довговічність запису на диски. Прочитайте розділ надійності PostgreSQL . Використовуйте diskchecker.plскріплений там скрипт, щоб зробити тест на збій і визначити, чи брешуть SSD-диски, якщо записи потрапили в енергонезалежне сховище. Якщо є втрати, подумайте про заміну на SSD, які, як відомо, мають захист від втрати електроенергії.

Редагувати: ви додали дані, кеш запису ввімкнено. Ви можете спробувати відключити це: hdparm -W0 /dev/sdaабо відповідну команду для апаратного масиву. Довідка: Посібник з адміністрування зберігання RHEL .

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

Нарешті, остання лінія оборони. Зробіть тест на відновлення, щоб переконатися, що ви зможете додати програму та базу даних до потрібного моменту. Це корисно для всіх видів втрати даних, а не лише відключення живлення.


Це кешування запису на диск є ймовірною відповіддю. З незрозумілої причини, здається, Postgres не відключає кешування запису диска, що є жахливим параметром за замовчуванням.
Грег Аскеу

1
Для уточнення - у нас є щоденні резервні копії, і ми синхронізуємо дані до хмари, тому проблема менш пов’язана із втратою даних Postgres (це викликає занепокоєння, але, думаю, є варіанти налаштування PG, які можуть допомогти.) Більш важливою проблемою є те, що машина стає непридатною для зв'язку з дивацтвом метаданих. FWIW, зазвичай машина завантажується, і ми можемо підключитися до неї, але програма виходить з ладу, оскільки її файли були зашифровані.
Yehosef

1
"Здається, Postgres не вимикає кешування запису на диск, що є жахливою настройкою за замовчуванням." @GregAskew Будь ласка, продемонструйте, як відключити кеш DRAM на комерційному SSD. Його не можна відключити.
TomTom

4
Через спосіб роботи SSD. Без кешу запису ви би спалили SSD набагато швидше. Осередки SSD великі і завжди повинні бути повністю записані - тому можливість комбінування декількох малих записів має вирішальне значення для життя SSD. Ось чому ви НЕ МОЖЕТЕ відключити його на споживчих накопичувачах (накопичувачі лежать або не дозволяють) І не можете це робити на корпоративних накопичувачах (накопичувачі в основному можуть лежати, оскільки вони нестабільні - у них достатньо запасів енергії, щоб написати драму - спалахнути
TomTom

3
@Yehosef Ні, навіть надійний Postgres не має сили магії відновити, якщо він надсилає дані на накопичувач, накопичувач каже: "Добре, отримали ваші дані", а потім накопичувач ніколи не замислювався над тим, щоб записати ці дані з внутрішніх тимчасових змінних кеш-пам'ять на власне енергонезалежне сховище. Важливо використовувати лише сховище якості підприємства, де накопичувач або рейдовий пристрій має внутрішній кеш, підтримуваний акумулятором або конденсатором. Postgres має функції (файл WAL тощо), щоб захистити вас від втрати даних, які ще не надсилаються на накопичувач, але Postgres не може відновити дані, втрачені всередині диска.
Василь Бурк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.