# [HOWTO] Tworzenie stage4/backup systemu.

## C1REX

 EDIT: Dodany został nowy, lepszy sposób robienia kopii zapasowej. Credity lecą do SlashBeast.

Jednym ze sposobów na robienie stage4/backupu jest użycie innej dystrybucji. Ja osobiście mam oddzielną partycję z Ubuntu, jako system awaryjny.

Równie dobrze może to być jednak LiveCD.

Wchodzimy na partycję systemową gentoo i 

```
tar cjvf stage4.tar.bz2 ./* --exclude=usr/portage --exclude=tmp/* --exclude=var/tmp/*
```

Tyle.

Aby odzyskać system standardowo:

```
tar xvjpf stage4.tar.bz2
```

Przy pakowaniu/rozpakowaniu należy uważać na montowanie partycji.

Jeśli nasz system wygląda:

sda1 /

sda5 /boot

to po odpaleniu innej dystrybucji trzeba sobie je podpiąć 

sda1 /mnt/gentoo

sda5 /mnt/gentoo/boot

Wyjątkiem może być /home, które warto zostawić odmontowane przy robieniu backupu.

--------------------------------------------------------------------------------------------------------

Drugi sposób jest o wiele ciekawszy.

Najpierw tworzymy skrypt:

```
# nano -w /usr/bin/backup
```

...do którego wklejamy:

```
#!/bin/sh

test -d /home/backup || mkdir -p /home/backup

mkdir -p /tmp/rootfs

mount /dev/root /tmp/rootfs

cd /tmp/rootfs

tar cvjf /home/backup/stage4_`date '+%F_%H-%M-%S'`.tar.bz2 ./* --exclude=./var/tmp/* --exclude=./home/* --exclude=./tmp/* --exclude=./usr/src/* --exclude=./usr/portage

cd /home/backup

umount /tmp/rootfs

rmdir /tmp/rootfs
```

Teraz nadajemu mu prawa do wykonania:

```
# chmod 500 /usr/bin/backup
```

Gotowe. 

Teraz wykonanie backupu sprowadza się do wydania komendy

```
# backup
```

 na działającym systemie.

Tyle z opisu. Opis z zamierzenia miał być max prosty dla takich noobów jak ja, by nic nie można było popsuć. (Od czasu jak mam MacOS zakochałem się w prostocie)

Jak ktoś chce coś bardziej rozbudowanego, to

http://gentoo-wiki.com/HOWTO_Custom_Stage4

Wszelkie creditsy lecą do @SlashBeast i @nieprostego. Ja to tylko spisałem.

EDIT: Skrypt do backupu lekko zmodyfikowałem. Oryginał jest na tej stronie w poście @SlashBeast'a. 

Ja tylko wpisałem, by plik został zapisany w katalogu domowym, który przeważnie ludzie mają na oddzielnej partycji.

Zmieniłem też, bym /home nie było archiwizowane. Możecie wybrać, albo samemu pozmieniać.

----------

## Poe

dzieki za HOW-TO, wrzuce do listy w FAQ.

----------

## aqu

