Особливості розподілу та відновлення даних на різних рівнях RAID

basics of data organization and recovery on different raid types

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

Технологія RAID (Redundant Array of Independent Disks – надлишковий масив незалежних дисків) ідеально підходить для зберігання великої кількості даних та легкого доступу до них, але, на жаль, не завжди може похвалитися надійністю. Навіть такі просунуті системи не застраховані від різних проблем та можуть вийти з ладу, що веде до втрати важливої інформації. Ця стаття допоможе вам зрозуміти принципи організації даних на RAID та надасть іншу довідкову інформацію, яка здатна полегшити відновлення файлів, втрачених з масиву.


Основні поняття, пов'язані з RAID

Технічна інформація, яка відноситься до RAID, зазвичай подається у спеціальних термінах, що характеризують цей тип сховищ. Найбільш поширеними термінами, пов’язаними з такими масивами, є:

  • RAID – надлишковий масив незалежних дисків. Це поняття означає схему сховища, в якій окремі накопичувачі (або розділи) об'єднані в єдиний логічний блок. Залежно від фактичної організації даних, ця схема може збільшити його місткість, продуктивність і/або надійність.
  • Апаратний RAID– система RAID на базі апаратного забезпечення. Апаратний RAID складається з мікросхеми RAID-контролера або плати, що керує масивом, та набору підключених дисків. Операційна система розпізнає складне сховище як єдиний запам'ятовувальний пристрій. Управління інформацією здійснюється апаратним контролером, який також зберігає налаштування RAID.
  • Програмний RAID– система RAID на базі програмного забезпечення. Програмний RAID не використовує апаратних компонентів та створюється операційною системою або іншим програмним компонентом на наборі незалежних накопичувачів. Операційна система розпізнає програмний масив як єдиний запам'ятовувальний пристрій. Дані опрацьовуються драйверами ОС із використанням процесорного часу без додаткового обладнання (наприклад, програмний RAID NT LDM у Windows, mdadm RAID у Linux, програмний RAID, створений за допомогою дискової утиліти macOS та інші).
  • Віртуальний RAID – апаратний або програмний RAID, відтворений із компонентів у віртуальному режимі. Це віртуальне сховище, створене програмним забезпеченням для відновлення даних для емуляції вихідного сховища RAID з метою відновлення даних.
  • Компонент RAID – накопичувач або розділ, який використовується в якості складника системи RAID.
  • Дзеркалювання – це метод організації даних, що базується на реплікації інформації на окремі компоненти. Дзеркало створює повну копію одного компонента та використовує інший компонент для зберігання цієї копії. Це забезпечує високу відмовостійкість: якщо один компонент виходить із ладу, копія даних, розташована на іншому компоненті цього RAID, залишається доступною. Метод дзеркалювання реалізований в RAID рівня 1.
  • Чергування – це метод організації даних, що базується на розподілі їх фрагментів між компонентами масиву. Чергування даних дозволяє значно підвищити швидкість введення-виведення на RAID. Дані всього набору накопичувачів діляться на невеликі частини (страйпи) та розподіляються по всіх доступних компонентах. Чергування підвищує продуктивність сховища коштом паралельного читання/запису до компонентів, незалежно один від одного. Чергування реалізоване в RAID рівня 0.
  • Парність – це метод організації даних, що базується на записі сегментів інформації із різних компонентів RAID до виділеного компоненту або просто до інших компонентів масиву. Парність дозволяє підвищити відмовостійкість накопичувача: у разі виходу з ладу будь-якого диска, його вміст можна відтворити на резервному накопичувачі за допомогою даних із решти дисків (за умови виходу з ладу лише одного диска).
  • Код Ріда-Соломона – алгоритм виправлення помилок, заснований на алгебрі Галуа. Код Ріда-Соломона дозволяє підвищити надійність сховища та дозволяє йому витримувати одночасну відмову до двох накопичувачів. Цей алгоритм використовується в RAID 6.

Системи RAID без надлишковості

