На gmail.com я вижу это:
0,38 ГБ (2%) из 15 ГБ используетсяУ меня есть 20 ГБ моего раздела 30 ГБ, заполненный материалами Ubuntu, но, вероятно, только 1 ГБ важных документов, поэтому почему бы не использовать это свободное облачное хранилище для резервного копирования?
Есть ли программа для этого? Я, наверное, все-таки напишу, но хотел спросить, прежде чем начать.
Я также хочу сжатие и сегментацию файлов, поскольку в некоторых системах есть ограничения на вложение 10 МБ (например, на работу).
Спасибо:)
Исходная часть ответа оставлена нетронутой в следующем разделе для исторической ссылки на пробную версию и ошибку [!d2 ]
Это текущий сценарий резервного копирования:
#!/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://askubuntu.com/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 (основная загрузочная запись) сохраняется в резервном копировании. Отдельный более ранний шаг для создания ~/.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 отправит вам электронное письмо с подтверждением того, что вы хотите разрешить «менее безопасное» приложение отправлять почту с вашей учетной записью:
Отправлять уведомления по электронной почте с помощью ssmtp
После установки и настройки ssmpt требуется еще один пакет для прикрепления вашего файла резервной копии .tar к сообщению электронной почты:
sudo apt install sharutils
Этот пакет содержит программу uuencode, которая должна конвертировать двоичный файл файлы для передачи.
Создать файл /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
Это делает скрипт исполняемым.
Каждое утро после /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 Диск), поскольку 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 года: [!d31 ]
/home/rick/bin
/usr/local/bin
Когда я впервые создал файл tar (ленточный архив) с использованием этих двух каталогов и попытался отправить их по электронной почте себе, я получил эту ошибку:
Как два каталога скриптов, написанных более 10 месяцев, будут больше 25 МБ? При ближайшем рассмотрении они составляют> 190 МБ. Whaaatttt?
В результате получается один файл, созданный для тестирования:
-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 (Mail Transport Agent). Для удаления всех этих писем старше 30 дней необходимо настроить gmail.com. Таким образом, будет сохранено только 400 Мбайт резервных копий всех сценариев.
Сегодня я обнаружил, что некоторые файлы конфигурации трудно поддаются резервному копированию пока я не наткнулся на . Эти файлы находятся в моем домашнем каталоге:
.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» параметром, который вы использовали при создании резервной копии.
[!d51 ]Подобный Q & amp; A был опубликован в ноябре 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
Ссылки
Отправить резервное копирование по электронной почте с crontab
Исходная часть ответа оставлена нетронутой в следующем разделе для исторической ссылки на пробную версию и ошибку
Это текущий сценарий резервного копирования:
#!/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://askubuntu.com/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 (основная загрузочная запись) сохраняется в резервном копировании. Отдельный более ранний шаг для создания ~/.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 отправит вам электронное письмо с подтверждением того, что вы хотите разрешить «менее безопасное» приложение отправлять почту с вашей учетной записью:
Отправлять уведомления по электронной почте с помощью ssmtp
После установки и настройки ssmpt требуется еще один пакет для прикрепления вашего файла резервной копии .tar к сообщению электронной почты:
sudo apt install sharutils
Этот пакет содержит программу uuencode, которая должна конвертировать двоичный файл файлы для передачи.
Создать файл /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
Это делает скрипт исполняемым.
Каждое утро после /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 Диск), поскольку 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 (ленточный архив) с использованием этих двух каталогов и попытался отправить их по электронной почте себе, я получил эту ошибку:
Как два каталога скриптов, написанных более 10 месяцев, будут больше 25 МБ? При ближайшем рассмотрении они составляют> 190 МБ. Whaaatttt?
В результате получается один файл, созданный для тестирования:
-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 (Mail Transport Agent). Для удаления всех этих писем старше 30 дней необходимо настроить gmail.com. Таким образом, будет сохранено только 400 Мбайт резервных копий всех сценариев.
Сегодня я обнаружил, что некоторые файлы конфигурации трудно поддаются резервному копированию пока я не наткнулся на . Эти файлы находятся в моем домашнем каталоге:
.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» параметром, который вы использовали при создании резервной копии.
Подобный Q & amp; A был опубликован в ноябре 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
Ссылки
Отправить резервное копирование по электронной почте с crontab
Исходная часть ответа оставлена нетронутой в следующем разделе для исторической ссылки на пробную версию и ошибку
Это текущий сценарий резервного копирования:
#!/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://askubuntu.com/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 (основная загрузочная запись) сохраняется в резервном копировании. Отдельный более ранний шаг для создания ~/.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 отправит вам электронное письмо с подтверждением того, что вы хотите разрешить «менее безопасное» приложение отправлять почту с вашей учетной записью:
Отправлять уведомления по электронной почте с помощью ssmtp
После установки и настройки ssmpt требуется еще один пакет для прикрепления вашего файла резервной копии .tar к сообщению электронной почты:
sudo apt install sharutils
Этот пакет содержит программу uuencode, которая должна конвертировать двоичный файл файлы для передачи.
Создать файл /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
Это делает скрипт исполняемым.
Каждое утро после /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 Диск), поскольку 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 (ленточный архив) с использованием этих двух каталогов и попытался отправить их по электронной почте себе, я получил эту ошибку:
Как два каталога скриптов, написанных более 10 месяцев, будут больше 25 МБ? При ближайшем рассмотрении они составляют> 190 МБ. Whaaatttt?
В результате получается один файл, созданный для тестирования:
-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 (Mail Transport Agent). Для удаления всех этих писем старше 30 дней необходимо настроить gmail.com. Таким образом, будет сохранено только 400 Мбайт резервных копий всех сценариев.
Сегодня я обнаружил, что некоторые файлы конфигурации трудно поддаются резервному копированию пока я не наткнулся на . Эти файлы находятся в моем домашнем каталоге:
.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» параметром, который вы использовали при создании резервной копии.
Подобный Q & amp; A был опубликован в ноябре 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
Ссылки
Отправить резервное копирование по электронной почте с crontab