Знімки ZFS: Як створювати, відновлювати та автоматизувати їх
10 хв читання - 5 травня 2026 р.

Дізнайтеся, як створювати, відновлювати та автоматизувати створення знімків 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-48 | 30 | 8 | 12 |
| База даних (високий відтік) | 72 | 30 | 12 | 24 |
| Журнали / низький пріоритет | 12-24 | 7 | 0 | 3 |
| Статичні медіа | 0 | 7 | 0 | 3 |
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 у Linux. Охоплює команди, відкат, політики збереження та реплікацію за межами сайту за допомогою Sanoid
10 хв читання - 5 травня 2026 р.
Як встановити та використовувати Redis на VPS
9 хв читання - 7 січня 2026 р.

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