Що стосується RAID рівня 0 або JBOD, то термін RAID не пояснює фактичні функції цих технологій зберігання. Такі типи сховищ працюють наступним чином:

  • JBOD: Сховище, побудоване із певної кількості дисків, які можуть бути навіть різних розмірів. Кожен компонент JBOD слідує за попереднім, щоб створити єдиний логічний блок із розміром, рівним сумі розмірів кожного компонента. JBOD підтримується більшістю апаратних RAID-чіпів, а також програмними RAID (наприклад, динамічні диски під Windows можуть охоплювати різні накопичувачі або розділи).
  • RAID 0: набір страйпів на накопичувачах однакової місткості. Дані на цьому рівні поділяються на "страйпи" ідентичного розміру та циклічно розташовуються по всіх дисках. Розмір такого "страйпа" зазвичай сягає від 512 байтів і до 256 КБ. Метод чергування служить для розподілу довгих фрагментів інформації між усіма дисками. Це дозволяє виконувати запити на обмін даними одночасно до всіх дисків та прискорювати цю операцію шляхом паралельного читання або запису. Ці системи відрізняються високою швидкістю роботи та максимально ефективним використанням дискового простору.

Шанси на відновлення даних для цих систем очевидні: навіть якщо один накопичувач із такого масиву не вдається прочитати, дані всього сховища стають недоступними. Якщо збій одного диска відбувається у JBOD, весь фрагмент "спану" не підлягає відновленню. Для RAID рівня 0 це вплине на всі дані масиву (наприклад, якщо RAID 0 побудований на 4 дисках із розміром страйпу 16 КБ, то після збою одного диска сховище матиме "дірку" у 16 КБ після кожного 48-кілобайтного блоку. Загалом це означає, що будь-який файл із розміром, більшим за 48 КБ, не може бути відновлений).

Зверніть увагу: Якщо один або кілька дисків з RAID 0 або JBOD вийшли з ладу, припиніть користуватися системою та зверніться до лабораторії із відновлення даних. У цьому випадку тільки фізичний ремонт накопичувача може допомогти відновити файли.

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

Системи RAID на основі дзеркалювання

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

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

Системи RAID з надлишковістю

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

Такі системи включають RAID 3RAID 4 або RAID 7 (набір страйпів із виділеною парністю), RAID 5 (набір страйпів із розподіленою парністю) та RAID 6 (набір страйпів із подвійною розподіленою парністю). Термін "одинарна" парність означає, що інформація відновлюється або система функціонує після виходу з ладу одного компонента; "подвійна" парність – до двох компонентів.

RAID 3 і подібні системи використовують класичний метод RAID 0, розширений за допомогою одного додаткового диска для зберігання парності. RAID 5 і RAID 6 розподіляють парність між усіма дисками, щоб прискорити процес оновлення парності для операцій запису даних.

Відновлення даних із цих систем можливе в разі неушкодженого масиву або якщо один (в RAID 3, RAID 4, RAID 5, RAID 7) чи до двох (в RAID 6) компонентів було пошкоджено.

Зверніть увагу: У разі відмови декількох дисків негайно припиніть використовувати сховище та зверніться до лабораторії із відновлення даних. Вилучення даних можливе тільки за допомоги фахівців.

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

Комбіновані (гібридні) системи RAID

Гібридні конфігурації часто використовуються для підвищення загальної продуктивності або задля більшої надлишковості. Як правило, такі системи становлять собою комбінації вищезгаданих конфігурацій RAID. Найбільш поширеними є системи типу RAID 10: кілька "дзеркал" із "страйпом" над ними. Дзеркала забезпечують надлишковість, а страйп поверх дзеркал збільшує швидкість читання/запису. Відновити дані із такої системи досить просто: потрібно взяти будь-який непошкоджений компонент із кожного дзеркала та побудувати RAID 0 поверх нього у віртуальному режимі.

Більш просунуті системи включають RAID 50 (страйп поверх RAID рівня 5), RAID 51 (дзеркало із RAID 5) і т. д. Для реконструкції такої системи, наприклад, RAID 50, потрібно зібрати кожен компонент RAID нижчого рівня (в даному прикладі кожен RAID 5), а потім побудувати RAID із цих компонентів (у даному прикладі RAID рівня 0).

UFS Explorer RAID Recovery рекомендується як найбільш ефективне програмне забезпечення для відновлення даних та віртуальної побудови RAID будь-якого рівня.

Організація даних на RAID

Різні рівні RAID застосовують різноманітні методи організації даних для різних цілей. Кожен з рівнів має власні переваги і недоліки.

RAID рівня 0 (RAID 0, чергування даних)

RAID рівня 0 – це найбільш показовий приклад чергування даних. Термін “Надлишковий масив незалежних дисків” насправді не пояснює функціональність цього рівня RAID, оскільки він не включає надлишковості. Цей тип сховищ може складатися з двох або більше компонентів. Страйпами називаються фрагменти даних, і кожен страйп розташовується на наступному компоненті сховища.

raid 0 stripe set data organization scheme

Малюнок 1. Організація даних на наборі страйпів (RAID 0)

На Рис. 1 показано чергування даних, що використовується в RAID рівня 0. Така схема дозволяє прискорити операції введення-виведення до U разів (Де U – кількість дисків у RAID 0). Це досягається шляхом надсилання паралельних або послідовних запитів вводу-виводу до різних компонентів (зазвичай до різних жорстких дисків). Наприклад, щоб прочитати страйпи 0..3 (сегмент даних розміром 4 страйпи), контролер відправляє 2 одночасних запити на читання: для читання двох перших страйпів із Компоненту 1 і двох перших страйпів із Компоненту 2. Фізичне зчитування із компонентів відбувається одночасно, і контролер отримує результат у два рази швидше.

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

Переваги RAID рівня 0:

  • Надзвичайно висока продуктивність як при читанні, так і при записі;
  • Проста реалізація (навіть більшість вбудованих контролерів SATA підтримують RAID рівня 0);
  • Для зберігання даних доступно до 100% дискового простору;
  • Найдешевше рішення RAID.

Недоліки RAID рівня 0:

  • Відсутність відмовостійкості: Відмова одного компонента призводить до втрати даних.

Перспективи відновлення даних з RAID 0

  • Відмова контролера/розібраний масив: За допомогою інформації про розмір страйпу і порядок розташування компонентів можна легко відновити втрачену інформацію.
  • Пошкоджений компонент: Якщо який-небудь із дисків не вдається прочитати, відновлення наступних сегментів даних за межами РозмірСтрайпу * (КількістьДисків -1) неможливе.

RAID рівня 1 (RAID 1, дзеркальне відображення даних)

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

Переваги RAID рівня 1:

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

Недоліки рівня 1:

  • Найбільш неефективне використання дискового простору;
  • Повільні операції запису.

Перспективи відновлення даних з RAID 1

  • Відмова контролера/розібраний масив: Легко відновити всю інформацію з будь-якого компонента;
  • Пошкоджений компонент: Дані можна відновити з іншого читабельного компонента.

RAID рівня 4 (RAID 4, набір страйпів із виділеною парністю)

RAID 4 – це перша успішна спроба знайти компроміс між відмовостійкістю, швидкістю та вартістю масиву. Метод, реалізований у RAID 4, базується на звичайному наборі страйпів (як і в RAID рівня 0), розширеному за допомогою спеціального компонента для зберігання інформації про парність для контролю помилок. Цей масив може складатися із 3 або більше дисків. Ця схема також реалізована в RAID рівня 3 з однією відмінністю: метод чергування для RAID 3 є байтовим, а для RAID 4 – блоковим (секторним).

scheme of data organization on raid 4 stripe set with dedicated parity

Малюнок 2. Організація даних на наборі страйпів із виділеною парністю (RAID 4)

На Рис. 2 показаний метод відмовостійкості в дії. Набір страйпів зберігає фактичні дані RAID. Кожен "стовпчик" страйпів підсумовується з XOR для досягнення парності.

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

Переваги RAID рівня 4:

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

Недоліки RAID рівня 4:

  • Дуже повільні операції запису: Будь-яка операція запису/оновлення вимагає оновлення інформації про парність на одному виділеному диску;
  • Повільні операції зчитування в режимі "обмеженої функціональності" через високе навантаження на компонент із парністю.

