Archivace dat na úsporných serverech bez grafického rozhraní v Linuxu
V tomto článku se zaměříme na efektivní metodu archivace dat, kterou využívám na svých úsporných serverech založených na platformě Raspberry Pi. Tyto servery postrádají grafické rozhraní, což znemožňuje použití běžných nástrojů jako TimeShift. Zároveň nejsou součástí clusteru ani spravovány pomocí systémů jako vSphere či Proxmox Cloud. Popsaný postup archivace je vhodný i pro další scénáře, kde je potřeba zálohovat obsah souborového systému včetně zachování oprávnění pro případnou obnovu systému.
Cílem tohoto článku je představit řešení, které jsem vyvinul pro efektivní archivaci dat. Požadavky pro implementaci této metody jsou obecně snadno splnitelné. Klíčovým prvkem je SSH server, který je dostupný na všech hlavních platformách a linuxových distribucích. Tento přístup umožňuje zálohování celého souborového systému za běhu prostřednictvím SSH komunikace na vzdálené zařízení.
Koncept archivace spočívá v definování zdrojového a cílového umístění, přičemž data jsou komprimována a přenášena na vzdálené úložiště bez nutnosti dočasného ukládání na lokálním disku. Tento přímý způsob zpracování (bez mezi-uložení) je zásadní pro zachování efektivity a minimalizaci zatížení lokálního úložiště. Řešení využívá SSH stream vytvořený pomocí příkazu cat
, který umožňuje vytváření archivu přímo na vzdálené straně - tzv. "on the fly".
Tato metoda je obzvláště přínosná v situacích, kde je důležité minimalizovat využití lokálních zdrojů a maximalizovat efektivitu přenosu dat.
Shell Bash Script
#!/bin/bash
# Skript pro zálohování souborů pomocí tar a ssh
# Barevné proměnné pro výstup
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
# Zdrojová složka pro archivaci
source_path="/"
# Časové razítko pro název archivu
day=$(date +%A)
timestamp=$(date +'%Y%m%d_%H%M%S')
hostname=$(hostname -s)
archive_file_name="$hostname-$timestamp-$day-backup.tgz"
excluded_paths=" \
--exclude=/$hostname-$timestamp-$day.tgz \
--exclude=/proc \
--exclude=/sys \
--exclude=/dev \
--exclude=/run \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/media \
--exclude=/lost+found \
--exclude=/var/run \
--exclude=/var/tmp \
--exclude=/var/swap \
--exclude=/var/cache \
--exclude=/var/log \
--exclude=/home/*/.cache"
echo "_______start_______"
date
echo
echo "Source to archive /"$source_path/""
echo
echo -e "${GREEN}Archiving ... /"$destination_path/""
echo -e "${YELLOW}... wait please ..."
echo -e ${NC}
# Vytvoření archivu a přenos na vzdálený server pomocí streamování do souboru na vzdáleném serveru (přes ssh)
sudo tar cvpz $excluded_paths --absolute-names $source_path | ssh -i ~/.ssh/id_rsa_backupagent -p 7922 backupagent@192.168.79.11 "cat > /volume1/homes/backupagent/auto_backups/$archive_file_name"
# check result via return code of last command [$?]
if [ $? -ne 0 ]
then
echo -e ${RED}
echo "Backing up to sftp destination failed."
echo -e ${NC}
echo "_______end_________"
date
exit 1
else
echo -e ${GREEN}
echo "Backing up to sftp destination succesfull."
echo -e ${NC}
echo "_______end_________"
date
exit 0
fi