diff --git a/README.md b/README.md index c6b9d06..eeb4aa2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,17 @@ # rsyncbackup -To backup and synchronize directories with redondancy on multiple support type (nas,computers,usb,cloud) by the most automated way. Push or pull with rsync. \ No newline at end of file +To backup and synchronize directories with redondancy on multiple support type (nas,computers,usb,cloud) by the most automated way. Push or pull with rsync. + +## Requirements + +- /datas should contain P1 P2 Pxx with the same user +- connection with public/private keys (without password) + +## banana_push_pull.sh + +To synchronize datas between computers. Hosts should be available by ssh resolver (dns or .ssh/config) and rsync should be available installed on two sides. + +## rsync_usb*.sh_ + +To sync mounted keys. +Copy script to key directory and execute it. \ No newline at end of file diff --git a/backup_strategy.md b/backup_strategy.md new file mode 100644 index 0000000..3d498e0 --- /dev/null +++ b/backup_strategy.md @@ -0,0 +1,97 @@ +# stratégie de classement et de sauvegarde des documents + +# type de documents + +* critères de tri +- taille (Ko/Mo/Go) +- durée de rétention (vie/1y/5y/10y) +- lisible en console + - oui: + - txt + - audio + - ods + - keepass + - non: + - video + - possible: + - pdf +- format tolérant les pertes + - oui (gravable): + - audio + - video + - non: + - archive (zip/tar/xz/7z/...) + - pdf +- convertible avec perte sous un format archivé + - oui: + - pdf + - non: + - + +|-------------------|-----------|-------|-------|--------|--------|-----|-----|-----|----------|----------|-----|--------------| +| type | extension | duree | perso | repro | taille | cdr | usb | cli | disaster | rotation | maj | compressible | +|-------------------|-----------|-------|-------|--------|--------|-----|-----|-----|----------|--------- |-----|--------------| +| keepass | kbdx | vie | oui | oui | small | non | oui | oui | oui | oui | oui | non | +| paie | pdf | vie | oui | non | small | oui | oui | oui | oui | non | oui | non | +| scans officiel | png/pdf | vie | oui | oui | small | oui | oui | non | oui | non | oui | non | +| releves banques | pdf | 10y | oui | oui | middle | oui | oui | oui | non | oui | oui | non | +| video youtube | mp4 | - | non | oui | big | non | non | non | non | non | non | non | +| video famille | mp4 | vie | oui | non | big | oui | non | non | oui | non | oui | non | +| video entourage | mp4 | vie | oui | non | big | oui | non | non | non | non | oui | non | +| video idiotes | mp4 | - | oui | oui | big | oui | non | non | non | non | oui | non | +| video osm | mp4 | - | oui | oui | big | non | non | non | non | non | maj | non | +| video artois | mp4 | - | oui | non | big | oui | non | non | non | non | non | non | +| video copie | mp4 | - | non | oui | big | non | non | non | non | non | non | non | +| video anime | mp4 | vie | non | non | big | oui | non | non | non | non | non | non | +| video spectacle | mp4 | 10y | non | non | big | oui | non | non | non | non | non | non | +| books pdf study | pdf | 10y | non | non | middle | oui | non | oui | non | non | non | non | +| books epub study | epub | 10y | non | non | middle | oui | non | oui | non | non | non | non | +| audiobooks | ogg | 10y | non | non | big | oui | non | oui | non | non | non | non | +| music originaux | mp3/wma | 10y | non | non | middle | oui | non | oui | non | non | non | non | +| music dump cd | flac/... | - | non | oui | middle | oui | non | oui | non | non | non | non | +| iso winx cds | iso.xz | 10y | oui | non | big | non | non | non | non | non | non | oui | +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | + +# matrice des prioritées + +|-----|-------|-------|--------|----------|-----| +| num | duree | perso | taille | archives | cdr | +|-----|-------|-------|--------|----------|-----| +| P1 | vie | oui | faible | non | non | +| P2 | vie | oui | moyen | oui | non | +| P3 | vie | oui | eleve | oui | non | +| P4 | vie | oui | eleve | non | oui | +| P5 | vie | oui | moyen | non | non | +| P6 | 10y | non | | | oui | +| P7 | 10y | non | | | oui | +| P8 | - | | | | non | +| P9 | - | | | | oui | +|-----|-------|-------|--------|----------|-----| + + +# tailles disques cibles + +|----------------|----------|----|----|----|----|----|-----|-----|-----| +| volume | taille | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | +|----------------|----------|----|----|----|----|----|-----|-----|-----| +| | cible | 4 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | +|----------------|----------|----|----|----|----|----|-----|-----|-----| +| | agregats | | 8 | 16 | 32 | 64 | 128 | 256 | 512 | +|----------------|----------|----|----|----|----|----|-----|-----|-----| +| | replicas | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | +|----------------|----------|----|----|----|----|----|-----|-----|-----| +| cle usb 4Go | 4G | x | | | | | | | | +| cle usb 8Go | 8G | x | x | | | | | | | +| cle usb 16Go | 16G | x | x | x | | | | | | +| cle usb 32Go | 32G | x | x | x | x | | | | | +| cle usb 64Go | 64G | x | x | x | x | x | | | | +| cle usb 128G | 128G | x | x | x | x | x | x | | | +| noisette home | 256G | x | x | x | x | x | x | x | | +| externe 500Go | 512G | x | x | x | x | x | x | x | x | +| vg seagate 1To | 950G | x | x | x | x | x | x | x | x | +|----------------|----------|----|----|----|----|----|-----|-----|-----| + + diff --git a/banana_push_pull.sh b/banana_push_pull.sh new file mode 100755 index 0000000..d5eef74 --- /dev/null +++ b/banana_push_pull.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +action=$(basename $0) +declare -a dirlist +logfile=/tmp/push_pull.log +rsync_options="--archive --perms --compress --delete-during --exclude=*.git* --exclude=git.code-workspace" + +case "$(hostname)" in + pistache|noix|noisette) + dirlist=( /datas/workspace /datas/git /datas/P1 /datas/P2 /datas/P3 /datas/P4 /datas/P5 /datas/P6 /datas/P7 /datas/rebuild ) + ;; + queensland) + dirlist=( /datas/workspace /datas/git /datas/P1 /datas/P2 /datas/P3 /datas/P4 /datas/P5 /datas/P6 ) + ;; + pecan) + dirlist=( /datas/workspace /datas/git /datas/P1 /datas/P2 /datas/P3 /datas/P4 /datas/P5 ) + ;; + eee) + dirlist=( /datas/workspace /datas/git /datas/P1 /datas/P2 /datas/P3 ) + ;; + mllse) + dirlist=( /datas/P1/KEEPASS /datas/P1/PARENTS /datas/P2/*_THUOT /datas/P6/*_THUOT ) + ;; + *) + dirlist=( /datas/worspace ) + ;; +esac + +# dirlist=( /datas/P1 /datas/P2 /datas/P3 /datas/P4 /datas/P5 /datas/P6 /datas/P7 ) + +ask() { + USER_ANSWER="?"; + while [ "x$USER_ANSWER" != "xno" -a "x$USER_ANSWER" != "xnon" -a "x$USER_ANSWER" != "xyes" -a "$USER_ANSWER" != "xoui" ] ; do + echo -n "$1 $2 $3 ? [yes/no] " + read -n 3 USER_ANSWER + echo ""; + done + if [ "x$USER_ANSWER" == "xyes" -o "x$USER_ANSWER" == "xoui" ] ; then + return 0 + else + return 1 + fi +} + +echo "Snapshot git repositories (without history)" + +case "$(hostname)" in + noix) + [ -e ${logfile} ] && rm ${logfile} + rsync --dry-run ${rsync_options} --exclude=*.terraform* --out-format="%B %l %M %f" /datas/git/* /datas/P1/git/ |tee ${logfile} + if [ -s ${logfile} ] + then + if ask snapshot git repo /datas/git /datas/P1/git + then + rsync --verbose ${rsync_options} --exclude=*.terraform* /datas/git/* /datas/P1/git/ + fi + fi + ;; +esac + +echo "List of files differences from master" + +for directory in ${dirlist[@]} +do + echo "check ${directory}" + [ -w ${directory} ] || ( echo "${directory} is not writable" && exit 3 ) + [ -e ${logfile} ] && rm ${logfile} + case "${action}" in + pull) + rsync --dry-run ${rsync_options} --out-format="%B %l %M %f" banana:${directory}/ ${directory} |tee ${logfile} + [ -s ${logfile} ] || continue + if ask rsync banana:${directory}/ ${directory} + then + echo "rsync --verbose ${rsync_options} banana:${directory}/ ${directory}" + rsync --verbose ${rsync_options} banana:${directory}/ ${directory} + fi + ;; + push) + rsync --dry-run ${rsync_options} --out-format="%B %l %M %f" ${directory}/ banana:${directory} |tee ${logfile} + [ -s ${logfile} ] || continue + if ask rsync ${directory}/ banana:${directory} + then + echo "rsync --verbose ${rsync_options} ${directory}/ banana:${directory}" + rsync --verbose ${rsync_options} ${directory}/ banana:${directory} + fi + ;; + *) + echo "command ${command} is unknown ... push or pull ??" + exit 2 + ;; + esac +done + diff --git a/export_bookmarks.sh b/export_bookmarks.sh new file mode 100755 index 0000000..eef1b11 --- /dev/null +++ b/export_bookmarks.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +backupdirectory=/datas/P1/BOOKMARKS +bookmarksexportdir=/datas/git/bookmarksexport + +export_bookmark() +{ + echo "export ${browser}" + browser=$1 + lastfile=$(find ${backupdirectory} -name "2[0-9]*_${browser}_bookmarks.html" -print |sort -n | tail -n 1) + lastfilechecksum=$(sha512sum "${lastfile}" |cut -d' ' -f 1) + python3 ${bookmarksexportdir}/bookmark_exporter.py --browser "${browser}" --formats html --output /tmp --prefix bookmark + lastexport=$(find /tmp -name "bookmark_2[0-9_]*" -print 2>/dev/null |sort -n |tail -n 1) + lastexportchecksum=$(sha512sum "${lastexport}" |cut -d' ' -f 1) + echo "compare ${lastexportchecksum} == ${lastfilechecksum}" + if [ "${lastexportchecksum}" == "${lastfilechecksum}" ] + then + echo "${browser} bookmarks not modified" + else + echo mv -i "${lastexport}" ${backupdirectory}/"$(date +%Y%m%d%H%M%S)_${browser}_bookmarks.html" + fi +} + +for browser in Firefox Chromium Chrome +do + export_bookmark ${browser} + sleep 3 +done \ No newline at end of file diff --git a/git_prepare_and_push.sh b/git_prepare_and_push.sh new file mode 100755 index 0000000..ff5065e --- /dev/null +++ b/git_prepare_and_push.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +source=/datas/git +destination=/datas/git.ccyr.eu + +echo "check diff from ${source} to ${destination}" +[ -e /tmp/rsync_push.log ] && rm /tmp/rsync_push.log +rsync -anpz --delete-after --exclude=*.git* --out-format="%B %l %M %f" ${source}/ ${destination} |tee /tmp/rsync_push.log +[ -s /tmp/rsync_push.log ] && echo "to push to distant, copy following command : \ +rsync -apvz --delete-after --exclude=*.git* --out-format=\"%B %l %M %f\" ${source}/ ${destination}" + +commit_repository() +{ + echo "check repository $1" + cd ${destination}/$1 + git status +} + + +for repository in ansible computers financial genealogie +do + commit_repository ${repository} +done \ No newline at end of file diff --git a/mtp_put_directory.sh b/mtp_put_directory.sh new file mode 100755 index 0000000..d0164fb --- /dev/null +++ b/mtp_put_directory.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# execute script from gvfs directory + +directory=$1 + +# directory target name +destination=$(basename "${directory}") + + +echo "liste des fichiers du dossier ${directory}" +for item in "${directory}"/* +do + filename=$(basename "${item}") + echo "examen du fichier ${filename}" + if [ -e "${destination}"/"${filename}" ] + then + echo "${item} already on" + else + echo "copie du fichier ${filename}" + echo "cp --verbose ${item} ${destination}/${filename}" + cp --verbose "${item}" "${destination}"/"${filename}" + fi +done + +# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 foldmethod=indent diff --git a/rsync_usb128go.sh b/rsync_usb128go.sh new file mode 100755 index 0000000..b8af694 --- /dev/null +++ b/rsync_usb128go.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for directory in "P1" "P2" "P3" "P4" "P5" "P6" +do +rsync -avzp --delete-during /datas/${directory}/ ./${directory}/ +done diff --git a/rsync_usb64go.sh b/rsync_usb64go.sh new file mode 100755 index 0000000..7226238 --- /dev/null +++ b/rsync_usb64go.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for directory in "P1" "P2" "P3" "P4" "P5" +do +rsync -avzp --delete-during /datas/${directory}/ ./${directory}/ +done