Перспективи відновлення даних з RAID 4

  • Відмова контролера/розібраний масив: Легко відновити всі дані. Необхідно N-1 дисків, бажано дисків із даними (для побудови віртуального RAID 0); потрібна інформація про порядок дисків та розмір страйпу;
  • Пошкоджений компонент: Шанси на відновлення близькі до 100%, якщо тільки один диск вийшов із ладу. При відмові двох або більше дисків виникає та ж проблема, що і з RAID рівня

RAID рівня 5 (RAID 5, набір страйпів із розподіленою парністю)

На сьогодні RAID рівня 5 є найкращим компромісом між відмовостійкістю, швидкістю та вартістю масиву. Метод, який використовується в RAID 5, базується на звичайному наборі страйпів (як і в RAID 0), що на цьому рівні змішує дані та інформацію про парність. Як і RAID 4, він вимагає не менше трьох дисків, але не має спеціального диска для зберігання парності, тому не створює "черги" для оновлення парності під час операцій запису.

Залежно від мети, реалізації, постачальника та інших факторів RAID рівня 5 може відрізнятися методами розподілу парності по набору страйпів. Найбільш поширеними методами є: Ліво-симетричний (зворотний динамічний розподіл парності), Право-симетричний (прямий динамічний розподіл парності), Ліво-асиметричний (зворотний розподіл парності) та Право-асиметричний (прямий розподіл парності).

raid 5 left symmetric parity distribution scheme

Малюнок 3. Ліво-симетричний розподіл парності (RAID рівня 5)

raid 5 left asymmetric parity distribution scheme

Малюнок 4. Ліво-асиметричний розподіл парності (RAID рівня 5)

raid 5 right symmetric parity distribution scheme

Малюнок 5. Право-симетричний розподіл парності (RAID рівня 5)

raid 5 right asymmetric parity distribution scheme

Малюнок 6. Право-асиметричний розподіл парності (RAID рівня 5)

Відмовостійкість досягається тими ж засобами, що і в RAID 4: Набір страйпів зберігає фактичні дані та інформацію про парність; кожен стовпець страйпів підсумовується у страйп парності стовпця.

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

Переваги RAID рівня 5:

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

Недоліки RAID рівня 5:

  • Більш повільні операції запису у порівнянні з RAID 0;
  • Швидкість операцій запису залежить від вмісту та методу розподілу парності.

Перспективи відновлення даних з RAID 5

  • Несправність контролера/розібраний масив: Легко відновити всі дані. Бажано мати всі непошкоджені диски, але обов'язковими є N-1; Потрібна інформація про порядок дисків, розмір страйпу та метод розподілу парності;
  • Пошкоджений компонент: Шанси на відновлення близькі до 100%, якщо тільки один диск вийшов із ладу. При відмові двох або більше дисків виникає та ж проблема, що і з RAID 0.

RAID рівня 6 (RAID 6, набір страйпів з подвійною розподіленою парністю)

Надійне і в той же час економічне рішення для зберігання даних, RAID 6 було створено з метою розширення RAID рівня 5 за допомогою ще одного страйпа для надлишковості даних. Для цього застосовується алгоритм коду Ріда-Соломона на основі алгебри полів Галуа. Цей метод дозволяє додати ще один компонент для надлишковості даних та ефективно виправляти помилки.

Організація даних на RAID 6 аналогічна RAID 5: дані та парність (P-страйп) розподіляються по компонентах сховища. Різниця полягає в додатковому страйпі (Q-страйпі), який розташований разом із P-страйпом та містить суму даних GF.

Для отримання додаткової інформації про RAID 6 і алгоритми Q-страйпів, будь ласка, перейдіть за посиланням http://www.cs.utk.edu/~plank/plank/papers/CS-96-332

Переваги RAID рівня 6:

  • Більш швидкі операції читання;
  • Швидкі операції запису в залежності від методу розподілу даних та парності;
  • Висока відмовостійкість;
  • Сховище може працювати в режимі "обмеженої функціональності", коли один диск або навіть два диски виходять з ладу;
  • Економічно ефективний з погляду відмовостійкості.

Недоліки рівня 6:

  • Більш повільні операції запису в порівнянні з RAID 0;
  • Швидкість операцій запису залежить від змісту та методу розподілу парності.

Перспективи відновлення даних з RAID 6

  • Несправність контролера/розібраний масив: Легко відновити всі дані. Бажано мати всі непошкоджені диски, але обов'язковими є N-1 або N-2; потрібна інформація про порядок дисків, розмір страйпу та метод розподілу парності;
  • Пошкоджений компонент: Шанси на відновлення близькі до 100%, якщо тільки два диска виходять з ладу. Якщо пошкоджено більше двох дисків, виникає та ж проблема, що і з RAID 0.

Комбіновані RAID: рівень 0+1, рівень 10, рівень 50, рівень 51 і т. д.

Комбіновані конфігурації, що базуються на RAID 0, RAID 5 і RAID 1, були створені для підвищення продуктивності систем RAID. RAID рівня 0+1 застосовує дзеркалювання наборів страйпів для підвищення відмовостійкості без шкоди для продуктивності сховища. RAID рівня 10 застосовує розширення страйпів для дзеркалювання даних, покращуючи продуктивність та ефективність використання місткості сховища. RAID рівня 0+1 і рівня 10 вимагають не менше чотирьох дисків. RAID 50 – це набір страйпів сховищ RAID 5, створений з міркувань продуктивності, а RAID 51 – це дзеркало RAID 5, створене для забезпечення відмовостійкості (для побудови потрібно не менше 6 дисків).

data organization scheme on mirror of stripes RAID 0+1 with 6 units

Малюнок 7. Організація даних на дзеркалі страйпів (RAID 0+1; 6 компонентів)

data organization scheme on stripe of mirrors RAID 10 with 6 units and 2x3 mirrors)

Малюнок 8. Організація даних на страйпі дзеркал (RAID 10; 6 компонентів, 2х3дзеркала)

Переваги комбінованих рівнів:

  • Вища швидкість або відмовостійкість;
  • Масив може працювати в режимі "обмеженої функціональності";
  • RAID 10 і RAID 0+1 є найбільш доступними рішеннями (деякі вбудовані контролери підтримують ці типи RAID).

Недоліки комбінованих RAID:

  • Дорогі рішення, оскільки більша частина дискового простору використовується для дзеркал;
  • Складні в управлінні та підтримці.

Перспективи відновлення даних з комбінованих RAID

  • Відмова контролера/розібраний масив: Легко відновити всю інформацію;

Пошкоджений компонент: Шанси на відновлення близькі до 100%, якщо можна зібрати хоча б один набір страйпів (RAID 10, RAID 50) або хоча б одне дзеркало (RAID 0+1, RAID 51).

Відновлення даних з RAID

Файли, втрачені з RAID, можна легко повернути за допомогою ефективного програмного забезпечення для відновлення даних, здатного реконструювати складні системи зберігання. Для цієї мети SysDev Laboratories пропонує продукти UFS Explorer: UFS Explorer RAID Recovery було розроблено спеціально для роботи з масивами різних рівнів, а UFS Explorer Professional Recovery застосовує професійний підхід до процесу відновлення даних. Програмне забезпечення використовує складні алгоритми, що дозволяють досягти максимального результату відновлення, і є 100% надійним, гарантуючи цілковиту безпеку даних. Серед конфігурацій, підтримуваних програмним забезпеченням, можна виділити наступні:

  • Стандартні рівні RAID: RAID 0, RAID 1, RAID 1E, RAID 3, RAID 4, RAID 5, RAID 6;
  • Комбіновані схеми RAID: RAID 0+1, RAID 10, RAID 50, RAID 51 і т. д.;
  • Користувальницькі конфігурації RAID;
  • Нестандартні масиви RAID: Drobo BeyondRAID, Synology Hybrid RAID, ZFS RAID-Z, Btrfs-RAID.

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

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

  • Рівень RAID;
  • Порядок розташування його компонентів (крім RAID 1);
  • Розмір страйпу (за винятком RAID 1);
  • Розподіл парності та інші параметри (за наявності).

За більш детальними інструкціями, будь ласка, зверніться до відповідної статті, присвяченої відновленню даних із RAID:

Останнє оновлення: 06 серпня 2022

Якщо вам сподобалася ця стаття, поділіться нею у соцмережах: