Знімки ZFS: Як створювати, відновлювати та автоматизувати їх

10 хв читання - 5 травня 2026 р.

hero section cover
Зміст
  • Знімки ZFS: Як їх створювати, відновлювати та автоматизувати
  • Як працюють знімки ZFS
  • Створення знімків
  • Відновлення зі знімків
  • Керування та обрізання знімків
  • Автоматизація збереження за допомогою Sanoid
  • Реплікація за межами сайту за допомогою zfs send
  • Зауваження щодо захисту від програм-вимагачів
  • Відео-рекомендація
  • Заключні думки
Поділитися

Дізнайтеся, як створювати, відновлювати та автоматизувати створення знімків ZFS у Linux. Охоплює команди, відкат, політики збереження та реплікацію за межами сайту за допомогою Sanoid

Знімки ZFS: Як їх створювати, відновлювати та автоматизувати

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

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

Як працюють знімки ZFS

ZFS використовує модель копіювання при записі (CoW). Коли ви робите знімок, ZFS не дублює жодних даних. Вона просто записує поточний стан дерева покажчиків блоків. Нові записи йдуть у вільні блоки, в той час як знімок продовжує посилатися на оригінали.

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

Це принципово відрізняється від інструментів резервного копіювання на рівні файлів, таких як rsync або tar, які сканують і копіюють цілі файли. Якщо ви змінюєте 4 КБ файлу розміром 10 ГБ, rsync копіює весь файл. ZFS зберігає лише блок розміром 4 КБ.

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

Створення знімків

Необхідні умови

Вам потрібно встановити ZFS і налаштувати пул. На Ubuntu 20.04+:

sudo apt update && sudo apt upgrade -y
sudo apt install zfsutils-linux -y
sudo modprobe zfs

Створіть пул. Для одного диска (зазвичай на VPS):

sudo zpool create tank /dev/sdb

Для дзеркального налаштування на виділеному сервері використовуйте ідентифікатори дисків замість назв пристроїв, щоб уникнути проблем після перезавантажень:

sudo zpool create tank mirror /dev/disk/by-id/ata-DISK1 /dev/disk/by-id/ata-DISK2

Увімкніть стиснення (LZ4 працює швидко і ефективно):

sudo zfs set compression=lz4 tank

Потім створіть набори даних для ваших робочих навантажень:

sudo zfs create tank/web
sudo zfs create tank/databases

Зробіть знімок

Основна команда:

sudo zfs snapshot tank/web@before-update

Для імен з позначкою часу (корисно з cron):

sudo zfs snapshot tank/db@$(date +%Y%m%d_%H%M%S)

Щоб зробити знімок усіх дочірніх наборів даних одразу, використовуйте прапорець рекурсивності:

sudo zfs snapshot -r tank@daily_backup

Перевірте за допомогою:

sudo zfs list -t snapshot

Відновлення зі знімків

Відновлення окремих файлів

Кожен набір даних ZFS має прихований каталог .zfs/snapshot у точці монтування. Він не відображається в ls, але ви можете перейти до нього безпосередньо:

ls /tank/web/.zfs/snapshot/before-update/

Щоб відновити окремий файл:

cp -p /tank/web/.zfs/snapshot/before-update/config/app.conf /tank/web/config/

Прапорець -p зберігає дозволи і мітки часу.

Відкочування всього набору даних

Якщо вам потрібно повернути все, наприклад, після невдалого оновлення:

sudo zfs rollback tank/web@before-update

Це відбувається майже миттєво, оскільки ZFS оновлює покажчики блоків, а не копіює дані. Але це руйнівно: всі зміни, зроблені після створення знімка, будуть безповоротно втрачені.

Якщо між цільовим і поточним станом існують новіші знімки, ZFS заблокує відкат. Використовуйте -r, щоб примусово виконати відкат і видалити ці проміжні знімки:

sudo zfs rollback -r tank/db@20260426_090000

Гарна звичка: створюйте знімок поточного (порушеного) стану перед відкотом, щоб мати запасний варіант у разі потреби.

