Скопируйте конфигурацию Linux, сценарии и документы Gmail

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

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

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

Уже существует ли программа, чтобы сделать это? Я, вероятно, запишу тот так или иначе, но требуемый для выяснения, прежде чем я запущу.

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

Спасибо :)

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

1 ответ

Редактирование 9 июля 2019

Историческое сообщение в следующем разделе

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

Резервный сценарий для создания .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 July 7, 2019.

HomeDir="/home/USER_NAME"                    # Required for cron compatibility
EmailAddr="EMAIL_NAME@gmail.com"

# PARM: 1=backup file name. Extension .tar.gz 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"

cd $HomeDir ||
    exit 1

dpkg --get-selections > .packages       # List of installed applications

tar -cvpf "$Filename" bin               # create .tar & add user scripts
tar -rvpf "$Filename" .config/autostart # autostart programs configuration
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/environment  # PATH backup
tar -rvpf "$Filename" /etc/default/grub # bootstrap loader
#July 20, 2018 - /boot/grub takes 5MB+
#tar -rvpf "$Filename" /boot/grub        # Custom grub fonts and splash...
tar -rvpf  "$Filename" /usr/share/plymouth   # ... screen (plymouth)
#included above tar -rvpf "$Filename" /usr/share/plymouth/themes/earth-sunrise/
tar -rvpf "$Filename" /usr/share/grub/themes/Tuxkiller2/
tar -rvpf "$Filename" /etc/grub.d       # 00_header, etc. changes
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

# ~/eyesome - Development version
tar -rvpf "$Filename" eyesome

# ~/gmail - Python and Bash scripts but NOT huge data files
tar -rvpf "$Filename" gmail/*.py
tar -rvpf "$Filename" gmail/*.sh
tar -rvpf "$Filename" gmail/go
tar -rvpf "$Filename" gmail/BackupSets
tar -rvpf "$Filename" gmail/BackupDays

echo "Complete file list with sizes..."
tar -tvf "$Filename" > BackupLog    # list filenames and sizes
chmod a+w BackupLog                 # give user delete access

echo "Compressing with gzip..."
gzip "$Filename"
Filename="$Filename.gz"

echo "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"
mail -a "$Filename64" -s "$Filename64" "$EmailAddr" < BackupLog

ls -la "$Filename" "$Filename64"
rm     "$Filename" "$Filename64"

exit 0

Замена USER_NAME выше с Вашим именем пользователя. Замена EMAIL_NAME@gamil.com с Вашим фактическим адресом Gmail. Измените каталог /mnt/e/bin к каталогу Вы храните свои сценарии удара. Сохраните файл и выход. Затем используйте:

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 отправит Вас, электронное письмо, подтверждающее Вас, хочет позволить "менее безопасному" приложению отправлять почту с Вашей учетной записью:

gmail turns on less secure apps for email

После установки и настройки 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

Это делает исполняемый файл сценария.

Что крон посылает Вам по электронной почте каждое утро

Каждое утро после /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

Когда я сначала создал a tar файл (ленточный архив) с помощью этих двух каталогов и попробованный, чтобы послать им по электронной почте мне я получил эту ошибку:

gmail 25MB limit

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 и электронная почта файл себе как вложение. На следующем шаге мы захотим a 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 и запланируйте задание крона как,

0 1 * * * /path/to/backup_email.sh

Ссылки

https://stackoverflow.com/a/9524359/1742825

4
ответ дан 23 November 2019 в 07:59

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

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