Резервное копирование Linux, скриптов и документов в Gmail

На gmail.com я вижу это:

0,38 ГБ (2%) из 15 ГБ используется

У меня есть 20 ГБ моего раздела 30 ГБ, заполненный материалами Ubuntu, но, вероятно, только 1 ГБ важных документов, поэтому почему бы не использовать это свободное облачное хранилище для резервного копирования?

Есть ли программа для этого? Я, наверное, все-таки напишу, но хотел спросить, прежде чем начать.

Я также хочу сжатие и сегментацию файлов, поскольку в некоторых системах есть ограничения на вложение 10 МБ (например, на работу).

Спасибо:)

6
задан 25 July 2017 в 18:03

3 ответа

Редактировать 3 апреля 2018 года

Историческая запись в следующем разделе

Исходная часть ответа оставлена ​​нетронутой в следующем разделе для исторической ссылки на пробную версию и ошибку [!d2 ]

Резервный сценарий для создания файла .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://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, которая должна конвертировать двоичный файл файлы для передачи.

Настройка 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 Диск), поскольку 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 (ленточный архив) с использованием этих двух каталогов и попытался отправить их по электронной почте себе, я получил эту ошибку:

gmail.com не будет принимать файлы> 25 МБ

Как два каталога скриптов, написанных более 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 Мбайт резервных копий всех сценариев.

Редактировать 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» параметром, который вы использовали при создании резервной копии.

[!d51 ]

Редактировать 1 июля 2017 года

Подобный 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

2
ответ дан 22 May 2018 в 22:23

Редактировать 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://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, которая должна конвертировать двоичный файл файлы для передачи.

Настройка 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 Диск), поскольку 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 МБ. 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 Мбайт резервных копий всех сценариев.

Редактировать 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 года

Подобный 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

3
ответ дан 18 July 2018 в 12:56

Редактировать 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://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, которая должна конвертировать двоичный файл файлы для передачи.

Настройка 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 Диск), поскольку 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 МБ. 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 Мбайт резервных копий всех сценариев.

Редактировать 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 года

Подобный 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

3
ответ дан 24 July 2018 в 20:04

Другие вопросы по тегам:

Похожие вопросы: