Автор Гілка: Резервна копія одного робочого дня  (Прочитано 4361 раз)

Відсутній Art7PK

  • Новачок
  • *
  • дописів: 22
  • Карма: +0/-0
  • I Love Linux!
Адміни знають, що таке dump, але я повторюся. Його використовують для створення резервних копій таким чином:
дамп першого рівня робить образ всієї системи
дамп другого рівня робить аpрхів з клвстерів, що змінилися за декаду
дамп третього рівня за день
і дамп четвертото тих, що змінилися за годину.
Таким чином, файли копій системи виходять невеличкі а відновити систему можна за будь яку взяту попередню годину. Але, IMHO, зберігати образи в кластерах неефективно, бо переносити їх з вбитого HDD 4,3GB на сучасні 200GB диски смішно, то і утіліту damp вже не включають в дистр Slackware. Замість неї я створив скрипт який створює архів у форматі tar.bz2, і який можна потім розархівувати на будьякій файловій системі. Він архівує файли що змінилися за добу. Отриманий архів буде знаходитися в теці /tmp. В скрипті можна змінити до відповідних значень ключі у команді  find і архівувами зміни відповідного рівня. В срипт можна додати фільтр списку файлів, щоб не архівувати скажімо базу даних, бо там є свої інструменти.
#!/bin/sh
#!/bin/sh
# PoltawerKozak linux , 2006.05.08
# $Id BackUpL4-1.0.0.sh $
TMP=/tmp
DirListFiles=$TMP/ListFiles

if [ -d $DirListFiles ]; then
   rm -fr $DirListFiles
fi

if [ -f $TMP/BackUpL4-`date +%F`.tar* ]; then
   rm -fr $TMP/BackUpL4-`date +%F`.tar*
fi

mkdir -p $DirListFiles
cd $DirListFiles
ListFile=`mktemp -p $DirListFiles`

find / -type f -cmin +5 -cmin -1440 >> "$ListFile"
find / -type l -cmin +5 -cmin -1440 >> "$ListFile"

split -l 200 "$ListFile" SplitList.

cd $TMP
rm "$ListFile"

touch BackUpL4-`date +%F`.tar
for i in "$DirListFiles"/SplitList.* ; do
        tar -rvfBackUpL4-`date +%F`.tar `cat "$i" | tr "\012" " "` ;
 done

rm -fR $DirListFiles

 bzip2 -zf9 BackUpL4-`date +%F`.tar

 clear
echo " "
echo "Created successful BackUp level 4"
echo " "
« Змінено: 2007-10-27 01:56:01 від Tsherwonozawodske »

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Резервна копія одного робочого дня
« Відповідей #1 : 2007-11-19 19:54:37 »
питання: що краще, заархівувати весь /home в tar.gz чи кожен окремий файл в tar.gz?
другий спосіб довший, але зручніше потім  отримати доступ до конкретного файлу. хочу зробити щось на кшталт TimeMAchine в маках, тільки без зайвих непотрібних фінтіфлюшок, а саме:
1. дамп першого рівня — бекапимо весь /home/myaccount/ (вручну?)
2. далі ставимо в крон скрипт, який щогодини буде бекапити всі змінені файли (з використанням вашого скрипта)

Таким чином, якщо я пишу курсову чи дисер, то буду мати купу версій цього документу щогодини! Залишилось придумати, як в наутілусі прикрутити в контекстне меню пункт «Доступні бекапи» і список, що випадає за датою-часом.

я от думаю, потрібно при цьому tar.gz чи краще не архівувати, а купити вінчестер побільше?
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Резервна копія одного робочого дня
« Відповідей #2 : 2007-11-19 20:15:27 »
хммм, є ще отака штука:
http://code.google.com/p/flyback/

воно, як я розумію, робить щоденні бекапи, при чому кожен бекап — це окрема директорія типу $date/home/myaccount/, у якій незмінені з часу останнього бекапу файли копіюються твердими посиланнями (hard links). Не впевнений, що це ліпший солюшн від того, що я написав (зберігати кілька копій кожного файлу у тій самій директорії. Однак, якщо вінчестер бекапу не безрозмірний, то це плюс, бо можна видаляти бекапи, які не потрібні.
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Михайло Даниленко(Guest)

  • Гість
Re: Резервна копія одного робочого дня
« Відповідей #3 : 2007-11-19 21:56:51 »
А для чого один файл класти в тар?
Тоді вже gzip <файл> - vim, наприклад, підтримує пряме редагування таких файлів, не кажучи вже про перегляд.

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Резервна копія одного робочого дня
« Відповідей #4 : 2007-11-19 22:13:40 »
а, ну так, згідний  :)
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Михайло Даниленко(Guest)

  • Гість
Re: Резервна копія одного робочого дня
« Відповідей #5 : 2007-11-23 08:41:24 »
Сьогодні трохи розбирався з таром, ось що в мене вийшло:

#* mkback target_name targets - creates current backup of targets with prefix target_name
#% Does full backup once in a month
#% Uses variable $backdir as folder name to store backups and snapshots
mkback () {
      local name="${1:?}" ;  shift
      tar   --create \
            --bzip2 \
            --file="${backdir}/${name}-$(date +%Y%m%d_%H%M%S).tar.bz2" \
            --listed-incremental="${backdir}/${name}-$(date +%Y%m).snar" \
            "${@}"
}

pushd "${rootdir}"
yabb_stop

mkback yabb_engine lib cgi-bin/yabb
mkback yabb_data_mesg var/*/Messages
mkback yabb_data_other var/*/{Variables,Boards,Members}
mkback yabb_pubdata_attach htdocs/yabbfiles/Attachments
mkback yabb_pubdata_other htdocs/yabbfiles/{Avatars,Smilies,Buttons,Templates,ModImages,*.js}

yabb_start
popd


цей приклад створює кожен місяць повний бекап, і коли треба - частковий.

Щоправда, щоб розпакувати його до якогось конкретного стану, доведеться розпаковувати усі створені до того стану (з початку місяця) файли - тобото знадобиться щось на зразок (не тестовано!):

#* extback target_name ext_to_date [files] - extracts files from all archives before date
#% ext_to_date is eight-digit number, specifying maximal date of month to extract
#% ext_to_date have format ddHHMMSS. It is not checked for correctness, so you
#% can place 23999999 here to extract all archives before 24th of current month.
extback () {
      local name="${1:?}-$(date +%Y%m)" date="${2:?}" file cdate ;  shift 2
      for file in "${backdir}/${name}"*.tar.bz2 ; do

            cdate="${file##*/${name}}"
            cdate="${cdate%%.*}"
            cdate="${cdate//[^0-9]}"
            if (( cdate > date )) ; then
                  return
            fi

            tar   --extract \
                  --bzip2 \
                  --file="${file}" \
                  --listed-incremental=/dev/null \
                  "${@}"
      done
}


Більш докладно про роботу тару з цими опціями - тут:
http://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html
« Змінено: 2007-11-23 08:55:34 від ISBear »