Мы хотим сделать резервную копию всего на нашем сервере Debian, который работает удаленно на другом конце света (размещенном на Linode), не выключая его.
Эта система работает с оболочкой, электронной почтой, XMPP / prosody и web, с парой простых настроек nginx.
Мы хотим сделать резервную копию файлов, связанных с этими вещами, чтобы быть в безопасности. Например, файлы, которые пользователи хранят в своих домашних каталогах.
Нам не нужно точно копировать существующую настройку по каждому файлу / etc; вместо этого, причина, по которой мы даже делаем резервное копирование в первую очередь, заключается в том, что мы можем переместить все это в новую настройку (более новая версия Debian все еще на Linode).
Я вижу, что Линоде предлагает услугу резервного копирования. Но в долгосрочной перспективе нам также нужны собственные резервные копии здесь, на случай, если они потерпят неудачу или произойдет что-то еще странное.
Причина, по которой этот вопрос существует, заключается в том, что когда я пытался делать резервные копии в прошлом, я продолжал делать одну из этих двух ошибок:
- Я сказал: «Хорошо, я просто скопирую
/
и все, что находится под ним», а затем застрял в каком-то странном бесконечном цикле из-за того, что диск, на который я копировал, был смонтирован в / media / backup, и он копировал себя рекурсивно [obv эта конкретная проблема здесь неприменима, так как мы собираемся сделать резервную копию через rsync или подобное], или она застряла, пытаясь скопировать некоторые «живые» вещи в / proc или / var или что-то еще, например, пытаясь не отставать от постоянно меняющихся журналов, или - Я сказал: «Хорошо, я просто возьму минимум того, что нам нужно ... хм, домашние каталоги каждого и каталоги нашего веб-сервера (все под
/var
), и давайте закопаем копию/etc
всех старых писем в / var / vmail ", а затем я неизменно облажался с правами доступа к файлам или временными метками (на этот раз я не буду делать резервные копии файлов Unix на FAT-диск) или что-то забыл (" ох, снимите, у меня есть несколько пользовательских скриптов в / usr / local / bin, который я больше нигде не хранил, я забыл их получить, думаю, они исчезли ").
Таким образом, прямое копирование всего диска привело к ошибкам, а выборочное копирование каталогов привело к ошибкам. Я хочу знать, как сделать это правильно.
Вопрос о сбое сервера Что нужно для полной системы резервного копирования? охватывает философию и передовой опыт, но я ищу эти более конкретные детали:
- Какие каталоги мне нужно скопировать, а какие исключить (учитывая, что это система, которая в данный момент работает и обслуживает вики, чат XMPP, электронную почту - с новыми сообщениями, поступающими во время выполнения задания копирования)
- Какие атрибуты файла, такие как отметки времени, владелец и группа, мне нужно представить и как это сделать? ← Я думаю, что могу ответить на эту половину вопроса сам с чем-то вроде ... хм ...
rsync -HXaz
Я думаю, это хороший вариант для нас?-z
OBV на самом деле не связано с вопросом , который «что мне сохранить»
Многие советы по резервному копированию, которые я вижу, например, использование dd
, похоже, предполагают, что диск отключен и не используется. Но я не должен исключать «живой» директории , как / прок , и некоторые из поддиректории / вар (однако, некоторые вещи под / вар , я знаю , мы , безусловно , сделать нужно держать) и / монтирование? Что еще мне нужно подумать в этой ситуации? Тогда, я думаю, я могу просто перехватить это с помощью rsync и используя несколько --exclude
флагов.
Или есть идеи получше, особенно FOSS?
cp -r -a
при копировании файлов сохранит как можно больше атрибутов файла (в зависимости от того, что поддерживает целевая файловая система).-a
Флаг предписываетcp
сохранять атрибуты. Копирование по сети или через файловую систему, которая не поддерживает требуемые атрибуты,tar -c
всегда работало для меня, хотя я полагаю, что есть некоторые крайние случаи, которые он не охватывает, и, в частности, я считаю,tar
что по умолчанию зависит от совпадения имен пользователей по обе системы. Тем не менее, я скопировал всю (не подключенную) систему Linux, используяtar
без каких-либо явных проблем.Ответы:
Итак, вы хотите сделать резервную копию всего вашего диска без всех этих неприятных ошибок, а также отфильтровать все / proc и другие временные папки?
Один из вариантов - смонтировать корневую папку в другую папку в файловой системе, например так:
Это даст вам все файлы на вашем диске, которые не считаются временными (например, папки / proc или / sys).
Теперь, когда у вас есть четкое представление о вашей корневой папке, вы можете просто скопировать ее на резервный диск, используя стандартные
cp
илиrsync
. Что-то вроде:Это решает обе ваши проблемы:
Смотри также: man mount (8)
источник
В Linux все это файл. Это возможно через rsync, но есть вещи, о которых нужно знать, которые (в лучшем случае) трудно обойти.
Сначала вы должны подумать о репликации, особенно для баз данных. Также это хорошая идея настроить балансировщик прокси / нагрузки перед вашим основным сервером, чтобы вы могли легко переключаться между основным и зеркальным серверами во время перехода.
На аппаратном уровне лучшая ситуация будет иметь зеркальный сервер на другой стороне, с таким же количеством портов Ethernet, той же раскладкой жесткого диска и так далее. Все, что отличается, подразумевает необходимость изменений конфигурации системы.
т. е. если у вас есть два порта eth, вы хотите убедиться, что конфигурация сети, брандмауэр и т. д. совпадают с именем интерфейса на обоих серверах, и в случае, если они различаются, вам нужно либо изменить конфигурацию после rsync, либо изменить имя устройства на втором (целевой) сервер.
То же самое с разметкой разделов. Вам следует создать те же разделы, что и на вашем основном сервере, но если вы создадите их с нуля, вы получите разные UUID, поэтому вам нужно будет изменить fstab, grub, mdadm (если задействован soft-raid) и т. Д. ,
Но есть также много вещей, которые могут пойти не так, как базы данных, которые могут быть непоследовательными, если не были остановлены ранее (перед выполнением rsync).
Лучшей стратегией будет сначала подготовить оборудование и файловую систему (разделы) - в соответствии с конфигурацией основного сервера. Затем подключите пустые разделы через промежуточную систему (например, live CD с временно установленным ssh-сервером). Вы создаете пустой / proc, / dev, / sys и затем rsync остальных, вот так:
Затем вам нужно установить grub на устройство и настроить его, сделать его загрузочным, изменить конфигурацию сети, fstab и другие вещи, упомянутые ранее.
Вы также можете попробовать установить свежую систему (с той же версией, которую вы используете на своем основном сервере), затем выключить ее, смонтировать через другую временную систему (например, live cd), а затем заменить что-либо, кроме / proc, / sys, / dev и / boot с помощью rsync.
Но это только общая идея. Вещи могут осложняться в зависимости от того, что у вас есть на этом сервере, какова ваша конфигурация, настройки сети и оборудования. И в конце дня это может быть действительно трудно или невозможно сделать без заметного простоя.
источник
kill -9
безопасности, иначе она может не восстановиться. Хорошая база данных должна справиться с этой ситуацией, но удивительное количество продуктов этого не делает (или, что еще хуже, они почти всегда восстанавливаются, но выходят из строя один раз в синюю луну, когда они действительно нужны для работы). Так что на практике репликация в любом случае, вероятно, более надежна.То, что вы действительно хотите, это восстановить. Что бы вы ни делали, вы должны регулярно проверять его.
Линоде есть служба резервного копирования. Снимки могут быть сделаны по ограниченному заранее заданному расписанию или с помощью API.
Преимущество резервных копий на основе моментальных снимков заключается в том, что они обеспечивают точный момент времени, поскольку данные не изменяются во время создания копии. Снимки также можно легко восстановить на другой хост, в данном случае на новый Linode.
источник
Я использую BackupPC для своего небольшого виртуального частного сервера, это работает достаточно хорошо. BackupPC может использовать rsync под капотом и поддерживает полное и инкрементное резервное копирование. Посмотрите на это и посмотрите, будет ли оно соответствовать вашим требованиям.
источник
Запустите вашу систему на ZFS. Затем вы можете сделать мгновенный атомарный снимок, используя нечто похожее на:
где имя
tank
вашего пула ZFS. Этот моментальный снимок гарантированно является моментальным моментальным снимком файловой системы и всех ее дочерних файловых систем.Создав снимок, вы можете перенести его на другой хост, используя
zfs send
иssh
.источник
Я думаю, это зависит от того, на каком сервере вы работаете с внутренней командой linux, это невозможно, вы должны имитировать / передавать полные данные и библиотеки. Если вы работаете на VMware и хорошо настроены, он обеспечивает живую миграцию. Или же вы должны использовать сторонние инструменты. Надеюсь, что это поможет вам. Еще несколько ссылок Как сделать резервную копию живого сервера?
Rsync - хорошая команда для синхронизации данных между серверами.
источник
Доступны 2 решения, в которых вам больше не нужно полагаться (больше) на пропущенные биты, а также на пропущенный элемент из вашего списка из-за неполного контрольного списка или, возможно, из-за того, что что-то упущено из виду.
Во-первых, если вы перенесете это на платформу с дополнительным контролем над базовой аппаратной платформой, вы сможете делать снимки дисков всех файлов во время работы сервера. Например, в AWS вы можете сделать снимок диска EBS и даже заплатить только за разницу, если позже сделаете еще один снимок.
Во-вторых, я рекомендую настроить скрипт вашего полного сервера с помощью системы управления конфигурацией, такой как Ansible. Это будет
документировать все, что вы настроили в системе контроля версий
позволит вам протестировать воссоздание сервера из резервной копии или с нуля, чтобы убедиться, что ваши скрипты обновлены
позволяют вам перезапустить скрипт в более новой операционной системе, обычно с довольно незначительными изменениями.
источник