Cześć,
Do wykonania kopii zapasowej użyję narzędzia rclone ze strony https://rclone.org W tym konkretnym przypadku użyję https://mega.nz oraz odpowiedniej konfiguracji, aby móc skopiować pliki z serwera do mega.nz. Jeśli nie masz tam konta, możesz je założyć. Na dzień dobry każdy dostaje 50 GB przestrzeni za darmo.
Proszę zwrócić uwagę na to, że na chwilę bieżącą jest problem z 2FA dla mega. Próba kompilacji aplikacji z kodu źródłowego za pomocą instrukcji z tej strony https://github.com/meganz/MEGAsync kończy się błędem. Jest to związane z błędem kompilatora, który w tym przypadku ma zbyt mało pamięci 128 MB RAM, 170 MB swap i zbyt mało zasobów procesora, aby zakończyć prawidłowo proces kompilacji. Process cc1plus jest zabijany (kill) i kompilacja Crypto++ kończy się porażką.
Potrzebny nam curl
sudo yum install curl
lub
sudo apt-get install curl
lub
sudo apt install curl
W następnej kolejności należy wykonać poniższą komendę:
curl https://rclone.org/install.sh | sudo bash
Logujemy się z podwyższonymi uprawnieniami jako użytkownik sudoers.
sudo -i
Uruchamiamy konfigurację rclone poleceniem:
rclone config
- Tworzymy plik konfiguracyjny z połączeniem do naszego konta mega.nz
- Wybieramy n jako nowe połączenie (ang. new remote)
- Wpisujemy przyjazną nazwę (ang. name) np. mega albo remote.
- Wybieramy pozycję nr 18, czyli wpisujemy cyfry 18.
- Podajemy login i dwukrotnie hasło do naszego konta w mega.nz
- Następnie wybieramy n, gdyż nie chcemy zaawansowanej konfiguracji, o której może napiszę innym razem.
- Potwierdzamy literą y naszą konfigurację.
- A na samym końcu wybieramy q, aby wyjść z konfiguracji.
Sprawdzimy teraz, czy konfiguracja działa.
rclone lsd mega:
Jeśli wszystko przebiegło poprawnie, zostaniemy zalogowani do naszego konta. Na mega możemy utworzyć ręcznie folder o nazwie backup. Wtedy możemy ręcznie kopiować pliki do tego folderu za pomocą niższego polecenia:
rclone copy /home/user mega:backup
Jednak po co się męczyć? Można napisać sobie skrypt.
cd /home/user
vi backup.sh
Wciskamy insert na klawiaturze (ins) i wklejamy poniższą zawartość:
!/bin/bash TIME=date +%b-%d-%y FILENAME=backup-bin-$TIME.tar.gz SRCDIR=/bin DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-bin-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-bin-$TIME.tar.gz FILENAME=backup-boot-$TIME.tar.gz SRCDIR=/boot DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-boot-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-boot-$TIME.tar.gz FILENAME=backup-dev-$TIME.tar.gz SRCDIR=/dev DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-dev-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-dev-$TIME.tar.gz FILENAME=backup-etc-$TIME.tar.gz SRCDIR=/etc DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-etc-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-etc-$TIME.tar.gz FILENAME=backup-home-$TIME.tar.gz SRCDIR=/home DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-home-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-home-$TIME.tar.gz FILENAME=backup-lib-$TIME.tar.gz SRCDIR=/lib DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-lib-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-lib-$TIME.tar.gz FILENAME=backup-lib64-$TIME.tar.gz SRCDIR=/lib64 DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-lib64-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-lib64-$TIME.tar.gz!/bin/bash FILENAME=backup-lost+found-$TIME.tar.gz SRCDIR=/lost+found DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-lost+found-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-lost+found-$TIME.tar.gz FILENAME=backup-media-$TIME.tar.gz SRCDIR=/media DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-media-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-media-$TIME.tar.gz FILENAME=backup-mnt-$TIME.tar.gz SRCDIR=/mnt DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-mnt-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-mnt-$TIME.tar.gz FILENAME=backup-opt-$TIME.tar.gz SRCDIR=/opt DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-opt-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-opt-$TIME.tar.gz FILENAME=backup-reboot-$TIME.tar.gz SRCDIR=/reboot DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-reboot-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-reboot-$TIME.tar.gz FILENAME=backup-root-$TIME.tar.gz SRCDIR=/root DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-root-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-root-$TIME.tar.gz FILENAME=backup-run-$TIME.tar.gz SRCDIR=/run DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-run-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-run-$TIME.tar.gz FILENAME=backup-sbin-$TIME.tar.gz SRCDIR=/sbin DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-sbin-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-sbin-$TIME.tar.gz FILENAME=backup-srv-$TIME.tar.gz SRCDIR=/srv DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-srv-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-srv-$TIME.tar.gz FILENAME=backup-tmp-$TIME.tar.gz SRCDIR=/tmp DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-tmp-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-tmp-$TIME.tar.gz FILENAME=backup-usr-$TIME.tar.gz SRCDIR=/usr DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-usr-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-usr-$TIME.tar.gz FILENAME=backup-var-$TIME.tar.gz SRCDIR=/var DESDIR=/home/user/backup tar -cvpzf $DESDIR/$FILENAME $SRCDIR rclone copy /home/user/backup/backup-var-$TIME.tar.gz mega:backup rm -Rf /home/user/backup/backup-var-$TIME.tar.gz
Wciskamy Esc, wpisujemy :wq! i wciskamy Enter
Aby skrypt był wykonywalny, trzeba nadać mu odpowiednie uprawnienia.
chmod +x backup.sh
Teraz możemy wykonać skrypt ręcznie:
./backup.sh
Jeśli chcemy zautomatyzować ten dość długotrwały proces dodajemy zadanie do crona, które będzie wykonywać ten skrypt za nas.
crontab -e
Wciskamy insert (ins) i wklejamy:
00 04 * * * /bin/bash /home/user/backup.sh
Wciskamy Esc, wpisujemy :wq! i wciskamy Enter.
Skrypt będzie wykonywać się o 4 w nocy co 24 godziny.
Legenda:
!/bin/bash # shebang, oznaczający, że skrypt będzie wykonywany przez konkretny interpreter, tutaj bash. TIME=date +%b-%d-%y # zmienna dopisująca aktualną datę FILENAME=backup-bin-$TIME.tar.gz # nazwa pliku po spakowaniu SRCDIR=/bin # katalog, który chcesz skopiować DESDIR=/home/user/backup # docelowy katalog, do którego kopiowane są dane tar -cvpzf $DESDIR/$FILENAME $SRCDIR # kompresowanie katalogu rclone copy /home/user/backup/backup-bin-$TIME.tar.gz mega:backup # kopiowanie katalogu do mega.nz rm -Rf /home/user/backup/backup-bin-$TIME.tar.gz # usunięcie skompresowanego pliku z serwera
Na koniec uwaga. Katalogi proc oraz sys nie pozwolą na wykonanie kopii, ponieważ posiadają pliki, które są w użyciu przez serwer, a konkretniej przez jego procesy.