Skrypt wykonujący kopię zapasową na szyfrowanym nośniku

Skrypt wykonuje kopię zapasową wybranych katalogów z pominięciem katalogów zawartych w pliku /home/user/bin/backup2sd.exclude który jest ustawiony w zmiennej ExcludeFile, każdy katalog znajduje się w oddzielnej linii.

Przykładowy plik /home/user/bin/backup2sd.exclude

.Private
.PyCharmCE2017.3
.cmake
.cache
.dbus
.ecryptfs
.gimp-2.8

Parametry wywołania skryptu

  • -m - podmontowanie nośnika

  • -u - odmontowanie nośnika

  • -b - wykonanie kopii zapasowej

  • -h - wyświetlenie pomocy

Wywołanie skryptu bez parametrów uruchamia wykonanie kopii zapasowej.

#!/bin/env bash

CryptoName=CryptoSD
Device=/dev/mmcblk0
SRC=/home/user
DST=/home/user/CryptoSD
ExcludeFile=/home/user/skrypty/backup2sd.exclude

root_chk() {
  if [[ $EUID -ne 0 ]]; then
    echo "Ten program musisz uruchomić jako root" 1>&2
    exit 1
  fi
}

pomoc() {
  echo
  echo
  echo "Podmontowanie nośnika."
  echo "   # $0 -m"
  echo
  echo "Odmontowanie nośnika."
  echo "   # $0 -u"
  echo
  echo "Wykonanie kopii zapasowej."
  echo "   # $0 -b"
  echo
  exit
}

mount_sd() {
  root_chk

  /sbin/cryptsetup luksOpen $Device $CryptoName
  /bin/mount /dev/mapper/$CryptoName /home/red/$CryptoName
}

umount_sd() {
  root_chk

  partition=$(mount | grep $CryptoName | awk '{ print $3 }')
  crypto=$(ls /dev/mapper/ | grep $CryptoName)

  if [ -n "$partition" ]
  then
    echo -n "Synchronizacja... "
    /bin/sync && echo [OK]
    echo -n "Odmontowuje partycje... "
    /bin/umount $partition && echo [OK]
  fi

  if [ -n "$crypto" ]
  then
    echo -n "Zamykam crypto... "
    /sbin/cryptsetup luksClose $CryptoName && echo [OK]
  fi
}

backup_sd() {
  root_chk

  ### Montowanie
  mount_sd

  ### Backup
  rsync -a -v --exclude-from=$ExcludeFile $SRC $DST
  rsync -a /etc $DST

  ### Odmontowanie
  umount_sd
}

while getopts :mubh option
do
  case "$option" in
    m) mount="yes"
      ;;
    u) umount="yes"
      ;;
    b) backup="yes"
      ;;
    h) pomoc
      ;;
    \?) echo
      echo "nieznany parametr -$OPTARG"
	  exit 1
      ;;
    :) echo
      echo "Parametr -$OPTARG wymaga argumentu."
      exit 1
      ;;
  esac
done

if [ -n "$mount" ]; then
  mount_sd
  exit 0
fi

if [ -n "$umount" ]; then
  umount_sd
  exit 0
fi


if [ -n "$backup" ]; then
  backup_sd
  exit 0
fi


root_chk

echo
echo -n "Wykonać kopię zapasową na karcie SD? [T/n]: "
read odp


case $odp in
  T|t)
    backup_sd
    ;;
  N|n)
    exit
    ;;
  *)
    backup_sd
    ;;
esac

Skrypt formatujący nośnik z obsługą szyfrowania

Skrypty używają jako nośnika kopii zapasowej karty SD: /dev/mmcblk30, jest on ustawiony w parametrze Device należy zmienić na właściwy dla swojego systemu.

#!/bin/bash

CryptoName=CryptoSD
Device=/dev/mmcblk30

if [[ $EUID -ne 0 ]]; then
  echo "This program must be run as root" 1>&2
  exit 1
fi

cryptsetup luksFormat -s 512 -h sha512 -i 333 $Device
cryptsetup luksOpen $Device $CryptoName
mkfs.ext4 /dev/mapper/$CryptoName
sleep 3
cryptsetup close $CryptoName

Date: 2020-10-24T14:33:48+02:00