Резервне копіювання даних між серверами
Цей посібник пояснює, як копіювати та створювати резервні копії даних між серверами Linux за допомогою rsync, а також як виконувати низькорівневе клонування дисків за допомогою dd.
Перед початком роботи
Команди, наведені в цьому посібнику, виконуються на сервері-джерелі — сервері, з якого копіюються дані. Сервер призначення має бути доступний через SSH, а користувач, указаний у команді, повинен мати права на читання вихідного шляху та запис до шляху призначення.
Щоб перевірити доступ до сервера призначення через SSH перед створенням резервної копії:
ssh user@destination_host
Замініть user на ім'я віддаленого користувача, а destination_host — на IP-адресу або ім'я хоста сервера призначення.
Для автоматичних або запланованих резервних копій налаштуйте автентифікацію SSH за допомогою ключів замість використання паролів.
Копіювання каталогу на віддалений сервер
Зверніть увагу, що кінцевий слеш у вихідному шляху впливає на поведінку rsync: /source/ копіює вміст каталогу, тоді як /source копіює сам каталог.
Завжди використовуйте --dry-run перед виконанням команд із --delete, щоб уникнути випадкової втрати даних. Щоб попередньо переглянути, які дані буде передано, без внесення змін:
rsync -a --delete --dry-run -e ssh /path/to/source/ user@destination_host:/path/to/backup/
Після перевірки результату виконайте ту саму команду без --dry-run. Додайте -P, щоб можна було продовжити перервану передачу та переглядати її прогрес:
rsync -a --delete -e ssh -P /path/to/source/ user@destination_host:/path/to/backup/
Опція -a зберігає права доступу, часові мітки та символічні посилання. Опція --delete забезпечує точне дзеркалювання джерела в місці призначення, видаляючи файли, яких немає в джерелі. Додайте -v, щоб відображати детальну інформацію.
Опція --delete видалить із місця призначення файли, яких немає в джерелі. Не використовуйте її, якщо в каталозі призначення є файли, які потрібно зберігати незалежно від джерела.
Копіювання більшості системних файлів
Щоб скопіювати більшу частину файлової системи, виключивши віртуальні та тимчасові каталоги:
rsync -aAXv --delete --one-file-system --numeric-ids \ --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found,/swapfi le} \ / user@destination_host:/path/to/backup/
Використані опції: -a зберігає права доступу, часові мітки, символічні посилання та виконує рекурсивне копіювання; -A зберігає ACL; -X зберігає розширені атрибути; -v відображає детальну інформацію. Опція -H для жорстких посилань навмисно не використовується: системні жорсткі посилання не потрібно реплікувати у віддаленій резервній копії, а їхнє збереження збільшує час і складність передачі. Опція --one-file-system не дозволяє rsync переходити до інших змонтованих файлових систем. Опція --numeric-ids зберігає значення UID і GID без зіставлення їх з іменами користувачів, що важливо, коли на серверах-джерелі та призначенні використовуються різні конфігурації користувачів.
У більшості виключених шляхів використовується кінцевий слеш, щоб виключити вміст каталогу, зберігши сам каталог. /lost+found не має кінцевого слеша, оскільки потрібно виключити весь каталог, а не лише його вміст. Те саме правило для кінцевого слеша застосовується до вихідного шляху: /source/ копіює вміст каталогу, тоді як /source копіює сам каталог.
Цей метод не створює завантажувальний образ системи і не повинен використовуватися як заміна повному резервному копіюванню системи. Для створення узгоджених резервних копій активних систем рекомендується перед виконанням команди зупинити критичні служби або використовувати знімки файлової системи, наприклад знімки LVM.
Повне клонування каталогу за допомогою rsync
Щоб виконати повне клонування дерева каталогів із збереженням жорстких посилань, ACL і розширених атрибутів:
rsync -aAHXv /source/dir/ user@destination_host:/destination/dir/
Використані тут опції: -a зберігає права доступу, часові мітки, символічні посилання та виконує рекурсивне копіювання; -A зберігає ACL; -H зберігає жорсткі посилання, що важливо для точного клонування каталогу; -X зберігає розширені атрибути; -v відображає детальну інформацію.
Клонування диска за допомогою dd
Щоб клонувати весь диск на інший диск того самого сервера:
dd if=/dev/sdX of=/dev/sdY bs=1M conv=noerror,sync status=progress
Замініть sdX на вихідний диск, а sdY — на цільовий диск. Опції conv=noerror,sync дозволяють продовжити копіювання після помилок читання, заповнюючи пошкоджені блоки нулями. Якщо цілісність даних є критично важливою, не використовуйте ці опції, щоб dd зупинився при першій помилці, а не замінював пошкоджені блоки нулями без попередження.
Щоб клонувати диск на віддалений сервер через SSH:
dd if=/dev/sdX bs=1M status=progress | ssh user@destination_host 'dd of=/dev/sdY bs=1M'
Як місце призначення також можна використовувати шлях до файлу замість блочного пристрою.
dd без запиту підтвердження безпосередньо записує дані на цільовий пристрій або у цільовий файл. Перед виконанням команди уважно перевірте джерело та призначення. На працюючих системах за можливості відмонтуйте всі розділи вихідного диска або перемонтуйте їх у режимі лише для читання. Для створення узгоджених резервних копій змонтованих файлових систем використовуйте знімки LVM або завантажте систему із середовища відновлення.
Перевірка резервної копії
Після завершення передачі підключіться до сервера призначення та перевірте розмір резервної копії і її базову структуру:
ssh user@destination_host du -sh /path/to/backup/ ls /path/to/backup/
Для ретельної перевірки цілісності виконайте rsync з параметрами --checksum і --dry-run. Це порівняє вміст файлів, а не часові мітки, і повідомить про будь-які відмінності:
rsync -av --checksum --dry-run /path/to/source/ user@destination_host:/path/to/backup/
Зверніть увагу, що для великих обсягів даних ця процедура може зайняти значно більше часу, ніж звичайний запуск rsync.