Как создать резервную копию запущенной системы?

У меня есть работающая система Linux, и я бы хотел иметь полную резервную копию с помощью dd , что в моих ограниченных знаниях – единственный инструмент, который есть в каждой системе.

В дистрибутиве не важно, потому что я должен применить этот подход к нескольким различным серверам с различными настройками, и я не могу установить новое программное обеспечение на этих серверах.

Каков наиболее общий и эффективный способ выполнения такой задачи?

Не так много решений, как несколько советов, которые могут быть полезны, если вы используете tar / cpio / rsync и т. Д. Во-первых, было бы неплохо сделать резервную копию с монтирования привязки исходной файловой системы ( mount --bind source mntdir ). Это будет иметь такой же эффект, как параметры --one-file-system для rsync и tar и -xdev с помощью find . У этого есть преимущества работы, если эти параметры недоступны (возможно, из-за старой версии, хотя обратите внимание, что привязки mounts были введены в Linux 2.4) и разрешить резервное копирование файлов под точками монтирования, что может быть желательно в некоторых случаях.

Во-вторых, я бы посоветовал, когда это возможно, использовать числовые uids и gids ( --numeric-owner для tar , --numeric-ids для rsync и --numeric-uid-gid для cpio ). Если вы восстанавливаете резервную копию без этого, а владелец / группа больше не существует или uid / gid отличается (это может произойти, особенно если для восстановления резервной копии используется живой диск), вы можете использовать один набор uids / gids, когда восстановление, которое становится недействительным после восстановления /etc/passwd и /etc/group .

Кроме того, взгляните на clonezilla . Методы, которые они используют для выполнения основной части резервной копии, могут быть вам не полезны, но при запуске имеют параметры резервного копирования загрузочных секторов / таблиц разделов и поддерживают как MBR, так и GPT, поэтому могут быть некоторые сценарии, которые могут быть скопированные / адаптированные к вашим целям.

В качестве последних 2 центов я бы рассмотрел rsync как стандартный способ сделать это. Это, безусловно, самый эффективный метод при создании инкрементных резервных копий, хотя и не столько для полной резервной копии. Конечно, это не повсеместно, но я думаю, что ошибочно не включать его в серверную версию дистрибутива. Он может быть уже установлен на всех ваших серверах.

Использование dd в моем случае может вызвать проблемы при восстановлении позже, поскольку оно считывает данные на уровне блоков с устройства, в то время как файловая система может обновлять блоки в другом порядке. Это приводит к ошибкам файловой системы на восстановленном устройстве. Он также требует, чтобы вы восстановили блок-устройство (или установили петлю изображение), поэтому оно не так гибко для восстановления.

Всегда возникают проблемы при резервном копировании запущенной системы, которая не поддерживает моментальные снимки на уровне ОС, но у меня было меньше проблем с использованием cpio (и использование tar было бы одинаковым). Могут быть файлы, которые неполны или не синхронизированы друг с другом, но основная файловая система не будет иметь ошибок. Другой альтернативой dd является rsync, если у вас это есть. Вы делаете снимок на другом диске / сервере. С помощью find и cpio легко создать файл timestamp и выполнить второй запуск с измененными файлами после отметки времени (это выполняется намного быстрее, чем оригинал, и дает меньше шансов на то, что файлы не синхронизированы друг с другом), то же самое может быть выполнено с повторным запуском rsync Ни cpio ни rsync обрабатывают bootsector и т. д. вы должны позаботиться об этом отдельно. dd хорош для этого, поскольку он редко изменяется при запуске dd .

Для полной восстановительной установки создаю дамп разбиения ( fdisk -l или parted -l ), копию загрузочного сектора, список типов файловой системы для каждого раздела и cpio .tar файлы содержимого разделов (все сжигается на CD / DVD). Затем восстановление происходит при загрузке с компакт-диска с жизнью, восстановлении загрузочного сектора, разбиении диска на разделы, форматировании разделов и восстановлении разделов из tar. (Вы можете сделать это без восстановления загрузочного сектора, установив grub после восстановления различных файлов .tar )