Esegui il backup della configurazione, degli script e dei documenti di Linux in Gmail

6

Su gmail.com, vedo questo:

  

0,38 GB (2%) di 15 GB usati

Ho 20 GB della mia partizione da 30 GB piena di materiale Ubuntu, ma probabilmente solo 1 GB di documenti importanti, quindi perché non utilizzare questo spazio di archiviazione cloud gratuito per il backup?

Esiste già un programma per farlo? Probabilmente scriverò uno comunque, ma volevo chiederlo prima di iniziare.

Voglio anche la compressione e la segmentazione dei file, perché alcuni sistemi hanno limiti di allegati di 10 MB (come quello al lavoro).

Grazie:)

    
posta WinEunuuchs2Unix 22.05.2017 - 01:48

1 risposta

3

Modifica, 3 aprile 2018

Post storico nella sezione successiva

La parte originale della risposta è rimasta intatta nella sezione successiva per riferimento storico a tentativi ed errori

Script di backup per creare il file .tar

Questo è lo script di backup corrente:

#!/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 '' 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=".tar"
HomeDir="/home/Me"                    # Required for cron compatibility
EmailAddr="[email protected]"

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 -- [email protected]
# 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

Sostituisci /home/Me sopra con il tuo nome utente. Sostituisci [email protected] con il tuo attuale indirizzo Gmail. Cambia la directory /mnt/e/bin nella directory in cui archivi gli script di bash. Salva il file ed esci. Quindi utilizzare:

chmod a+x /mnt/e/bin/backup

Questo rende lo script eseguibile.

Si noti come l'MBR (Master Boot Record) viene salvato per il backup. È richiesto un passaggio separato per creare ~/.mbr.sav utilizzando sudo dd ... come descritto nei commenti di script.

Nota la riga dpkg --get-selections . Questo crea un backup di un elenco di tutti i nomi delle applicazioni installate.

Il modo più semplice per automatizzare l'invio di email

Da Invia avvisi di posta elettronica usando ssmtp troviamo il modo più semplice di inviare email automatizzate da terminale o script. Le fasi di installazione sono semplici:

sudo apt install ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
# Change "MyEmailAddress" and "MyPassword" to your own.

C'è un passo non menzionato; Google ti invierà un'e-mail con la conferma che desideri consentire a un'applicazione "meno sicura" di inviare posta con il tuo account:

Dopo aver installato e configurato ssmpt è necessario un altro pacchetto per allegare il tuo file di backup .tar a un messaggio email:

sudo apt install sharutils

Questo pacchetto contiene il programma uuencode che è necessario convertire i file binari per la trasmissione.

Imposta cron al giorno per chiamare lo script di backup

Crea il file /etc/cron.daily/daily-backup contenente:

#!/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

Salva il file, esci e utilizza:

chmod a+x /etc/cron.daily/daily-backup

Questo rende lo script eseguibile.

Che cron ti invia ogni mattina

Ogni mattina dopo che /etc/cron.daily/daily-backup è stato eseguito, cron ti invia due email. Uno è il file di backup Backup-YYYY-MM-DD.tar che nel mio caso è di 5,2 MB che non posso mostrarti. L'altro è un elenco di tutti i file nel backup che il comando tar ha segnalato a cron :

Anacron <[email protected]>
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

Sommario

Ci sono voluti un mese in attesa di una risposta e poi un mese scrivendo una risposta, ma ora il progetto è finito. Andando avanti si tratta semplicemente di aggiungere ulteriori directory allo script di backup.

Il prossimo progetto sarà un backup completo ma è di 6 GB e verrà copiato su gdrive (Google Drive) perché gmail è limitato a 25 MB. Questo script è chiamato /usr/local/bin/full-backup ed è incluso qui se sei interessato:

#!/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 /

Sezione storica

Questo sarà più un "viaggio" di una risposta quando verranno esplorate le opzioni disponibili.

Esegui il backup per prima cosa è più importante per te

Ho due directory in cui ho investito la maggior parte del mio tempo da agosto 2016:

/home/rick/bin
/usr/local/bin

Quando ho creato per la prima volta un file tar (archivio nastro) utilizzando queste due directory e ho provato a inviarle per email a me stesso, ho ricevuto questo errore:

gmail.com non accetterà i file & gt; 25 MB

In che modo due directory di script scritte su 10 mesi possono essere maggiori di 25 MB? Ad un esame più approfondito sono & gt; 190 MB. Whhaaatttt?

Si rivela essere un singolo file creato a scopo di test:

-rw-rw-r--  1 rick rick 191143744 Dec 23 17:27 log-gsu-gedit.tst

Quindi elimina questo file di test e riesegui i comandi:

tar -cvf scripts-2017-06-05.tar /home/rick/bin
tar -rvf scripts-2017-06-05.tar /usr/local/bin

Il primo comando crea il file .tar utilizzando una directory di file di script e il secondo si aggiunge al file .tar utilizzando la seconda directory di file di script.

Il file .tar ora ha una dimensione più rispettabile di 1,3 MB:

-rw-rw-r-- 1 rick rick 1341440 Jun  5 17:27 scripts-2017-06-05.tar

Il modo più semplice è inviare un'e-mail come allegato

Ora che il file .tar è stato creato, vai in gmail.com e invia il file via e-mail come allegato. Nel passaggio successivo desideriamo un lavoro cron che crei il file ogni giorno e lo invii automaticamente tramite MTA (Mail Transport Agent). È necessario configurare un'opzione su gmail.com per eliminare tutte queste e-mail precedenti a 30 giorni. In questo modo verranno salvati solo 400 MB di backup di script totali.

Modifica 25 giugno 2017

Ho scoperto stasera alcuni file di configurazione difficili da eseguire backup finché non sono incappato in questo thread . I file in questione si trovano nella mia home directory:

.bashrc
.conkyrc
.websync # one of my own databases
.bafman* # Another one of my own databases

Usando il link sopra ho creato uno script chiamato ~/bin/backup con:

#!/bin/bash

if [[  == "" ]] ; 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 .tar /home/rick/bin
tar -rvf .tar /usr/local/bin
find .* -maxdepth 0 -type f -exec tar -rvf .tar {} +

Per vedere cosa c'è nell'archivio .tar usa il comando:

tar -tvf Backup-2017-06-26.tar

Ricordati di sostituire "Backup-2017-06-26" con il parametro che hai usato durante la creazione del backup.

Modifica 1 luglio 2017

Q & A simile è stata pubblicata a novembre 2014: Invia backup via email con crontab.La risposta accettata è inclusa di seguito:

Questo comando seguente ha funzionato per me quando ho eseguito il test sulla mia macchina.

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]

Quindi probabilmente l'approccio da seguire sarà qualcosa di simile,

tar -zcf /home/blah/backup.tgz /home/blah/
echo "Please find attached the backup file" | mutt -a "/home/blah/backup.tgz" -s "File attached" -- [email protected]

Salverò lo script sopra come backup_email.sh e pianificherò il lavoro cron come,

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

Riferimenti

link

    
risposta data WinEunuuchs2Unix 06.06.2017 - 02:00

Leggi altre domande sui tag