Метод відновленняШвидкістьРизик втрати данихНайкраще підходить для
Відновлення файлів через .zfsЗалежить від розміру файлуВідсутнійВипадкові видалення, відновлення одного файлу
Повний відкатМиттєвийВисокий (втрачаються всі зміни після створення знімка)Невдалі оновлення, загальносистемні проблеми
Клон для тестуванняМиттєвийНі (створює паралельний набір даних)Перевірка перед фіксацією відкату

Керування та обрізання знімків

Знімки починаються з нульового розміру, але збільшуються в міру того, як під ними змінюються реальні дані. Для перевірки використання простору:

zfs list -t snapshot -o name,used,refer,creation

Стовпчик USED показує, скільки місця зайнято тільки для цього знімка. REFER показує загальний розмір набору даних на момент створення знімка.

Щоб видалити знімок:

sudo zfs destroy tank/web@before-update

Ви також можете видалити за шаблоном:

sudo zfs destroy tank/web@daily-2026-04-%

Завжди спочатку виконуйте пробний запуск:

sudo zfs destroy -nv tank/web@daily-%

ZFS технічно може обробляти мільйони знімків, але продуктивність погіршується після кількох тисяч набору даних. Такі команди, як zfs list і zfs destroy помітно сповільнюють роботу. Слідкуйте за збереженням даних.

Автоматизація збереження за допомогою Sanoid

Sanoid - це стандартний інструмент для автоматизації створення та обрізання знімків ZFS. Ви визначаєте політики збереження в sanoid.conf, а він обробляє все інше.

Типова виробнича конфігурація може виглядати так:

Тип навантаженняПогодиннийЩоденнийЩотижняЩомісяця
Стандартне виробництво24-4830812
База даних (високий відтік)72301224
Журнали / низький пріоритет12-24703
Статичні медіа0703

Sanoid також підтримує щогодинні знімки за допомогою параметра frequently. Якщо встановити frequently = 96 і frequent_period = 15, ви будете робити знімки кожні 15 хвилин.

Заплануйте запуск Sanoid за допомогою cron на кожну хвилину або кожні 15 хвилин, і він буде створювати і видаляти знімки автоматично.

Реплікація за межами сайту за допомогою zfs send

Знімки на одному сервері захищають від випадкових змін і збоїв програмного забезпечення, але не від втрати обладнання. Для цього виконуйте реплікацію за межами сайту за допомогою zfs send і zfs receive по SSH:

zfs send tank/web@backup | ssh user@remote zfs receive backup/web

Для інкрементного перенесення (надсилання лише того, що змінилося з моменту останнього знімка):

zfs send -i tank/web@old_snap tank/web@new_snap | ssh user@remote zfs receive backup/web

Супутній інструмент Sanoid, syncoid, автоматизує цей процес і обробляє інкрементні надсилання, виправлення помилок і ведення журналів.

Зауваження щодо захисту від програм-вимагачів

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

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

Відео-рекомендація

Заключні думки

Знімки ZFS є швидкими, компактними і простими у використанні, якщо ви розумієте основи. Вони не замінюють резервне копіювання за межами підприємства, але заповнюють прогалину, яку не можуть заповнити традиційні інструменти резервного копіювання: миттєві точки відновлення з нульовими накладними витратами, які ви можете створювати так часто, як вам потрібно.

Якщо ви використовуєте ZFS на VPS або виділеному сервері, налаштуйте Sanoid, визначте політику зберігання та автоматизуйте реплікацію. Це займе 30 хвилин і заощадить години, якщо щось піде не так. Спробуйте на VPS або виділеному сервері FDC.

Блог

На цьому тижні

Більше статей
Знімки ZFS: Як створювати, відновлювати та автоматизувати їх

Знімки ZFS: Як створювати, відновлювати та автоматизувати їх

Дізнайтеся, як створювати, відновлювати та автоматизувати створення знімків ZFS у Linux. Охоплює команди, відкат, політики збереження та реплікацію за межами сайту за допомогою Sanoid

10 хв читання - 5 травня 2026 р.

Як встановити та використовувати Redis на VPS

9 хв читання - 7 січня 2026 р.

Більше статей
background image

Маєте запитання або потребуєте індивідуального рішення?

icon

Гнучкі варіанти

icon

Глобальне охоплення

icon

Миттєве розгортання

icon

Гнучкі варіанти

icon

Глобальне охоплення

icon

Миттєве розгортання