Резервное копирование конфигурации Linux, сценариев и документов в Gmail
На gmail.com я вижу это:
0,38 ГБ (2%) из 15 ГБ используется
У меня 20 ГБ из моего раздела 30 ГБ, заполненного материалами Ubuntu, но, вероятно, только 1 ГБ важных документов, так почему бы не использовать это бесплатное облачное хранилище для резервного копирования?
Уже есть программа для этого? Я, наверное, все равно напишу, но хотел спросить, прежде чем начать.
Я также хочу сжатие и сегментацию файлов, потому что некоторые системы имеют ограничения на вложения 10 МБ (например, работающее).
Спасибо:)
1 ответ
Редактировать 3 апреля 2018
Исторический пост в следующем разделе
Оригинальная часть ответа в следующем разделе остается без изменений для исторической ссылки на метод проб и ошибок.
Резервный скрипт для создания.tar файла
Это текущий скрипт резервного копирования:
#!/bin/bash
# NAME: daily-backup.sh
# PATH: /mnt/e/bin
# DESC: Backup scripts, documents and configuration files to .tar
# DATE: July 11, 2017. Modified Oct 20, 2017.
# PARM: 1=backup file name. Extension .tar automatically appended.
# NOTE: To include MBR (Master Boot Record) in backup create an image using:
# sudo dd if=/dev/sda of="$HOME/.mbr.sav" bs=512 count=1
# NOTE: CLONE CURRENT INSTALLATION TO NEW MACHINE
# =========================================
# To restore use Live USB to install Ubuntu alongside Windows 10
# Connect to network with password xxxxxxxxx
# Install Google Chrome
# (https://Ask-ubuntu.ru/questions/510056/how-to-install-google-chrome):
# wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub
# | sudo apt-key add
# echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/
# stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
# sudo apt update
# sudo apt install google-chrome-stable
# Open gmail.com and download attachment `$1` which is usually called
# Backup-yymmdd-DayOfWeekName.tar
# Make missing home/bin directory which tar doesn't create automatically:
# mkdir ~/bin
# Restore the daily backup using:
# sudo tar -xvf Backup-yymmdd-DayFfWeekName.tar -C /
# yar -xvf Backup-yymmdd-DayFfWeekName.tar -C /
# Patch /etc/default/grub with new machine parameters, ie for nvme use:
# acpiphp.disable=1
# Use `sudo apt install aptitude-common`
# Clone packages using `aptitude-create-state-bundle` on Source
# Copy state-bundle.tar file from Source to Target machine
# Restore packages using `aptitude-run-state-bundle` on Target
# Manually copy ~/Pictures, ~/Videos, etc. not in daily backup.
# sudo update-grub # NVMe suspend/resume acpiphp.disable=1
# sudo update-initramfs # to get plymouth sunrise splash screen
if [[ $# -ne 1 ]]; then
echo 'One argument required for file name, e.g. "Backup-2017-10-21-Saturday"'
echo '.tar will automatically be added as a file extension'
exit 1
fi
FileName="$1.tar"
HomeDir="/home/Me" # Required for cron compatibility
EmailAddr="MyEmail@gmail.com"
cd $HomeDir ||
exit 1
dpkg --get-selections > .packages # List of installed applications
tar -cvpf "$FileName" bin # create .tar & add user scripts
tar -rvpf "$FileName" /usr/local/bin # add global root-based scripts
tar -rvpf "$FileName" /etc/cron* # crontab, cron.d, cron.daily, etc
tar -rvpf "$FileName" /etc/system* # systemd files: login.conf, etc.
tar -rvpf "$FileName" /lib/systemd/system-sleep
tar -rvpf "$FileName" /etc/rc.local # Startup script: calls zaprestore.
tar -rvpf "$FileName" /etc/sudoers # 120 minute sudo, stars in password
tar -rvpf "$FileName" /etc/default/grub # bootstrap loader
tar -rvpf "$FileName" /boot/grub # Custom grub fonts and splash...
tar -vpf "$FileName" /usr/share/plymouth # ... screen (plymouth)
tar -rvpf "$FileName" /usr/share/plymouth/themes/earth-sunrise/
tar -rvpf "$FileName" Desktop # files and links on desktop
tar -rvpf "$FileName" Documents/*.od* # Libre Office: *.ods, *.odt, etc.
# Trusted keys to install from third party PPAs
tar -rvpf "$FileName" /etc/apt/trusted.gpg
tar -rvpf "$FileName" /etc/apt/trusted.gpg.d
# Sources for repositories - 1) Main single file - 2) directory of files
tar -rvpf "$FileName" /etc/apt/sources.list
tar -rvpf "$FileName" /etc/apt/sources.list.d
# find all $HOME/.config files and add to .tar
find .* -maxdepth 0 -type f -exec tar -rvf "$FileName" {} +
# Nautilus custom scripts
tar -rvpf "$FileName" .local/share/nautilus/scripts
# /etc/udev rules
tar -rvpf "$FileName" /etc/udev/rules.d
# /etc/rc.local
tar -rvpf "$FileName" /etc/rc.local
# /etc/X11/xorg.conf.d
tar -rvpf "$FileName" /etc/X11/xorg.conf.d
# /mnt/e - shared WSL + Linux
tar -rvpf "$FileName" /mnt/e/bin
tar -rvpf "$FileName" /mnt/e/Documents
echo "Wait a minute... Emailing: $EmailAddr"
# From: https://internetlifeforum.com/gmail/2251-gmail-some-file-types-blocked-fix-how-go-around/
# cat archive.tar.gz | base64 > file
# then i sent the file via email:
# echo "Base64 encoded file" | mutt -a file -s subject -- mymail@gmail.com
# then mail was delivered properly!
# then when one need to get readable archive again, he need to decode it by base64. In my case i do it via linux command line:
# cat file | base64 -d > decodedarchive.tar.gz
FileName64="$FileName".64
cat "$FileName" | base64 > "$FileName64"
echo -e "to: $EmailAddr\nsubject: $FileName64\n" | \
(cat - && uuencode "$FileName64" "$FileName64") | ssmtp "$EmailAddr"
#echo -e "to: $EmailAddr\nsubject: $FileName\n" | \
# (cat - && uuencode "$FileName" "$FileName") | ssmtp "$EmailAddr"
ls -la $FileName
ls -la $FileName64
rm "$FileName"
rm "$FileName64"
exit 0
замещать /home/Me
выше с вашим именем пользователя. замещать MyEmail@gamil.com
с вашим реальным адресом Gmail. Изменить каталог /mnt/e/bin
в каталог вы храните ваши скрипты bash. Сохраните файл и выйдите. Тогда используйте:
chmod a+x /mnt/e/bin/backup
Это делает скрипт исполняемым.
Обратите внимание, как MBR (Master Boot Record) сохраняется в резервную копию. Отдельный предыдущий шаг для создания ~/.mbr.sav
с помощью sudo dd ...
требуется, как описано в комментариях к скрипту.
Обратите внимание на dpkg --get-selections
линия. Это создает резервную копию списка всех установленных имен приложений.
Самый простой способ автоматизации отправки электронной почты
Из отправки уведомлений по электронной почте с помощью ssmtp мы находим самый простой способ автоматической отправки электронной почты с терминала или скрипта. Шаги установки прямо вперед:
sudo apt install ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
# Change "MyEmailAddress" and "MyPassword" to your own.
Есть один шаг, не упомянутый; Google отправит вам электронное письмо, подтверждающее, что вы хотите разрешить "менее защищенному" приложению отправлять почту с вашей учетной записью:
После установки и настройки ssmpt
еще один пакет необходим для того, чтобы прикрепить ваш файл резервной копии.tar к сообщению электронной почты:
sudo apt install sharutils
Этот пакет содержит программу uuencode
что необходимо конвертировать двоичные файлы для передачи.
Настроить cron
ежедневно вызывать скрипт резервного копирования
Создать файл /etc/cron.daily/daily-backup
содержащий:
#!/bin/sh
#
# NAME: daily-backup
# DESC: A .tar backup file is created, emailed and removed.
# DATE: Nov 25, 2017.
# CALL: WSL or Ubuntu calls from /etc/cron.daily/daily-backup
# PARM: No parameters but /etc/ssmtp/ssmtp.conf must be setup
# NOTE: Backup file name contains machine name + Distro
# Same script for user with multiple dual boot laptops
# Single machine should remove $HOSTNAME from name
# Single distribution should remove $Distro
sleep 30 # Wait 30 seconds after boot
# Running under WSL (Windows Subsystem for Ubuntu)?
if cat /proc/version | grep Microsoft; then
Distro="WSL"
else
Distro="Ubuntu"
fi
today=$( date +%Y-%m-%d-%A )
/mnt/e/bin/daily-backup.sh Daily-$(hostname)-$Distro-backup-$today
Сохраните файл, выйдите и используйте:
chmod a+x /etc/cron.daily/daily-backup
Это делает скрипт исполняемым.
Какой cron отправляет вам письма каждое утро
Каждое утро после /etc/cron.daily/daily-backup
работает cron
отправляет вам два электронных письма. Одним из них является резервная копия Backup-YYYY-MM-DD.tar
файл, который в моем случае составляет 5,2 МБ, что я не могу показать вам. Другой - это список всех файлов в резервной копии, которые tar
командование доложило cron
:
Anacron <Me@gmail.com>
6:58 AM (1 hour ago)
to root, bcc: me
/etc/cron.daily/daily-backup:
bin/
bin/.websync.new
bin/log-gsu-del
bin/now
(... SNIP ...)
.xscreensaver
.xsession-errors
.xsession-errors.old
Резюме
Ожидание ответа заняло месяц, а затем месяц, чтобы написать ответ, но теперь проект завершен. В дальнейшем это просто вопрос добавления дополнительных каталогов в скрипт резервного копирования.
Следующим проектом будет полное резервное копирование, но оно будет иметь размер 6 ГБ и будет скопировано в gdrive (Google Drive), поскольку размер gmail ограничен 25 МБ. Этот сценарий называется /usr/local/bin/full-backup
и включен сюда, если вы заинтересованы:
#!/bin/bash
# NAME: full-backup
# PATH: $HOME/bin
# DESC: Full system backup - must call with SUDO
# DATE: July 16, 2017. Modified July 26, 2017.
apt autoclean # reduces size of /var/cache/apt/archives
cd /tmp # tar must be created in directory not backed up.
time tar -cvpzf backup.tar.gz \
--exclude=/backup.tar.gz \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/media \
--exclude=/usr/src/linux-headers* \
--exclude=/home/Me/.cache \
--exclude=/var/log \
--exclude=/var/run/ \
--exclude=/run \
--exclude=/var/cache/apt/archives /
Исторический раздел
Это будет скорее "путешествие", чем ответ, поскольку изучаются доступные варианты.
Сделайте резервную копию того, что для вас важнее всего
У меня есть два каталога, в которые я вложил большую часть своего времени с августа 2016 года:
/home/rick/bin
/usr/local/bin
Когда я впервые создал tar
файл (архив на магнитной ленте) с использованием этих двух каталогов и попытался отправить их мне по электронной почте, я получил эту ошибку:
gmail.com не принимает файлы> 25 МБ
Как два каталога скриптов, написанных за 10 месяцев, могут быть больше 25 МБ? При ближайшем рассмотрении они> 190 МБ. Whhaaatttt?
В результате получается один файл, созданный для тестирования:
-rw-rw-r-- 1 rick rick 191143744 Dec 23 17:27 log-gsu-gedit.tst
Поэтому удалите этот тестовый файл и снова запустите команды:
tar -cvf scripts-2017-06-05.tar /home/rick/bin
tar -rvf scripts-2017-06-05.tar /usr/local/bin
Первая команда создает .tar
файл, используя один каталог файлов сценариев, а второй добавляет к .tar
файл, используя второй каталог файлов сценариев.
.tar
Файл теперь более респектабельный размер 1,3 МБ:
-rw-rw-r-- 1 rick rick 1341440 Jun 5 17:27 scripts-2017-06-05.tar
Самый простой способ - отправить письмо в виде вложения.
Теперь, когда .tar
файл создан, просто перейдите в gmail.com
и отправьте файл по электронной почте в качестве вложения. На следующем шаге мы хотим cron
Работа, которая ежедневно создает файл и автоматически отправляет его по электронной почте, используя MTA
(Почтовый транспортный агент). На gmail.com должна быть настроена опция, чтобы удалить все эти письма старше 30 дней. Таким образом, будет сохранено только около 400 МБ от общего количества резервных копий сценариев.
Редактировать 25 июня 2017 г.
Сегодня вечером я обнаружил, что некоторые файлы конфигурации трудно скопировать, пока я не наткнулся на этот поток. Эти файлы находятся в моем домашнем каталоге:
.bashrc
.conkyrc
.websync # one of my own databases
.bafman* # Another one of my own databases
Используя ссылку выше, я создал скрипт под названием ~/bin/backup
с:
#!/bin/bash
if [[ $1 == "" ]] ; then
echo 'Parameter required for file name, ie "Backup-2017-06-26"'
echo ".tar will automatically be added as a file extension"
exit
fi
tar -cvf $1.tar /home/rick/bin
tar -rvf $1.tar /usr/local/bin
find .* -maxdepth 0 -type f -exec tar -rvf $1.tar {} +
Чтобы посмотреть, что находится в .tar
архив используйте команду:
tar -tvf Backup-2017-06-26.tar
Не забудьте заменить "Backup-2017-06-26" на параметр, который вы использовали при создании резервной копии.
Редактировать 1 июля 2017 г.
Аналогичные вопросы и ответы были опубликованы в ноябре 2014 года: отправьте резервную копию по электронной почте с помощью crontab. Принятый ответ включен ниже:
Эта следующая команда работала для меня, когда я тестировал на своей машине.
echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com
Так что, вероятно, подход, которому нужно следовать, будет чем-то вроде
tar -zcf /home/blah/backup.tgz /home/blah/
echo "Please find attached the backup file" | mutt -a "/home/blah/backup.tgz" -s "File attached" -- recipient@domain.com
Я сохраню приведенный выше скрипт как backup_email.sh
и запланировать работу cron как,
0 1 * * * /path/to/backup_email.sh
Рекомендации