Linux-Backup-Script: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „Kategorie:Scripte = Zielsetzung = Erstellen eines Backups auf einem USB-Laufwerk. = Script = <syntaxhighlight lang="bash"> </syntaxhiglight>“) |
(→Script) |
||
Zeile 5: | Zeile 5: | ||
= Script = | = Script = | ||
< | <pre> | ||
#! /bin/bash | |||
CMD=$1 | |||
ARG1=$2 | |||
LABEL=usb_sams232 | |||
OPT_BTRFS="noatime,nodiratime,compress=zstd,space_cache,autodefrag,subvolid=5,subvol=/" | |||
MOUNT_OPT="$OPT_BTRFS" | |||
MOUNT_POINT=/media/fs.$LABEL | |||
MARKER=.backup.$LABEL.mrk | |||
#SOURCES="/home /opt /etc" | |||
SOURCES="/home /opt" | |||
STD_USER=wk | |||
TO_DELETE="/home/$STD_USER/.cache/mozilla/firefox/5xur4v4t.default-esr/cache2 /home/$STD_USER/.cache/mozilla/firefox/i9nyukos.default-esr-1/cache2" | |||
TO_DELETE="$TO_DELETE /home/$STD_USER/.cache/xreader/CacheStorage /home/$STD_USER/.cache/thumbnails" | |||
TO_DELETE="$TO_DELETE /home/$STD_USER/.local/share/Trash" | |||
HOST=rambo | |||
RSYNC_OPTS="-auv --progress --delete" | |||
IS_BTRFS=True | |||
</ | function Usage(){ | ||
echo "Usage: BackupUsb { mount | run | init LABEL | xfce | help { init }}" | |||
echo "Examples:" | |||
echo "BackupUsb mount" | |||
echo "BackupUsb run" | |||
echo "BackupUsb help init" | |||
echo "BackupUsb init usb-black" | |||
echo "+++ $*" | |||
} | |||
function DeleteCache(){ | |||
for dir in $TO_DELETE; do | |||
test -d $dir && rm -Rfv $dir/* | |||
done | |||
} | |||
function Help(){ | |||
what=$1 | |||
case "$what" in | |||
init) | |||
HelpInit | |||
;; | |||
*) | |||
Usage | |||
;; | |||
esac | |||
} | |||
function HelpInit(){ | |||
echo "Run:" | |||
echo "lsblk" | |||
echo "LABEL=usb-blue" | |||
echo "DEV=/dev/sdc3" | |||
echo "mkfs.btrfs -L \$LABEL \$DEV" | |||
echo "tune2fs –L \$LABEL \$DEV" | |||
echo "btrfs filesystem label \$DEV \$LABEL" | |||
echo "BackupUsb init \$LABEL" | |||
} | |||
function Mount(){ | |||
local mark=$1 | |||
local rc=0 | |||
test -d $MOUNT_POINT || mkdir $MOUNT_POINT | |||
#set -x | |||
local msg="$(mount | grep $LABEL)" | |||
if [ -n "$msg" ]; then | |||
echo "+++ already mounted: $msg" | |||
else | |||
mount LABEL=$LABEL -o $MOUNT_OPT $MOUNT_POINT | |||
mount | grep "$LABEL" | |||
fi | |||
if [ -n "$mark" ]; then | |||
if [ ! -e $MOUNT_POINT/$mark ]; then | |||
Usage "not a backup drive. Use 'init' to initialize" | |||
rc=1 | |||
fi | |||
fi | |||
return $rc | |||
} | |||
function Init(){ | |||
local label=$1 | |||
Mount | |||
if [ $? = 0 ]; then | |||
echo "= creating marker" | |||
touch $MOUNT_POINT/$MARKER | |||
mkdir $MOUNT_POINT/$HOST | |||
fi | |||
} | |||
function SnapshotBtrfs(){ | |||
local name=$1 | |||
local trgBase=$MOUNT_POINT/$HOST/snapshots/$name | |||
local trg=$trgBase/$(date +%Y.%m.%d) | |||
local src=$MOUNT_POINT/$HOST/$name | |||
test -d $trgBase || mkdir -p $trgBase | |||
if [ -d $trg ]; then | |||
echo "= deleting snapshot $trg" | |||
btrfs subvolume delete $trg | |||
fi | |||
echo "= creating snapshot $trg" | |||
btrfs subvolume snapshot -r $src $trg | |||
} | |||
function Run(){ | |||
Mount $MARKER | |||
if [ $? = 0 ]; then | |||
for source in $SOURCES; do | |||
echo "=== $source" | |||
local name=$(basename $source) | |||
trg=$MOUNT_POINT/$HOST/$name | |||
if [ ! -d $trg ]; then | |||
echo "= creating $trg..." | |||
if [ "$IS_BTRFS" = "True" ]; then | |||
btrfs sub create $trg | |||
else | |||
mkdir $trg | |||
fi | |||
fi | |||
if [ $IS_BTRFS = True ]; then | |||
SnapshotBtrfs $name | |||
fi | |||
rsync $RSYNC_OPTS $source/ $trg | |||
done | |||
umount $MOUNT_POINT | |||
fi | |||
} | |||
function Xfce(){ | |||
local trg2=$HOME/.local/share/applications/BackupUsb.desktop | |||
local trg=/tmp/BackupUsb.desktop | |||
if [ "$(id -u)" = 0 ]; then | |||
Usage "don't be root!" | |||
else | |||
cat <<EOS >$trg | |||
[Desktop Entry] | |||
Version=1.0 | |||
Type=Application | |||
Name=BackupUsb | |||
Comment= | |||
Exec=/usr/bin/sudo /usr/local/bin/local/BackupUsb run | |||
Icon=media-removable | |||
Path=/tmp | |||
Terminal=true | |||
StartupNotify=true | |||
EOS | |||
desktop-file-install --dir=$HOME/.local/share/applications $trg | |||
echo "= Find BackupUsb in Wisker menu and put it to the desktop" | |||
fi | |||
} | |||
if [ "$CMD" != xfce -a "$(id -u)" != 0 ]; then | |||
Usage "Be root!" | |||
else | |||
case $CMD in | |||
help) | |||
Help $ARG1 | |||
;; | |||
init) | |||
Init $ARG1 | |||
;; | |||
run) | |||
DeleteCache | |||
Run | |||
read dummy "Bitte ENTER drücken" | |||
;; | |||
xfce) | |||
Xfce | |||
;; | |||
*) | |||
Usage "unknown command: $CMD" | |||
;; | |||
esac | |||
fi | |||
</pre> |
Aktuelle Version vom 24. Dezember 2022, 10:15 Uhr
Zielsetzung[Bearbeiten]
Erstellen eines Backups auf einem USB-Laufwerk.
Script[Bearbeiten]
#! /bin/bash CMD=$1 ARG1=$2 LABEL=usb_sams232 OPT_BTRFS="noatime,nodiratime,compress=zstd,space_cache,autodefrag,subvolid=5,subvol=/" MOUNT_OPT="$OPT_BTRFS" MOUNT_POINT=/media/fs.$LABEL MARKER=.backup.$LABEL.mrk #SOURCES="/home /opt /etc" SOURCES="/home /opt" STD_USER=wk TO_DELETE="/home/$STD_USER/.cache/mozilla/firefox/5xur4v4t.default-esr/cache2 /home/$STD_USER/.cache/mozilla/firefox/i9nyukos.default-esr-1/cache2" TO_DELETE="$TO_DELETE /home/$STD_USER/.cache/xreader/CacheStorage /home/$STD_USER/.cache/thumbnails" TO_DELETE="$TO_DELETE /home/$STD_USER/.local/share/Trash" HOST=rambo RSYNC_OPTS="-auv --progress --delete" IS_BTRFS=True function Usage(){ echo "Usage: BackupUsb { mount | run | init LABEL | xfce | help { init }}" echo "Examples:" echo "BackupUsb mount" echo "BackupUsb run" echo "BackupUsb help init" echo "BackupUsb init usb-black" echo "+++ $*" } function DeleteCache(){ for dir in $TO_DELETE; do test -d $dir && rm -Rfv $dir/* done } function Help(){ what=$1 case "$what" in init) HelpInit ;; *) Usage ;; esac } function HelpInit(){ echo "Run:" echo "lsblk" echo "LABEL=usb-blue" echo "DEV=/dev/sdc3" echo "mkfs.btrfs -L \$LABEL \$DEV" echo "tune2fs –L \$LABEL \$DEV" echo "btrfs filesystem label \$DEV \$LABEL" echo "BackupUsb init \$LABEL" } function Mount(){ local mark=$1 local rc=0 test -d $MOUNT_POINT || mkdir $MOUNT_POINT #set -x local msg="$(mount | grep $LABEL)" if [ -n "$msg" ]; then echo "+++ already mounted: $msg" else mount LABEL=$LABEL -o $MOUNT_OPT $MOUNT_POINT mount | grep "$LABEL" fi if [ -n "$mark" ]; then if [ ! -e $MOUNT_POINT/$mark ]; then Usage "not a backup drive. Use 'init' to initialize" rc=1 fi fi return $rc } function Init(){ local label=$1 Mount if [ $? = 0 ]; then echo "= creating marker" touch $MOUNT_POINT/$MARKER mkdir $MOUNT_POINT/$HOST fi } function SnapshotBtrfs(){ local name=$1 local trgBase=$MOUNT_POINT/$HOST/snapshots/$name local trg=$trgBase/$(date +%Y.%m.%d) local src=$MOUNT_POINT/$HOST/$name test -d $trgBase || mkdir -p $trgBase if [ -d $trg ]; then echo "= deleting snapshot $trg" btrfs subvolume delete $trg fi echo "= creating snapshot $trg" btrfs subvolume snapshot -r $src $trg } function Run(){ Mount $MARKER if [ $? = 0 ]; then for source in $SOURCES; do echo "=== $source" local name=$(basename $source) trg=$MOUNT_POINT/$HOST/$name if [ ! -d $trg ]; then echo "= creating $trg..." if [ "$IS_BTRFS" = "True" ]; then btrfs sub create $trg else mkdir $trg fi fi if [ $IS_BTRFS = True ]; then SnapshotBtrfs $name fi rsync $RSYNC_OPTS $source/ $trg done umount $MOUNT_POINT fi } function Xfce(){ local trg2=$HOME/.local/share/applications/BackupUsb.desktop local trg=/tmp/BackupUsb.desktop if [ "$(id -u)" = 0 ]; then Usage "don't be root!" else cat <<EOS >$trg [Desktop Entry] Version=1.0 Type=Application Name=BackupUsb Comment= Exec=/usr/bin/sudo /usr/local/bin/local/BackupUsb run Icon=media-removable Path=/tmp Terminal=true StartupNotify=true EOS desktop-file-install --dir=$HOME/.local/share/applications $trg echo "= Find BackupUsb in Wisker menu and put it to the desktop" fi } if [ "$CMD" != xfce -a "$(id -u)" != 0 ]; then Usage "Be root!" else case $CMD in help) Help $ARG1 ;; init) Init $ARG1 ;; run) DeleteCache Run read dummy "Bitte ENTER drücken" ;; xfce) Xfce ;; *) Usage "unknown command: $CMD" ;; esac fi