Sur gmail.com, je vois ceci:
0,38 Go (2%) de 15 Go utilisés
Sur ma partition de 30 Go, 20 Go sont remplis de contenu Ubuntu, mais probablement seulement 1 Go de documents importants. Pourquoi ne pas utiliser ce stockage en nuage gratuit pour la sauvegarde?
Existe-t-il déjà un programme pour le faire? Je vais probablement en écrire un de toute façon, mais je voulais le demander avant de commencer.
Je souhaite également la compression et la segmentation de fichiers, car certains systèmes ont une limite de 10 Mo pour les pièces jointes (comme celle au travail).
Merci :)
La partie originale de la réponse est laissée intacte dans la section suivante pour référence historique aux essais et erreurs.
Voici le script de sauvegarde actuel:
#!/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 protected]"
# 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 -- [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"
mail -a "$Filename64" -s "$Filename64" "$EmailAddr" < BackupLog
ls -la "$Filename" "$Filename64"
rm "$Filename" "$Filename64"
exit 0
Remplacez USER_NAME
ci-dessus par votre nom d'utilisateur. Remplacez [email protected]
par votre adresse gmail actuelle. Changez le répertoire /mnt/e/bin
dans le répertoire dans lequel vous stockez vos scripts bash. Enregistrez le fichier et quittez. Alors utilisez:
chmod a+x /mnt/e/bin/backup
Cela rend le script exécutable.
Remarquez comment le MBR (Master Boot Record) est sauvegardé. Une étape précédente distincte pour créer ~/.mbr.sav
à l'aide de Sudo dd ...
est requise, comme décrit dans les commentaires de script.
Remarquez la ligne dpkg --get-selections
. Cela crée une liste de tous les noms d’applications installées.
De envoyer des alertes par e-mail à l'aide de ssmtp nous trouvons le moyen le plus simple d'envoyer des e-mails automatisés à partir d'un terminal ou d'un script. Les étapes d'installation sont simples:
Sudo apt install ssmtp
Sudo nano /etc/ssmtp/ssmtp.conf
# Change "MyEmailAddress" and "MyPassword" to your own.
Il y a une étape non mentionnée; Google vous enverra un e-mail confirmant que vous souhaitiez autoriser une application "moins sécurisée" à envoyer des e-mails avec votre compte:
Après l'installation et la configuration de ssmpt
, un package supplémentaire est nécessaire pour attacher votre fichier de sauvegarde .tar à un courrier électronique:
Sudo apt install sharutils
Ce paquet contient le programme uuencode
qui nécessite de convertir des fichiers binaires pour la transmission.
cron
quotidien pour appeler le script de sauvegardeCréez le fichier /etc/cron.daily/daily-backup
contenant:
#!/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
Enregistrez le fichier, quittez et utilisez:
chmod a+x /etc/cron.daily/daily-backup
Cela rend le script exécutable.
Chaque matin après l'exécution de /etc/cron.daily/daily-backup
, cron
vous envoie deux courriels. Le premier est le fichier de sauvegarde Backup-YYYY-MM-DD.tar
qui, dans mon cas, fait 5,2 Mo que je ne peux pas vous montrer. L'autre est une liste de tous les fichiers de la sauvegarde que la commande tar
avait signalés à 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
Il a fallu un mois pour attendre une réponse, puis un mois pour écrire une réponse, mais le projet est maintenant terminé. À l'avenir, il suffit d'ajouter des répertoires supplémentaires au script de sauvegarde.
Le prochain projet consistera en une sauvegarde complète, mais il aura une taille de 6 Go et sera copié sur gdrive (Google Drive), car Gmail est limité à 25 Mo. Ce script s'appelle /usr/local/bin/full-backup
et est inclus ici si cela vous intéresse:
#!/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 /
Ce sera plus un "voyage" qu'une réponse à mesure que les options disponibles sont explorées.
J'ai deux annuaires dans lesquels j'ai investi la majeure partie de mon temps depuis août 2016:
/home/rick/bin
/usr/local/bin
Lorsque j'ai créé pour la première fois un fichier tar
(archive sur bande) à l'aide de ces deux répertoires et que je tentais de m'envoyer un courrier électronique, j'ai reçu cette erreur:
Comment deux répertoires de scripts écrits sur 10 mois peuvent-ils dépasser 25 Mo? A y regarder de plus près, ils sont> 190 MB. Whhaaatttt?
Il s’avère qu’il s’agit d’un fichier unique créé à des fins de test:
-rw-rw-r-- 1 rick rick 191143744 Dec 23 17:27 log-gsu-gedit.tst
Supprimez donc ce fichier de test et réexécutez les commandes:
tar -cvf scripts-2017-06-05.tar /home/rick/bin
tar -rvf scripts-2017-06-05.tar /usr/local/bin
La première commande crée le fichier .tar
à l'aide d'un répertoire de fichiers de script et la seconde est ajoutée au fichier .tar
à l'aide du deuxième répertoire de fichiers de script.
Le fichier .tar
a maintenant une taille plus respectable de 1,3 Mo:
-rw-rw-r-- 1 rick rick 1341440 Jun 5 17:27 scripts-2017-06-05.tar
Maintenant que le fichier .tar
est créé, allez simplement dans gmail.com
et envoyez-le par e-mail en pièce jointe. Dans l'étape suivante, nous voulons un travail cron
qui crée le fichier quotidiennement et l'envoie automatiquement par courrier électronique à l'aide de MTA
(Agent de transport du courrier). Une option doit être configurée dans gmail.com pour supprimer tous ces courriels de plus de 30 jours. Ainsi, seules 400 Mo environ des sauvegardes de scripts seront stockées.
J'ai découvert ce soir des fichiers de configuration difficiles à sauvegarder jusqu'à ce que je tombe par hasard sur ce fil . Les fichiers en question sont dans mon répertoire personnel:
.bashrc
.conkyrc
.websync # one of my own databases
.bafman* # Another one of my own databases
En utilisant le lien ci-dessus, j'ai créé un script appelé ~/bin/backup
avec:
#!/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 {} +
Pour voir ce qu'il y a dans l'archive .tar
, utilisez la commande suivante:
tar -tvf Backup-2017-06-26.tar
N'oubliez pas de remplacer "Backup-2017-06-26" par le paramètre que vous avez utilisé lors de la création de la sauvegarde.
Des questions et réponses similaires ont été publiées en novembre 2014: Envoyer une sauvegarde par courrier électronique avec crontab . La réponse acceptée est incluse ci-dessous:
Cette commande suivante a fonctionné pour moi lorsque j'ai testé ma machine.
echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
Donc, probablement l'approche à suivre sera quelque chose comme,
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]
Je vais enregistrer le script ci-dessus en tant que backup_email.sh
et planifier le travail cron en tant que,
0 1 * * * /path/to/backup_email.sh
Références