nie chciałbym się wtrącać ale chyba powinno być jeszcze --exclude=/tmp/* --exclude=/var/tmp/*

----------

## C1REX

Dodane. 

Może ktoś potwierdzić, że jest to bezpieczne?

----------

## BeteNoire

To nie jest howto tylko tip. Pełne howto znajduje się pod adresem gentoo wiki podanym w pierwszym poście. Są tam gotowe skrypty backupujące, które można dostosować do własnych potrzeb. A gdyby C1rex przejrzał artykuł, to nie pytałby, czy wyłączenie /tmp i /var/tmp jest bezpieczne.

W swoim skrypcie używam jeszcze opcji --totals i --ignore-failed-read, pierwsza jest czysto informacyjna, a druga się przydaje, gdy z jakichś powodów nie można odczytac pliku (np. pliki uszkodzone po twardych resetach).

----------

## SlashBeast

 *C1REX wrote:*   

> Dodane. 
> 
> Może ktoś potwierdzić, że jest to bezpieczne?

  tak.

----------

## wirus

 *C1REX wrote:*   

> Aby zrobić stage4 najlepiej odpalić inną dystrybucję Linuksa. Ja osobiście mam oddzielną partycję z Ubuntu, jako system awaryjny.
> 
> Równie dobrze może to być jednak LiveCD.
> 
> Wchodzimy na partycję systemową gentoo i 
> ...

 

bez / przed tmp i var

```
--exclude=tmp/* --exclude=var/tmp/*
```

----------

## TBH the lolmaker

 *wirus wrote:*   

> 
> 
> bez / przed tmp i var
> 
> 

 

chyba się mylisz  :Very Happy: 

edit: W takim razie zwaracam honor, myślałem że chodzi o backup z działającego systemu.

----------

## Kurt Steiner

 *TBH the lolmaker wrote:*   

>  *wirus wrote:*   
> 
> bez / przed tmp i var
> 
>  
> ...

 Chyba nie  :Razz:  - C1REX sugeruje wykonanie backupu z innego systemu - jeśli zrobisz go ze "/" to zarchiwizujesz nie te katalogi co chcesz.  :Wink: 

----------

## C1REX

Dokładnie. Poprawna wersja jest bez / na początku. Pierwszy post zmieniony.

----------

## C1REX

BTW: Zrobienie backupu z działającego systemu da dokładnie taki sam efekt?

----------

## 13Homer

 *C1REX wrote:*   

> BTW: Zrobienie backupu z działającego systemu da dokładnie taki sam efekt?

 

Raczej nie, bo będzie Ci backupował także /proc, a tam jest np. zrzut całej pamięci operacyjnej.

----------

## Spaulding

no to 

```
--exclude=proc/* --exclude=dev/*
```

  :Question: 

----------

## SlashBeast

o ile proc i sys mozna sobie olać o tyle nie jestem pewny czy /dev też, przynajmniej za czasów jak używałem pld pamiętam, że na wyłączonym systemie w dev było kilka nodów m.in. null itp. bez tego nie chciał wstać system.

```
jinchuuriki ~ # mkdir /tmp/realroot

jinchuuriki ~ # mount /dev/root /tmp/realroot/ 

jinchuuriki ~ # ls -l /tmp/realroot/dev | wc -l

1470

jinchuuriki ~ # 

```

Jak widzimy ma w dev to i owo, raczej nie pomijałbym tego, ale backupa można zrobić właśnie w ten sposób, zamontowac rootfs w drugim katalogu i zrobić jego backup z pomijaniem tmpów użytkowników, usr/portage i innych.

Arfrever: Ortografia

----------

## Spaulding

to udev tego nie tworzy? a jak wyglada stage3 z portage? tez ma cos w /dev?

----------

## SlashBeast

Zobacz w którym momencie odpala się udev a w którym momencie odpala się init. Tak, stage3 ma w /dev statycznego dev'a.

edit:

Na szybko napisałem, możliwe, że działa

```

#!/bin/sh

test -d /root/backup_dir || mkdir /root/backup_dir

mkdir /tmp/rootfs

mount /dev/root /tmp/rootfs

cd /tmp/rootfs

tar cvjf /root/backup_dir/stage4_`date '+%F_%H-%M-%S'`.tar.bz2 ./* --exclude=./var/tmp/* --exclude=./tmp/* --exclude=./usr/src/* --exclude=./usr/portage --exclude=./root/backup_dir 

cd /root/backup_dir

umount /tmp/rootfs

rmdir /tmp/rootfs

```

Do odpalenia pod działającym gentoo.

edit numer-N-ty:

Teraz skrypt działa.

----------

## BeteNoire

Zapomniałeś o opcji p dla tar (pomijając już fakt, że ten skrypt jest brzydki).

----------

## SlashBeast

 *BeteNoire wrote:*   

> Zapomniałeś o opcji p dla tar (pomijając już fakt, że ten skrypt jest brzydki).

 

Brzydki, prosty jak konstrukcja cepa i co najważniejsze, działa.

Co do opcji p, niby gdzie jej zapomniałem? Ten skrypt tworzy tarballa a nie go wypakowywuje, p jest przełącznikiem do wypakowywania (patrz manual).

----------

## BeteNoire

 *SlashBeast wrote:*   

>  *BeteNoire wrote:*   Zapomniałeś o opcji p dla tar (pomijając już fakt, że ten skrypt jest brzydki). 
> 
> Brzydki, prosty jak konstrukcja cepa i co najważniejsze, działa.

 

Mój też działa, wielokrotnie odtwarzałem backup nim zrobiony, ale nie przyszło mi do głowy, by kombinować z montowaniem /dev/root.

 *SlashBeast wrote:*   

> Co do opcji p, niby gdzie jej zapomniałem? Ten skrypt tworzy tarballa a nie go wypakowywuje, p jest przełącznikiem do wypakowywania (patrz manual).

 

Masz rację. Chociaż w sumie -p nigdy w moim skrypcie w niczym nie przeszkadzało.

----------

## SlashBeast

```
jinchuuriki /tmp # ls -l rootfs/dev | wc -l

1470

jinchuuriki /tmp # ls -l /dev | wc -l

776

```

Jednak gdy montujesz oddzielnie to masz sys i proc pusty a dev oryginalny, taki jak w stage3.

----------

## C1REX

 *SlashBeast wrote:*   

> Zobacz w którym momencie odpala się udev a w którym momencie odpala się init. Tak, stage3 ma w /dev statycznego dev'a.
> 
> edit:
> 
> Na szybko napisałem, możliwe, że działa
> ...

 

Wrzuciłem ten skrypt do /usr/bin/bckmaker

Dałem chmod 777 /usr/bin/bckmaker

Teraz komenda #bckmaker robi mi buckupa.

Zgadza się?

Jak zrobić to w mniej lamerski sposób?

EDIT:

```
C1REX c1rex # bckmaker

mkdir: nie można utworzyć katalogu `/tmp/rootfs': Plik istnieje

mount: /dev/sda1 already mounted or /tmp/rootfs busy

mount: according to mtab, /dev/sda1 is already mounted on /tmp/rootfs

```

Tak ma być?

----------

## SlashBeast

Wszystko masz napisane, /tmp/rootfs istnieje jak i jest podmontowany.

Imho jak dodajesz własne skrypty dodawaj je do /usr/local/bin albo stwórz sobie w /root/bin je i dodaj do zmiennej PATH /root/bin i tam wsadzaj, na każdej szelowni czy stacji roboczej jaką robie zawsze daje by $HOME/bin było w path, wtedy żaden user mi nie truje, że nie wygodnie mu odpala się skrypty.

----------

## C1REX

Tylko ja korzystam z mego kompa.

Zadaję trochę lamerskie pytania, bo nie mam bladego pojęcia o skryptach. Ten jest moim pierwszym, z którym cokolwiek zrobiłem.

Jestem zwykłym userem i bardzo mi się podoba idea łatwego backupu. Za często coś psuję, by obyć się bez tego.

Nie wiem tylko, po co mam wrzucać ten skrypt do home, jak to jest typowo administracyjne narzędzie.

Anyway - ogromne dzięki za ten skrypt.

BTW: Jak odzyskujecie system, to co robicie ze starym?

-formatujecie partycję?

-zwyczajnie kasujecie pliki?

-rozpakowujecie na istniejący system?

----------

## SlashBeast

Zwykle robie backup systemu który potem wywalam i stawiam z działającego backapa a ten co zrobie zachowuje na 'zaś'.

----------

## C1REX

Wyedytowałem pierwszy post. Zerknijcie proszę, czy nie zrobiłem błędu.

Jeszcze raz wielkie dzięki SlashBeast i Damjanek za pomoc.

----------

## lazy_bum

Proponuję do drugiego sposobu dodać również "jak odzyskać system z backupu", skoro ma być maksymalnie proste. (-:

----------

## SlashBeast

Coś się wymyśli, ten skrypt z pierwszego posta napisze troche inaczej by był bardziej friendly ale to już wieczorem.

----------

## C1REX

Ten skrypt jest bardzo friendly IMHO. 

A co do odzyskiwania systemu: chyba jednak odpalenie innego distra -> format -> rozpakowanie backupu nadal pozostaje najlepszą metodą.

Ma ktoś pomysł na coś prostszego? Da się to jakoś zautomatyzować?

Ideałem byłoby, by z działającego gentoo (lub chroota, jeśli gentoo padło kompletnie) dało się wpisacać coś w stylu:

#backup --recovery

i skrypt sam rozpakował backupa + ściągnął najnowszy snapshot portage.

Da się?

BTW: Do skryptu dodałem -p przy mkdir jak doradził Damjanek. Dzięki temu nie ma errorów, że katalog już istnieje.

----------

## SlashBeast

http://slashbeast.eu.org/tmp/stage4.sh wersja 0.2, Napisany na szybko i na szybko również przetestowany, znajde ochotnika do testów?

----------

## C1REX

Przetestowałem pierwszą wersję. 

Właśnie zauważyłem, że --exclude=./usr/src/* 

Po co?

U siebie wywalam ten wpis. Moim zdaniem powinien być opcjonalnie. Dobrze, że miałem .config skopiowany, bo do mego lapka trochę czasu mi zajęło to poustawiać.

No i każdy musi uważać z /mnt, jeśli ma tam duże partycje podmontowane. Ja właśnie sobie zdałem sprawę, że tam są dwie inne dystrybucje podmontowane.

BTW: "doświadczeniom", a nie "doświadczenią. Niby drobiazg, ale razi taki brzydki ort w takim ładnym skrypcie.

Do wersji 0.3 możesz dać plik konfiguracyjny oddzielnie od wykonywalnego.

To jeszcze bardziej ułatwi edycję i zwiększy przejrzystość.

0.4 mogłoby być w overlayu. 0.5 w portage. 1.0 w gałęzi stabilnej : )

----------

## SlashBeast

Poprawione, /usr/src jest olewane bo zajmje zbyt wiele, ale moge dopisac robienia dumpa pliku .config z /usr/src/linux lub konfigra z odpalonego kernela, lub oba.

Co do /mnt to generalnie nie problem, gdy jest mount /dev/root /tmp/rootfs otrzymujemy tylko rootfs, nie wazne, ze np. w /mnt/dropzone mamy podmontowane dropzone a w nim setki plików, w /tmp/rootfs/mnt bedzie katalog dropzone - tak, ale pusty.

żeby to było w portage czy overlayu to brakuje mu dużo... baaardzo dużo.

Wieczorem naucze skrypt montowania dodatkowych partycji w stylu /var /usr /boot i tak dalej.

Myślę też nad robieniem tarballa bez kompresji a potem pakowania go np. przez pbzip2 (ukłon w strone wielu procesorów/rdzeni).

----------

## C1REX

Byłoby super, gdyby nie kasowało configa z kernela. Cała reszta faktycznie sporo czasu zajmuje przy pakowaniu, ale configa szkoda tracić.

----------

## d0b

Więc jak tam jest już nowa wersja skryptu ??  :Smile:  w sumie C1REX podał mi ten link i pomysł aby zrobić backupa za co dzięki, ale generalnie nie bardzo wiem jakie będą tego sutki więc czekam na finalną wersję skryptu od SlashBeast, a tak na marginesie mam pytanie czy ten skrypt robi też backup samego jądra ?? bo mi się wydaje że mojej jajko jest na maxa skaszanione i ciekawi mnie czy jest jakaś opcja aby zostawić wszelkie zainstalowane pakiety, configi etc a wgrać jakoś samo jajko ?? Nie mogę za cholerę sobie poradzić z kilkoma sprawami i już jestem gotów na format i świeży system lecz szkoda mi kurde tego co mam już porobione z gentoo.

----------

## SlashBeast

Sporo brakuje w tym skrypcie a ja mam ostatnio tyle pracy, że w ogóle nie zajmuje się takimi rzeczami jak ten skrypt, może w weekend. Na_razie jako tako to działa.

Co do kernela, przeca masz jego obraz w /boot, mzoesz go wywalić, zrobić na nowo, itd.

Arfrever: Ortografia

----------

## C1REX

Skrypt działa. Robi działające backupy. 

A jak ktoś ma obawy, że coś się może posypać, to można ręcznie to zrobić, jak to podałem w pierwszej części how-to. Jedno polecenie.

----------

## f15091983

Witam

Ten skrypt jest zmodyfikowany o obsługę wielowątkowości, przez co w pełni wykorzysta możliwości wielordzeniowych procesorów.

```

#!/bin/bash

# Backup script for Gentoo Linux

# mkstage4.sh is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation; either version 2 of the License, or

# (at your option) any later version.

#

# mkstage4.sh is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

# GNU General Public License for more details.

#

# Copyright: Reto Glauser aka blinkeye

# Mailto: stage4 at blinkeye dot ch

# Homepage: http://blinkeye.ch

# Forum post: http://forums.gentoo.org/viewtopic-t-312817.html

# Date: 2005-11-14

version=v3.6

basename=`basename $0`

find=/usr/bin/find

tar=/bin/tar

# these are the commands we actually need for the backup

command_list=(cut date echo $find grep hostname mount sh split $tar umount uname which)

# verify that each command we use exists. if one can't be found use $PATH and make a suggestion if possible.

for command in ${command_list[@]}; do

        if [ ! -x "`which $command 2>&1`" ]; then

                echo -e "\nERROR: $command not found! "

                base=`basename $command`

                if [ "`which $base 2>&1 | grep "no \`basename $command\` in"`" != "" ]; then

                        echo -e "ERROR: $base is not in your \$PATH."

                fi

                exit -1

        fi

done

help="\nUsage:\n\nsh `basename $0` [[-v]|[--verbose]] [[-s]|[--split]] \n\nTo run the script NOT in verbose mode comes in handy if you want to see only the errors that occur during the backup.\n"

# Defaults to creating one tarball

tar_output="--file"

# split command

split_options="--suffix-length=1 --bytes=685m"

# options for the tar command

tarOptions=" --preserve-permissions --create --absolute-names --totals --ignore-failed-read"

# where to put the stage4

stage4Location=/tmp/backups/stage4

# name prefix

stage4prefix=`hostname`-stage4-`date +\%Y.\%m.\%d`

# patterns which should not be backed up (like iso files).

# example: default_exclude_pattern="*.iso *.divx"

# These pattern count only for files NOT listed in the $custom_include_list.

default_exclude_pattern=""

# these files/directories are always excluded. don't add trailing slashes.

# don't touch it unless you know what you are doing!

# /var/db and /var/cache/edb are intentionally added here. they are listed

# in $default_include_folders

default_exclude_list="

/dev

/lost+found

/mnt

/proc

/sys

/tmp

/usr/portage

/usr/src

/var/log

/var/tmp

/var/db

/var/cache/edb

/varia

$stage4Location

`echo $CCACHE_DIR`"

# files/devices/folders, which need to be backed up (preserve folder structure).

# don't touch it unless you know what you are doing! no recursive backup of folders.

# use $default_include_folders instead.

default_include_files="

/dev/null

/dev/console

/home

/mnt

`find /mnt -name .keep`

/proc

/sys

/tmp

/usr/portage

/usr/src

/var/log/emerge.log

/usr/src/linux-`uname -r`/.config"

# folders, which need to be backed up recursively on every backup.

# don't touch it unless you know what you are doing! the reason for this

# variable is that some users add /var to the $default_exclude_list. here

# we ensure that portage's memory is backed up in any case.

default_include_folders="

/var/db"

# IMPORTANT: A minimal backup will EXCLUDE files/folders listed here. A custom backup will

# include/exclude these files/folders depening on your answer.

custom_include_list="

/home/*

/usr/src/*

/usr/portage/

/mnt/*"

# add files/folders here which are subfolders of a folder listed in $custom_include_list which should NOT

# be backed up. eg.

#custom_exclude_list="/home/foo/mp3 /home/foo/downloads /home/foo/.*"

custom_exclude_list=""

# Only files/folders within the $custom_include_list are checked against these patterns

# custom_exclude_pattern="*.mp3 *.iso"

custom_exclude_pattern=""

# the find_command

find_command="$find /*"

# don't backup anything which matches pattern listed in $default_exclude_pattern

for pattern in $default_exclude_pattern; do

        find_command="$find_command -not -name $pattern"

done

# assemble the find_command

function find_files()

{

        for folder in $default_exclude_list; do

                find_command="$find_command -path $folder -prune -o"

        done

        find_command="$find_command -print"

        for i in $default_include_files; do

                find_command="echo $i; $find_command"

        done

        for i in $default_include_folders; do

                if [ -d $i ]; then

                        find_command="$find $i; $find_command"

                else

                        find_command="echo $i; $find_command"

                fi

        done

}

# check the exclude/include variables for non-existing entries

function verify()

{

        for i in $1; do

                if [ ! -e "`echo "$i" | cut -d'=' -f2 | cut -d'*' -f1`" -a "$i" != "/lost+found" -a "$i" != "$stage4Location" ]; then

                        echo "ERROR: `echo "$i" | cut -d'=' -f2` not found! Check your "$2

                        exit 0

                fi

        done

}

# check input parameters

while [ $1 ]; do

        case  $1 in

        "-h" | "--help")

                echo -e $help

                exit 0;;

        "-v" | "--verbose")

                verbose=$1;;

        "-s" | "--split")

                tar_output="--split";;

        "");;

        *)

                echo -e $help

                exit 0;;

        esac

        shift

done

echo ""

# check folder/files listed in $default_exclude_list exist

verify "$default_exclude_list" "\$default_exclude_list"

# check files listed in $default_include_files exist

verify "$default_include_files" "\$default_include_files"

# check folder listed in $default_include_folders exist

verify "$default_include_folders" "\$default_include_folders"

#check folder listed in $custom_include_list exist

verify "$custom_include_list" "\$custom_include_list"

#check folder listed in $custom_exclude_list exist

verify "$custom_exclude_list" "\$custom_exclude_list"

# print out the version

 echo -e "\nBackup script $version"

 echo -e "=================="

# how do you want to backup?

echo -e "\nWhat do you want to do? (Use CONTROL-C to abort)\n

Fast (tar.gz):

 (1) Minimal backup

 (2) Interactive backup

Best (tar.bz2):

 (3) Minimal backup

 (4) Interactive backup

 

 (5) Parallel backup -- (tar.bz2) require 7zip

 \n"

while [ "$option" != '1' -a "$option" != '2' -a "$option" != '3' -a "$option" != '4' -a "$option" != '5' ]; do

        echo -en "Please enter your option: "

        read option

done

case $option in

[1,3])

        stage4Name=$stage4Location/$stage4prefix-minimal.tar;;

[2,4,5])

        stage4Name=$stage4Location/$stage4prefix-custom.tar

        for folder in $custom_include_list; do

                echo -en "\nDo you want to backup" `echo "$folder" | cut -d'=' -f2`"? (y/n) "

                read answer

                while [ "$answer" != 'y' -a "$answer" != 'n' ]; do

                        echo -en "Do you want to backup" `echo "$folder" | cut -d'=' -f2`"? (y/n) "

                        read answer

                done

                if [ "$answer" == 'n' ]; then

                        find_command="$find_command -path $folder -prune -o"

                else

                        custom_find="$find $folder"

                        for i in $custom_exclude_pattern; do

                                custom_find="$custom_find -name $i -o"

                        done

                        for i in $custom_exclude_list; do

                                custom_find="$custom_find -path $i -prune -o"

                        done

                        find_command="$custom_find -print; $find_command"

                fi

        done ;;

esac

# add $custom_include_list to the $default_exclude_list as we assembled

# $custom_find with $custom_include_list already.

default_exclude_list="$default_exclude_list $custom_include_list"

case $option in

[1,2])

        stage4postfix="gz"

        zip="--gzip";;

[3,4])

        stage4postfix="bz2"

        zip="--bzip2";;

[5])

   parallel=1

   stage4postfix="bz2"

   pzip="7z a -si -bd -mmt=on -md=256m -tbzip2";;

esac

# mount boot

echo -e "\n* mounting boot"

mount /boot >/dev/null 2>&1

# find the files/folder to backup

find_files

find_command="($find_command)"

# create the final command

if [ "$parallel" == "1" ]; then

   tar_command=" $find_command | $tar $tarOptions $verbose --no-recursion -T - | $pzip $stage4Name.$stage4postfix"

else

if [ "$tar_output" == "--file" ]; then

        tar_command="$find_command | $tar $zip $tarOptions $verbose --file $stage4Name.$stage4postfix --no-recursion -T -"

else

        tar_command="$find_command | $tar $zip $tarOptions $verbose --no-recursion -T - | split $split_options - "$stage4Name.$stage4postfix"_"

fi

if [ "$verbose" ]; then

        echo -e "\n* creating the stage4 in $stage4Location with the following command:\n\n"$tar_command

fi

fi

# everything is set, are you sure to continue?

echo -ne "\nDo you want to continue? (y/n) "

read answer

while [ "$answer" != 'y' ] && [ "$answer" != 'n' ]; do

        echo -ne "Do you want to continue? (y/n) "

        read answer

done

if [ "$answer" == 'y' ]; then

        # check whether the file already exists.

        if [ "$tar_output" == "--split" ]; then

                overwrite="`ls "$stage4Name.$stage4postfix"_* 2>&1 | grep -v 'No such file'`"

        else

                overwrite="$stage4Name.$stage4postfix"

        fi

        if [ -a "`echo "$overwrite" | grep "$overwrite" -m1`" ]; then

                echo -en "\nDo you want to overwrite $overwrite? (y/n) "

                read answer

                while [ "$answer" != 'y' ] && [ "$answer" != 'n' ]; do

                        echo -en "Do you want to overwrite $overwrite? (y/n) "

                        read answer

                done

                if [ "$answer" == 'n' ]; then

                        echo -e "\n* There's nothing to do ... Exiting"

                        exit 0;

                fi

        fi

        # if necessary, create the stage4Location

        if [ ! -d "$stage4Location" ] ; then

                echo "* creating directory $stage4Location"

                mkdir -p $stage4Location

        fi

        echo -e "\n* Please wait while the stage4 is being created.\n"

        # do the backup.

        sh -c "$tar_command"

        # finished, clean up

        echo -e "\n* stage4 is done"

        echo "* umounting boot"

        umount /boot >/dev/null 2>&1

        # Integrity check

   echo -e "* Checking integrity"

        if [ "$zip" == "--gzip" ]; then

                zip="gzip"

        else 

                zip="bzip2"

        fi

        if [ "$tar_output" == "--split" ]; then

                if [ "`cat "$stage4Name.$stage4postfix"_*"" | $zip --test 2>&1`" != "" ]; then

                        echo -e "* Integrity check failed. Re-run the script and check your hardware."

                        exit -1

                fi

        else

                if [ "`$zip --test  $stage4Name.$stage4postfix 2>&1`" != "" ]; then

                        echo -e "* Integrity check failed. Re-run the script and check your hardware."

                        exit -1

                fi

        fi

        # everything went smoothly"

        echo -e "* Everything went smoothly. You successfully created a stage4."

else

        echo -e "\n* There's nothing to do ... Exiting"

fi

```

Ten skrypt został przystosowany do moich potrzeb, i każdy powinien go zmodyfikować do własnego użytku.

----------

## grahamm

Mam pytanie odnośnie skryptu z pierwszej strony. Powiedzmy ze mam gentoo skompilowane dla i686 zainstalowane na partycji xfs. Czy moge zrobic backup tego systemu i rozpakować archiwum na innym kompie? Czy to nie bedzie sie gryzlo?

----------

## BeteNoire

Jeśli sprzęt, układ partycji i ich rodzaj jest taki sam to możesz klonować bez obaw. Jeśli sprzęt jest inny, ale architektura procka ta sama, to musisz się tylko chootnąć do tego rozpakowanego i przekompilować kernel pod nowe urządzenia.

----------

## grahamm

Jeszcze takie szybkie pytanko:

Co grozi rozpakowaniem takiego stage'a na inny uklad partycji?

----------

## BeteNoire

Coś jakby lodówka w łazience i pralka w salonie  :Wink: 

Nawet jeśli zamienisz coś kolejnością to musisz uważać, by dobrze podmontować na czas rozpakowywania - wtedy nie będzie problemu.

No i pamiętać o zmianie wpisów konfiguracji bootloadera i fstab.

----------

## C1REX

Sam tak robiłem. Niczym nie grozi. Ma się gentoo zainstalowane na nowym kompie w 5 minut. 

Czasochłonna jest tylko edycja wszystkich potrzebnych plików konfiguracyjnych i ewentualnie rekompilacja jaja.

Jeśli na nowym kompie jest więcej partycji, niż same /, to trzeba je podmontować __przed__ rozpakowaniem stage'a.

EDIT: Problem może się pojawić, jak ma się zupełnie inny procek. Wtedy w najlepszym wypadku i tak trzeba przekompilować cały system pod nowego procka. W najgorszym wcale taki system nie będzie działał.

----------

## pabliszer

Witam to mój pierwszy post na tym forum i mam kilka pytań co do powyższego skryptu.

Po pierwsze jakie katalogi bądź pliki musze skopiować aby móc w pełni przywrócić system ( zaznaczam ze dopiero zaczynam przygode z Gentoo ).

Czy po uszkodzeniu systemu przywrócenie skopiowanych plików spowoduje powrót systemu do działania czy trzeba cos jescze robić. Czy są jeszcze jakieś inne narzędzia do robienia kopii (ale które można użyć w skryptach)?Prosiłbym jeszcze o odświerzenie linków bo nie działają. 

I jeszcze pytanie co do opcji --exclude= co ona powoduje (proszę o wyjaśnienie ) ?

----------

## Bastian82

W pierwszym poscie masz w tym skrypcie excludowane katalogi za pomocą --EXCLUDE= , tak więc zeby system wstał (nie wdając sie juz w szczegóły) musisz backupować wszystkie katalogi prócz tych excludowanych. Jak sie już pewnie domyślasz, opcja ta wyłącza z tarballa te katalogi bo nie potrzebne do backupu. Jeżeli nie zmienia Ci się w zaden sposób wielkość partycji to nie trzeba nic więcej robić po wgraniu systemu z backupu. 

Jakie jeszcze narzędzia? Ja to wole niżej - dd .

----------

