#!/bin/bash # # Instalace skriptu: # ----------------- # Proveďte základní instalaci Linuxu bez grafického prostředí. (nechceme správce přihlášení ala gdm) # Klíčový příkaz ntfsclone je v balíčku ntfs-3g, který tedy nainstalujte. # Vytvořte adresář /backup/ a umístěte do něj tento skript. # Povolte skriptu práva pro spouštění "chomd +x /backup/backup.sh" # # Dále (postup platí pokud používáte systemd): # # 1) Automatické přihlášení uživatele root: # Editujte soubor /lib/systemd/system/getty@.service # řádek ExecStart=-/sbin/agetty --noclear %I $TERM # nahraďte ExecStart=-/sbin/agetty --noclear -a root %I $TERM # # 2) Automatické spuštění tohoto skriptu pod uživatelem root docílíme přidáním na konec souboru /root/.profile # následující: "/backup/backup.sh" # # Výsledek: Po startu počítače dojde k automatickému přihlášení uživatele root a spuštění tohoto skriptu na všech terminálech. # # Pokud Systemd nepoužíváte, stačí do /etc/rc.local přidat "openvt -s -w bash /backup/backup.sh" # zdroj informací viz http://superuser.com/questions/584931/howto-start-an-interactive-script-at-ubuntu-startup # Tento jednoduchý způsob se Systemd nefunguje, protože systemd vypisuje nekončící otravnou hlášku o startující službě. # # Jiný alternativní způsob pro systemd: https://alan-mushi.github.io/2014/10/26/execute-an-interactive-script-at-boot-with-systemd.html # v mém případě ale vůbec nefungoval. # # Konfigurák grubu /boot/grub/grub.cfg aktualizujete editací souboru /etc/default/grub a příkazem update-grub. # Uděláte dvě kopie, soubor /boot/grub/grub.linux je jeho kopie nastavená na bootování Linuxu, # koie /boot/grub/grub.windows je pro bootování do Windows. # Pokud mám monitor na výšku, do /etc/default/grub přidám GRUB_CMDLINE_LINUX="video=efifb fbcon=rotate:1" # # # Licence: použij a modifikuj si to jak chceš, pokud ale přijde na něco co podstatného, poděl se s tím na fóru http://forum.odorik.cz/viewtopic.php?f=12&p=29887#p29887 # Rovněž zanech ve skriptu odkaz na původní zdroj http://www.odorik.cz/w/windows:windows_backup_and_restore_scripts_using_linux_ntfsclone # # c_c() { echo echo reboot reboot } trap c_c SIGINT # odchytneme signál vyvolaný zmáčknutím CTRL + C, # aby tak nebylo možné získat přístup do linuxové konzole s právy ROOTa bez zahdání hesla WIN_PART=/dev/sda3 HESLO_PRISTUP_DO_SYSTEMU=moje24heslo setfont /usr/share/consolefonts/Lat2-Fixed13.psf.gz setleds -D +num # při vybírání souboru zálohy se numrecká klávesnice hodí setterm -blank 0 -powersave off # Nechť je vždy vidět, že na tomto počítači zrovna nejsou jen uspaná Windows if [[ `tty` =~ ^/dev/pts/ ]] ; then echo "Přihlášení přes ssh, necháme projít" exit 0 fi clear # začneme prázdnou obrazovkou if [ "`tty`" != "/dev/tty1" ] ; then echo "Jste v $(tty) zálohovací skript běží jen v tty1, nechceme, aby běžel vícekrát paralelně" PASS_COUNTER=1 while true; do echo echo "Pro vstup do systému, můžete zadat heslo (pokus číslo $PASS_COUNTER/3 ). Pro restart počítače zmáčkněte jen ENTER." read if [ "$REPLY" == "$HESLO_PRISTUP_DO_SYSTEMU" ] ; then clear echo echo "Vítejte v linuxové konzoli." echo 'Pokud Vám konzole nestačí, spusťte si "grafiku" příkazem startx.' echo '(Jestli startx nefunguje nainstalujte si ji příkazem "aptitude install xorg lxde-core", pak bude startx fungovat)' echo exit 0 else clear echo echo "Chybné heslo" echo fi PASS_COUNTER=$[ $PASS_COUNTER + 1 ] if [ $PASS_COUNTER -gt 3 ] || [ "$REPLY" == "" ] ; then echo reboot reboot fi done fi # pro potřeby BFU chceme pěkné volké čitelné fonty setfont /usr/share/consolefonts/Lat2-TerminusBold32x16.psf.gz # font by mělo jít změnit i pomocí dpkg-reconfigure console-setup, ale je tam možná 5 let starý bug # nastavení klávesnice pro konzoli mohu změnit: dpkg-reconfigure keyboard-configuration if cmp --silent /boot/grub/grub.cfg /boot/grub/grub.linux && [ -e /backup/opravdu_obnovit ] ; then # pokud soubory jsou stejné - bootování nastaveno na Linux # je nastaveno automatické bootování do Linuxu máme úkol - automaticky provést obnovu a vypnout počítač # Nastavil to skript z Windows FILE=`ls -tr /backup/*.gz | tail -1` #vybere nejmladší soubor gz echo echo echo "-------------------------------------------------------------------------------------------------------------" echo -e "\n\e[31m Chystáme se obnovit Windows z poslední zálohy $FILE, obnova začne za 10 vteřin.\e[39m \n" echo "-------------------------------------------------------------------------------------------------------------" echo echo -e "\e[93m Pokud si obnovu nepřejete, zmáčkněte ENTER\e[39m" echo if ! read -t 10; then # došlo k timeoutu - jdeme obnovovat cp /boot/grub/grub.windows /boot/grub/grub.cfg # příště bude automaticky bootovat Windows rm /backup/opravdu_obnovit # odděláme značku echo 'Obnovení počítače ze zálohy začalo v ' $(date +%Y_%m_%d-%H-%M-%S) echo "NEVYPÍNEJTE POČÍTAČ !!!!!!!!!!!!" echo "Počítač bude automaticky vypnut po dokončení zálohy." echo FILE=`ls -tr /backup/*.gz | tail -1` #vybere nejmladsi soubor gz echo "obnovujeme ze souboru $FILE" gunzip -c $FILE | ntfsclone --restore-image --overwrite $WIN_PART - poweroff -p fi fi PASS_COUNTER=1 while [ "$REPLY" != "$HESLO_PRISTUP_DO_SYSTEMU" ] ; do if [ $PASS_COUNTER -gt 1 ] ; then clear echo echo " Špatné heslo " echo fi echo echo "Pro vstup do systému pro zálohu/obnovu, zadejte heslo (pokus číslo $PASS_COUNTER/3 )." echo "Pro restart počítače zmáčkněte jen ENTER." read PASS_COUNTER=$[ $PASS_COUNTER + 1] if [ $PASS_COUNTER -gt 3 ] || [ "$REPLY" == "" ] ; then echo reboot reboot fi done clear # aby nebylo vidět napsané heslo po celou dobu echo "Ip adresa tohoto počítače je:" $(ip route get 1 | awk '{print $NF;exit}') while true; do echo "-----------------------------------------------------------------------" echo -e "\e[36mVolné místo na disku:\e[39m" df -h / echo -e "\e[36mExistující zálohy - z názvu poznáte datum a čas vytvoření.\e[39m" ls -lh /backup/*.gz| awk '{print $9 " velikost zálohy:"$5}' echo echo echo -e "\e[36mHLAVNÍ MENU:\e[39m" echo echo " a - obnovit ze zálohy. Soubor zálohy budete moci zvolit v následujícím kroku." echo " b - vytvořit zálohu. Pozor před zvolením se ujistěte, že máte dostatek místa na disku," echo " viz přehled výše. Nová záloha může být o něco větší." echo " c - smazání zálohy, uvolnění místa - konkrétní zálohu ke smazanání budete moci zvolit " echo " d - restart počítače " echo echo 'Možnost "aa" a "bb" je stejná jako "a" a "b", počítač ale nebude po dokončení restartován.' echo "Pro vstup na konzoli zadejte heslo." echo echo -e "\e[93mZvolte písmeno a potvrďte klávesou ENTER:\e[39m" read case $REPLY in a | aa) echo echo "Provádíme obnovení zálohy z vybraného souboru." echo "Zvolte číslo a zmáčkněte ENTER" echo LIST=$(ls -t /backup/*.gz) PUV_REPLY=$REPLY # select nám totiž REPLY přemaže nově vybranou hodnotou NIC="nic_neprovádět_a_vrátit_se_zpět" select FILE in $LIST $NIC do if [ "$FILE" != "$NIC" ] && [ "$FILE" != "" ] ; then echo echo 'Obnovení začalo v ' $(date +%Y_%m_%d-%H-%M-%S) echo "NEVYPÍNEJTE POČÍTAČ !!!!!!!!!!!!" echo gunzip -c $FILE | ntfsclone --restore-image --overwrite $WIN_PART - echo -e "\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a" # pípneme si že je hotovo if [ "$PUV_REPLY" != "aa" ] ; then reboot fi fi break # se zeslect done;; b | bb) echo 'Vytváření zálohy započalo v ' $(date +%Y_%m_%d-%H-%M-%S) echo "NEVYPÍNEJTE POČÍTAČ !!!!!!!!!!!!" echo ntfsclone -s -o - $WIN_PART |gzip -c > /backup/win$(date +%Y_%m_%d-%H-%M-%S).gz echo -e "\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a" # pípneme si že je hotovo echo $REPLY if [ "$REPLY" != "bb" ] ; then echo reboot reboot fi ;; c) #smazání zálohy echo echo "Mažeme soubor zálohy, zadejte číslo a ENTER" echo LIST=$(ls -t /backup/*.gz) NIC="nic_neprovádět_a_vrátit_se_zpět" select FILE in $LIST $NIC do if [ "$FILE" != "$NIC" ] && [ "$FILE" != "" ] ; then echo "mažu soubor zálohy $FILE" rm -i "$FILE" fi break # ruším select smyčku done;; d) # restart počítače echo "restartujeme" reboot;; $HESLO_PRISTUP_DO_SYSTEMU) # administrace - tajná volba clear exit 0;; *) echo "nerozpoznaná volba";; esac done # konec cyklu