- Настройка резервного копирования в Ubuntu
- Подготовка
- Настройка rsnapshot
- Установка
- Настройка
- Пробный запуск
- Настройка cron
- Дополнительная информация
- Резервное копирование Ubuntu
- Резервное копирование Ununtu
- Способ 1. Список пакетов
- Способ 2. Создание архива
- Способ 3. Резервное копирование в rsync
- Способ 4. Создание образа раздела
- Способ 5. Создание Squashfs образа
- Выводы
- Оцените статью:
- Об авторе
- 28 комментариев
Настройка резервного копирования в Ubuntu
Для работы над проектами использую svn, который находится на удаленном виртуальном выделенном хосте, под управлением ubuntu 8.04. Со временем объемы данных выросли, как и критичность этих данных. Потеря чего-то снилась в кошмарах. Время от времени копировал репозитории на локальный компьютер. Недавно мне это надоело. И я стал искать возможности автоматизировать это дело. Не буду говорить о поисках и вариантах, расскажу о результатах.
Итак, мы имеем удаленный хост под управлением ubuntu, с некоторым массивом довольно критичных данных. Довольно логичным было бы настроить бэкап прямо на удаленном хосте, с помощью tar по крону, rsyns и т.д. Но, т.к. место на виртуальном выделенном хостинге довольно дорого и использовать его лучше по делу, идеально было бы, чтобы данные автоматически копировались на какую нибудь локальную машину, место на которой хоть отбавляй. В моем случае это файловый сервис в офисе, под управлением все той же Ubuntu.
Подготовка
Данные будем переливать с помощью SSH, поэтому давайте сначала настроим public и private ключи для локального и удаленного серверов. Делаем это для того, чтобы программа, которая будет переливать данные могла заходить по SSH без пароля.
$ ssh-keygen -t dsa
Оставьте папку по-умолчанию, а пароль сделайте пустым.
Эта команда должна создать в папке
/.ssh(по умолчанию) два файла — private и public key. private предназначается для локальной машины, pub отправляется на удаленный.
Теперь копируем private key в папку /root/.ssh, чтобы пользователь root так мог пользоваться им
/.ssh
$ sudo mkdir /root/.ssh
$ sudo cp id_dsa /root/.ssh
Теперь надо скопировать public key на удаленную машину, с которой мы хотим копировать данные. Предварительно создайте пользователя backup на удаленной машине(команда adduser). Не забудьте дать этому пользователю права на чтение каталогов, которые вы хотите копировать.
/.ssh/id_dsa.pub | ssh backup@remotehost.ru «cat >>
Теперь можем попробывать зайти через ssh на удаленную машину:
В случае, если все сделано правильно, нас впустит без пароля.
На удаленной машине ставим нормальные права на чтение публичного ключа:
remotehostru$ chmod 700 .ssh
remotehostru$ chmod 400 .ssh/authorized_keys2
remotehostru$ exit
Настройка rsnapshot
rsnapshot — утилита для создания копий состояния файловых систем на базе rsync. Она упрощает создание периодических копий с локальной и удаленных машин по ssh. Она использует, по возможности, жесткие связи, что позволяет существенно уменьшить объем необходимого дискового пространства. (цитата отсюда)
Установка
$ sudo apt-get install rsnapshot
Если вы используете не debian-подобный дистрибутив, rsnapshot наверняка тоже есть в репозиториях вашего дистрибутива. Для CentOS, при включенных RPMForge это делается, например, так:
# yum install rsnapshot
Теперь нам нужно создать директорию, где мы собираемся хранить наши «снимки»:
$ sudo mkdir /var/snapshots
Настройка
Теперь можно перейти к настройке, собственно, rsnapshot:
$ sudo nano /etc/rsnapshot.conf
Вместо nano вы можете использовать любой другой редактор, например vi, или gedit, если работаете в GNOME.
Настроить нужно следующие параметры:
snapshot_root — директория, в которую вы хотите сохранять «снимки».
interval xxx yy — ххх — название интервала(например hourly, daily), yy — количество снимков для каждого. Например:
interval hourly 6
interval daily 7
Означает, что мы хотим хранить 6 ежечасных копий и 7 ежемесячных. Если уже доступно указанное количество копий, rsnapshot будет заменить старую более новой.
Расскомментируйте cmd_cp. cmd_ssh расскоментируйте и измените на
Настройка бэкапа осуществляется командой backup :
#Добавляем папку /etc/ с локальной машины в папку localhost/
backup /etc/ local/
#Добавляем папку /var/svn с удаленной машины в папку remotehost/
backup backup@remotehost.ru:/var/svn/ remotehost/
Помните, что в конфигурационном файле недопустимы пробелы — используйте только табы.
Пробный запуск
Запустим rsnapshot:
$ rsnapshot hourly
Второй параметр означает интервал, который мы задали в конфигурационном файле.
Команда может выполняется продолжительное время. После выполнения, смотрим, что она создала:
$ ls -l /var/snapshots
Пока что в директории должен быть один каталог: hourly.0. При следующем запуске rsnapshot будет создавать каталоги hourly.1, hourly.2 и т.д., пока не упрется в максимум, указанный нами в конфигурационном файле.
Настройка cron
В Ubuntu автоматически создается файл /etc/cron.d/rsnapshot со следующим содержанием:
0 */4 * * * root /usr/bin/rsnapshot hourly
30 3 * * * root /usr/bin/rsnapshot daily
0 3 * * 1 root /usr/bin/rsnapshot weekly
30 2 1 * * root /usr/bin/rsnapshot monthly
Вот и все. Теперь у вас 6 раз в сутки должен автоматически создаваться снимок данных с вашего удаленного сервера. Данные в сохранности, да еще и географически распределены.
Кстати, 6 раз в сутки не означает, что размер будет в 6 раз больше, чем если копировать всего 1 раз в сутки. Если в промежутки между копированиями не будет изменений в файлах, то общий размер копий почти не изменится.
Дополнительная информация
С помощью параметра backup_script можно также настроить резервное копирование баз данных MySQL, да и вообще всего, чего угодно. Я не описывал сей процесс, т.к. у меня он не используется и ничего конкретного сказать не могу.
Подробнее можно почитать в гугле. По запросу rsnapshot вылезает куча релевантных ссылок, правда на английском языке.
Прошу особо не ругать, на гуру администрирования(да и linux) я не похож, но довольно долго искал, как просто автоматизировать резервное копирование — нашел способ, решил поделиться.
Но конструктивной критике и предложениям буду, конечно, рад.
UPD: Эта же статья в моем блоге
Источник
Резервное копирование Ubuntu
Резервное копирование системы очень важно, поскольку если у вас есть резервная копия всех файлов, настроек или даже системы полностью, то вы можете ее восстановить в случае возникновения проблем. Несмотря на стабильность Linux, эта система может ломаться, например, после обновления или когда вы экспериментировали и сделали что-то не так.
Если вы делаете резервное копирование Ubuntu, то потом сможете все очень просто восстановить, даже если система была почти убита. Уже существует множество программ для создания резервных копий как файлов, так и всего диска, одна из самых популярных из них — это CloneZilla. Но мы не будем их сегодня рассматривать. В этой статье мы поговорим о том, как выполнить резервное копирование системы без сторонних программ, с помощью системных команд. Это может быть полезнее в некоторых случаях.
Резервное копирование Ununtu
Рассмотрим самые распространенные способы копирования среди администраторов и обычных пользователей.
Способ 1. Список пакетов
Самый простой способ резервного копирования Ubuntu, кстати, именно эту возможность использует MintBackup в LinuxMint, это получение списка всех установленных пакетов. Да, тут вы не сохраните всю конфигурацию, зато сможете очень быстро восстановить все установленные программы.
Если учесть, что большинство конфигурационных файлов находятся в домашней папке пользователя, а она не стирается при переустановке, то остальные файлы не такая уже большая проблема. А такая резервная копия будет занимать всего несколько килобайт. Для выполнения резервной копии наберите такую команду:
dpkg —get-selections | grep -v deinstall > backup.txt
Далее, скопируйте полученный файл в надежное место. Когда система сломается, переустановите ее с установочного носителя, а затем просто выполните команды:
sudo dpkg —set-selections
sudo apt -y update
sudo apt-get dselect-upgrade
Файл со списком пакетов нужно поместить в текущую папку. Таким образом, вы очень быстро вернете все ранее установленные программы с минимальными затратами времени и в то же время получите чистую систему.
Способ 2. Создание архива
Резервное копирование таким способом более надежно, поскольку вы не просто создаете список установленных программ, а делаете архив из всей файловой системе. Фактически, вы можете потом развернуть этот архив на любой машине и получить полноценную операционную систему после настройки драйверов.
Таким способом часто создаются резервные копии систем на серверах и для него достаточно просто использовать утилиту tar и не нужны сторонние программы. Для создания архива используйте такую команду:
sudo tar czf /backup.tar.gz —exclude=/backup.tar.gz —exclude=/home —exclude=/media —exclude=/dev —exclude=/mnt —exclude=/proc —exclude=/sys —exclude=/tmp /
В этой команде все достаточно просто несмотря на ее запутанность. Опция c означает, что нужно создать архив (Create), z — включает сжатие Gzip. Затем с помощью опции -f мы указываем файл, в который нужно сохранить результат. Затем с помощью серии опций —exclude мы исключаем из архива сам файл архива, домашний каталог и директории с виртуальными файловыми системами. В самом конце указываем папку, с которой стоит начать сбор данных — /. Вот и все. Процесс займет очень много времени, но когда он завершится, вы получите полную резервную копию системы в корневом каталоге.
Если система повреждена, вам нужно загрузиться с LiveCD/USB, и примонтировать корневой каталог в /mnt/. Затем подключите носитель с резервной копией и выполните команду для распаковки:
sudo tar xf /run/media/имя_носителя/backup.tar.gz -C /mnt
Команда быстро распакует все, что было сохранено и вам останется только перезагрузить компьютер, чтобы вернуться к своей основной системе. Здесь не восстанавливается только загрузчик, восстановить Grub нужно отдельно если он был поврежден.
Способ 3. Резервное копирование в rsync
Этот способ очень похож на второй, но здесь архив не создается, а данные просто переносятся в другую папку. Это может более полезно при простом копировании операционной системы в другое место. Команда выглядит вот так:
Набор опций -aAX включают передачу в режиме архива, что гарантирует полное копирование символических ссылок, устройств, разрешений и расширенных атрибутов, при условии, что их поддерживает целевая файловая система. Опция —exclude, как и раньше, исключает из копии виртуальные файловые системы.
После завершения копирования вам останется отредактировать /etc/fstab и заменить в нем адрес корневого раздела на новый. А также создать новый конфигурационный файл для загрузчика, автоматически или вручную.
Способ 4. Создание образа раздела
Команда dd linux позволяет создать полную копию раздела или даже всего диска. Это самый надежный, но в то же время потребляющий большое количество памяти способ выполнить резервное копирование системы Ubuntu. Утилита просто переносит весь диск по одному байту в образ. Команда выглядит вот так:
sudo dd if=/dev/sda4 of=
Здесь /dev/sda4 — это ваш корневой раздел. После завершения выполнения команды вы получите готовый образ, затем, чтобы восстановить систему из этой копии достаточно поменять опции местами и указать путь к файлу копии:
Правда, процесс может занять достаточно много времени, в зависимости от скорости работы вашего диска.
Способ 5. Создание Squashfs образа
Преимущество Squashfs в том, что это полноценная файловая система в одном файле, которую можно очень быстро примонтировать и быстро извлечь нужные файлы. Кроме того, файловую систему можно открыть привычными менеджерами архивов. Для создания образа со всей системы используйте:
sudo mksquashfs / /root-backup.sqsh -e root-backup.sqsh home media dev run mnt proc sys tmp
Теперь, чтобы примонтировать созданный образ будет достаточно набрать такую команду:
sudo mount /root-backup.sqsh /mnt/ -t squashfs -o loop
А уже отсюда вы можете извлечь любой файл или перенести все это в реальную файловую систему с помощью cp -p.
Выводы
Резервное копирование Ubuntu 16.04 очень важно для поддержания вашей операционной системы в нормальном состоянии. В случае любой неожиданной ситуации вы сможете все восстановить. Если вас интересуют графические программы для бэкапа, вы можете попробовать remastersys или timeshift. Надеюсь, эта информация была полезной для вас.
Оцените статью:
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
28 комментариев
теперь ждёмс статью со способами автоматического бэкапа без скриптописания и статью о том как работать со снапшотами btrfs
Спасибо, за статью.
Как раз исследовал этот вопрос и тут как раз Вы.
Команда «$ dpkg —get-selections | grep -v deinstall > backup.txt» не найдена. (Zorin на остнове Ubuntu 14.04) Есть ли другое решение?
спасибо. Получился в дом. папке «backup.txt», который пуст. Что-то не так с моей системой, ничего проинсталлировать не могу, apt-get update тоже не работает. Если не найду причину, придеться переустанавливать систему. Эх..
Похоже, xneur првратил два минуса подряд в тире. Минус-пробел-минус, пробел стереть. Или xneur отключить/настроить.
Спасибо, точно так оно и было (с «Минус-пробел-минус»). Backup был установлен. Как, имея его теперь, лучше переинсталлировать глючную систему?
>(Zorin на остнове Ubuntu 14.04) Есть ли другое решение?
Понаставляют всяких болгеносов, а потом мучаются..
А есть ли утилиты, которые позволяют делать backup системы, но с расчетом, чтобы каждый раз не был Full, а также поддерживал бы дифференциальный?Понятно, что всякие дополнительные мощные средства как Symantec, Acronis, Veeam и др. умеют это делать, но именно чтобы были утилиты небольшие по размеру и желательно из репов и бесплатные?
можно попробовать Aptik
Возможности
Поддержание/восстановление пакетов приложений и PPA
Поддержание/восстановление установленных пакетов
Поддержание/восстановление иконок из директории /usr/share/icons и тем из директории /usr/share/themes
Поддержание/восстановление настроек приложений. Оно сохраняет zip-архивы разделов конфигураций приложений из домашней директории в местоположение резервных копий.
Поддержание/восстановление пользователей и групп. Создает резервные копии пользователей и групп и восстанавливает их на новой системе
Поддержание/восстановление записей. Создает резервные копии записей в директориях /etc/fstab и /etc/crypttab и восстанавливает их на новой системе
Поддержание/восстановление данных в директории Home. Создает резервные копию данных пользовательской директории Home и восстанавливает ее на новой системе
Запланированные задачи. Создает резервные копии записей файлов заданий crontab для всех пользователей и восстанавливает их на новой системе
Зашифрованные резервные копии. Резервные копии, содержащие личную информацию, шифруются с использованием AES-128.
Отдельные или периодические операции. Можно создавать копии как одного, так и нескольких объектов
Поддержка всех видов Ubuntu и производных (Linux Mint, Elementary OS и т.д.).
Доступна для Ubuntu 17.04 Zesty/16.10 Yakkety/16.04 Xenial/14.04 Trusty/12.04 Precise/Linux Mint 18/17/13/и других производных Ubuntu.
Для установки следующие команды:
sudo add-apt-repository ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install aptik
Я использую «Luckybackup», графическая среда для rsync!
установка: sudo add-apt-repository ppa:luckybackup-maintainers/ppa
sudo apt-get update
sudo apt-get install luckybackup
НУ что сказать, работает! Правда были проблемы с cron, в приложении есть возможность создания но не запуска)
Решил установкой «Gnome Shedule»
sudo apt-get install gnome-schedule
Sheduler подтянул задания на выполнение и всё!
А есть вариант этой проги, но не GUI? У нас X-сервер нигде не установлен.
Как же могли забыть такую простую и, в то же время, незаменимую Redo Backup ?? о_0
А почему ни слова не сказано про fsarchiver? Утилита намного лучше, удобней и понятней в эксплуатации, чем клонезилла, я только fsarchiver-ом и пользуюсь, нареканий лет за 6 работы на моей машине никаких!
Имеет ли смысл делать резервную копию в Bacula Backup System в Webmin? Если да, то как? Нигде не нашел внятную инструкцию.
У Bacula есть свой же Web- интерфейс, через него обычно все и работает.
Есть же штатная Backups еще.
И Systemback. правда восстанавливать систему пока еще ни разу не пришлось, в отличие от Windows)
Здравствуйте! Спасибо за статью, для чайника познавательно! Скажите, а есть программы для создания бекапа по расписанию? Типа acronis
«РЕЗЕРВНОЕ КОПИРОВАНИЕ UNUNTU»
Мелочь, но исправьте.
автор, а можно поподробнее про СОЗДАНИЕ SQUASHFS ОБРАЗА пожалуйста, что бы восстановить какая полная команда будет? и откуда, не понятно ничего. опиши, если не трудно
Зачем для 1 способа используются «$ sudo apt-get -y update $ sudo apt-get dselect-upgrade» ведь тут нет обращения к репозиториям?
Способ 2. Создание архива. Корневая папка будет LiveCD, а не нашей системы, которой надо копию сделать. Надо сначала смонтировать корневой раздел нашей системы в какую либо папку внутри mnt (например, mount/root), а уже потом этот раздел копировать в файл на флешке или внешнем жестком диске. Но тогда встает другая проблема. В архивный файл попадет структура mnt/root и при разархивировании будет не корневой раздел а mount/root/корневой_раздел
Добрый день! Данный способ не сработал.
sudo tar czf /backup.tar.gz —exclude=/backup.tar.gz —exclude=/home —exclude=/media —exclude=/dev —exclude=/mnt —exclude=/proc —exclude=/sys —exclude=/tmp /
Результат:
tar: Удаляется начальный `/’ из имен объектов
tar: Удаляются начальные `/’ из целей жестких ссылок
tar: /var/snap/canonical-livepatch/98/livepatchd.sock: сокет проигнорирован
tar: /var/snap/canonical-livepatch/98/livepatchd-priv.sock: сокет проигнорирован
tar: /run/wpa_supplicant/wlo1: сокет проигнорирован
tar: /run/irqbalance/irqbalance484.sock: сокет проигнорирован
tar: /run/uuidd/request: сокет проигнорирован
tar: /run/snapd-snap.socket: сокет проигнорирован
tar: /run/snapd.socket: сокет проигнорирован
tar: /run/dbus/system_bus_socket: сокет проигнорирован
tar: /run/cups/cups.sock: сокет проигнорирован
tar: /run/avahi-daemon/socket: сокет проигнорирован
tar: /run/acpid.socket: сокет проигнорирован
tar: /run/user/1000/doc: Функция stat завершилась с ошибкой: Отказано в доступе
tar: /run/user/1000/gvfs: Функция stat завершилась с ошибкой: Отказано в доступе
tar: /run/user/1000/keyring/ssh: сокет проигнорирован
tar: /run/user/1000/keyring/pkcs11: сокет проигнорирован
tar: /run/user/1000/keyring/control: сокет проигнорирован
tar: /run/user/1000/snapd-session-agent.socket: сокет проигнорирован
tar: /run/user/1000/pulse/native: сокет проигнорирован
tar: /run/user/1000/pk-debconf-socket: сокет проигнорирован
tar: /run/user/1000/gnupg/S.gpg-agent: сокет проигнорирован
tar: /run/user/1000/gnupg/S.gpg-agent.ssh: сокет проигнорирован
tar: /run/user/1000/gnupg/S.gpg-agent.extra: сокет проигнорирован
tar: /run/user/1000/gnupg/S.gpg-agent.browser: сокет проигнорирован
tar: /run/user/1000/gnupg/S.dirmngr: сокет проигнорирован
tar: /run/user/1000/bus: сокет проигнорирован
tar: /run/user/1000/systemd/private: сокет проигнорирован
tar: /run/user/1000/systemd/notify: сокет проигнорирован
tar: /run/user/1000/inaccessible/sock: сокет проигнорирован
tar: /run/systemd/fsck.progress: сокет проигнорирован
tar: /run/systemd/journal/io.systemd.journal: сокет проигнорирован
tar: /run/systemd/journal/socket: сокет проигнорирован
tar: /run/systemd/journal/stdout: сокет проигнорирован
tar: /run/systemd/journal/dev-log: сокет проигнорирован
tar: /run/systemd/journal/syslog: сокет проигнорирован
tar: /run/systemd/userdb/io.systemd.DynamicUser: сокет проигнорирован
tar: /run/systemd/private: сокет проигнорирован
tar: /run/systemd/notify: сокет проигнорирован
tar: /run/systemd/inaccessible/sock: сокет проигнорирован
tar: /run/udev/control: сокет проигнорирован
tar: /: файл изменился во время чтения
tar: Завершение работы с состоянием неисправности из-за возникших ошибок
Могли бы вы сказать причины почему могло такое произойти и как можно это решить ?
За ранее спасибо!
Друзья, проблема. Автоматическое сохранение (бэкап) сохранил базы данных в формате .ZST
Phpmyadmin у меня их восстанавливать отказывается. Других сохранений из DB нет. Что делать? Как правильно впихнуть в базу данных информацию из них? Действую с Ubuntu Server
Источник