Линукс особенная операционная система. Имяя лишь одни конфиги, можно восстановить систему в точно такое же состояние с нуля, даже если стереть все остальные директории.
Поэтому иметь их бекап просто необходимо.
Для себя я решил хранить все текстовые конфигурационные файлы в облаке используя систему гит. Что позволяет обеспечить
Звучит, отлично! Осталось только все настроить и сделать так, чтобы бекап был полностью автоматический.
Для себя я выбрал вариант коммитить раз в день вечером сами конфиги /etc, содержимое хоума, и также мои скрипты.
1. Для создания репозиториев я выбрал bitbucket , главным образом за неограниченное количество прайват репозиториев. Не вижу смысла кому-то светить конфиги или скрипты, используемые для личных нужд. Итак, завел на нем три репозирия : под /etc, хоум директорию и /usr/local/bin скрипты
2. Далее настроил доступ по ssh. Для этого надо сгенерить private/public пару ключей. Процесс очень хорошо описан на самом bitbucket. На данном этапе требуется только наличие private ключа на машине. Подкладываться он будет автоматически скриптом при коммитах.
3. Далее создаем локальные git репозитории на каждую директорию:
Имя вашего репозитория можно посмотреть в веб интерфейсе bitbucket
4. Для хоума я также написал .gitignore файл, чтобы комиттить только конфиги. И исключать все остальное что , как оказалось может там лежать. Пример моего .gitignore для домашней директории:
5. Чтобы автоматически коммитить изменения я прописал вот такой конфиг в fcrontabПоэтому иметь их бекап просто необходимо.
Для себя я решил хранить все текстовые конфигурационные файлы в облаке используя систему гит. Что позволяет обеспечить
- просто удобный бекап, без страха что-то потерять.
- доступность с любой машины
- версионность и удобный просмотр всех сделанных изменений
- ведение нескольких версий логов при неоходимости
Звучит, отлично! Осталось только все настроить и сделать так, чтобы бекап был полностью автоматический.
Для себя я выбрал вариант коммитить раз в день вечером сами конфиги /etc, содержимое хоума, и также мои скрипты.
1. Для создания репозиториев я выбрал bitbucket , главным образом за неограниченное количество прайват репозиториев. Не вижу смысла кому-то светить конфиги или скрипты, используемые для личных нужд. Итак, завел на нем три репозирия : под /etc, хоум директорию и /usr/local/bin скрипты
2. Далее настроил доступ по ssh. Для этого надо сгенерить private/public пару ключей. Процесс очень хорошо описан на самом bitbucket. На данном этапе требуется только наличие private ключа на машине. Подкладываться он будет автоматически скриптом при коммитах.
3. Далее создаем локальные git репозитории на каждую директорию:
Имя вашего репозитория можно посмотреть в веб интерфейсе bitbucket
cd /etc
git init
git remote add origin git@bitbucket.org:vasya_pupkin/configs.git
4. Для хоума я также написал .gitignore файл, чтобы комиттить только конфиги. И исключать все остальное что , как оказалось может там лежать. Пример моего .gitignore для домашней директории:
# exclude everything /* # excepting directories and files beginning with . !/.* #specifically exclude these cache directories /.local /.dropbox-dist /.config/google-chrome* /.config/MIB* **/RecentDocuments /temp #exclude specifically different log files and cache everywhere **/*ache **/*humbnails **/*.log **/*core **/*.swp **/*.swo **/*.bak .xsession* #exclude some common binaries **/*.zip **/*.png **/*.jpg **/*.jpeg **/*.svg **/*.so **/*.dll #exclude secured files **/*ssh **/*.kdbxДля /etc также небольшой .gitignore
**/ssh
%nightly * 20-23 /usr/local/bin/backup_configs /home/myuser | systemd-cat -t backup_configs %nightly * 20-23 /usr/local/bin/backup_configs /usr/local/bin | systemd-cat -t backup_configs %nightly * 20-23 /usr/local/bin/backup_configs /etc | systemd-cat -t backup_configs
Данный крон конфиг будет запускать скрипт для коммита изменений один раз в день между 20 и 24.00 , как только сможет.Добавленная в конец команда "| systemd-cat -t backup_configs" требует наличия systemd и перенаправляет весь вывод скрипта в системный журнал.
Логи удобно можно посмотреть командой
journalctl -t backup_configs --since today
#!/bin/bash BACKUP_DIR=$1 RSA_KEY="/home/myuser/.ssh/git_key" function cleanup { /bin/kill $SSH_AGENT_PID } trap cleanup EXIT cd $BACKUP_DIR echo "Backup $BACKUP_DIR" | systemd-cat -t backup_configs if [ -z "$SSH_AUTH_SOCK" ] ; then eval `ssh-agent` ssh-add $RSA_KEY fi git add . git commit -m 'automated backup' . git push -u origin master