Sauvegardes
Commande rsync
Mon système de sauvegarde est un simple script
rsync
qui
copie les dossiers importants de mon $HOME vers un SSD monté sur
/media/backup/
avec des options pour
sauvegarder les fichiers écrasés à part dans des dossier datés.
#!/bin/sh
date=`date "+%Y%m%d-%H%M%S"`
name=`uname -n`
# Attention au /
SOURCE_DIR=/home/guilhem/
MOUNT_POINT=/media/backup
TARGET_DIR=$MOUNT_POINT/guilhem
INCDIR="${MOUNT_POINT=}/backup/"
BACKUP_DIR="$INCDIR/$(date +%F_%H-%M-%S)"
echo "BACKUP_DIR is $BACKUP_DIR"
echo "SOURCE_DIR is $SOURCE_DIR"
echo "TARGET_DIR is $TARGET_DIR"
uuid=`findmnt -n --target $TARGET_DIR -o UUID`
LOGLINE="$date : save $name on $uuid"
if mountpoint -q "$MOUNT_POINT"; then
echo "$MOUNT_POINT is already a mountpoint"
else
echo "$MOUNT_POINT is not a mountpoint please mount the drive and restart the backup."
exit
fi
echo $LOGLINE >> $LOGFILE
mkdir -p $TARGET_DIR
mkdir -p $INCDIR
La commande rsync:
# Rsync options used:
# --devices #preserve device files
# --specials #preserve special files
# --links #copy symlinks as symlinks
# --times #preserve modification times
# --one-file-system #don't cross filesystem boundaries
# --hard-links #preserve hard-links
# --human-readable # output in human-readable numbers
# --inplace # update detination files in-place
# --partial #keep partially transferred files
# --progress #show progress during transfer
# --delete-excluded #delete exluded files from destination
# --backup # save deleted and pre-existing files in --backup-dir
rsync\
--recursive\
--devices\
--specials\
--links\
--times\
--one-file-system\
--hard-links\
--human-readable\
--inplace\
--partial\
--progress\
--backup\
--backup-dir=$BACKUP_DIR\
--delete-excluded\
--include='.'\
--include='research/***'\
--include='perso/***'\
--include='documents/***'\
--include='.zotero/***'\
--include='.thunderbird/***'\
--include='.dotfiles/***'\
--include='music/***'\
--include='pictures/***'\
--include='sync/***'\
--include=''\
--exclude='*'\
$SOURCE_DIR $TARGET_DIR
if [ $? -eq 0 ]; then
echo "Backup success"
fi
echo "Backup script finished"
Fichiers de configuration avec Gnu Stow
Les fichiers de configuration auxquels je tiens sont tous enregistrés dans
~/.dotfile/
et je créé des liens symboliques vers leur destination en utilisant
GNU Stow
. Le dossier est sous contrôle de version avec
git
et je maintiens une branche par machine.
Le principe est simple, dans dotfiles il y a un certain nombre de dossiers qui correspondent chacun à un ensemble cohérent de fichiers de configurations.
Par exemple, le dossier
mpd
contient la configuration de mon lecteur de musique et son client
ncmpcpp
.
mpd
└── dot-config
├── mpd
│ ├── database
│ └── mpd.conf
└── ncmpcpp
└── config
Quand stow est invoqué, il créé des liens symboliques en remplaçant le préfixe
dot-
par un point.
stow --dotfiles mpd
va créer les liens suivants:
~/.config/mpd -> ~/.dotfiles/dot-config/mpd
~/.config/ncmpcpp/config -> ~/.dotfiles/dot-config/ncmpcpp/config # (car .config/ncmpcpp/error.log existe déjà).
J'utilise les commandes suivantes pour appliquer Stow a tout les dossiers:
abbr stow-mock "cd ~/.dotfiles && stow -n -R --dotfiles --verbose=1 *"
abbr stow-dotfiles "cd ~/.dotfiles && stow -R --dotfiles --verbose=1 *"
abbr stow-remove "cd ~/.dotfiles && stow -D --dotfiles --verbose=1 *"
Comme je ne souhaite pas utiliser de serveur tiers pour stocker mes fichiers de configuration, je bundle le dépôt git quand je le modifie, et le clone depuis le bundle sur mes nouvelles machines.
abbr stow-save cd ~/.dotfiles/ && git bundle create ~/sync/.dotfiles.git.bundle --all
Ce que j'aimerais améliorer
J'aimerais avoir un système pour garder une trace du contenu de mes disques durs externes. J'en ai 3 ou 4 et je prends un peu toujours le premier qui me tombe sous la main pour faire mes sauvegardes. Il faudrait que je regarde les outis du type
gocatcli
. Pour le moment je sauvegarde juste le nom de la machine, la date et l'uuid du disque dans un fichier de log, synchronisé entre machines.