LINUX.ORG.RU
ФорумAdmin

Скрипт для бэкапа.

 bash. backup,


3

3

Решил озаботиться проблемой бэкапа рабочей машины. Написал такой вот скриптик:

#!/bin/bash

name=backup.tar.gz  
maindir=/  
backdir=/home/user/backup 
exclude=/home/user/backup/scripts/exclude
cd $backdir
tar -zcvf $name --exclude-from=$exclude $maindir

Файл exclude
/home/user/backup/backup.tar.gz
/proc 
/lost+found
/mnt  
/sys 
/home/user/.local/share/Trash
/home/user/.VirtualBox
/home/user/Downloads
/home/user/Загрузки

Конечно, можно запускать из консоли от рута, но, хочется мне гуевости, вывести ярлычёк на стол. В связи с этим вопрос. Что нужно поправить, чтобы он запускался от root (просил пароль при запуске)?

И заодно покритикуйте, может, ещё какие-либо директории убрать?

★★

Ммм, архив в 2,8 гига, однако - многовато...

nixit ★★
() автор топика

gksudo

Добавь дату в имя файла.

power
()

может, ещё какие-либо директории убрать?

/dev /run (если есть) /tmp /var/tmp

И жми это лучше bzip2

Pinkbyte ★★★★★
()

tar -zcvf

неужели на этом вашем дебиане такой старый tar, что он даже не поддерживает опцию -a?

zolden ★★★★★
()

Имхо, бекапить лучше не по принципе «всё, кроме вот этого», а «вот только это, кроме всего остального». Зачем вам бекапить /usr например? /var? Если в /var базы данных, то для них есть свои хорошие тулзы. Делайте бекап домашнего каталога и /etc с настройками, остальное устанавливается за 20 минут, дебиан же, не генту компилять.

Alve ★★★★★
()
Ответ на: комментарий от zolden

кстати да. я просто к нему еще не привык, а в целом согласен

Pinkbyte ★★★★★
()
Ответ на: комментарий от AITap

Немного подумал, и решил не заморачиваться с гуёвостью, поправил скрипт:

#!/bin/bash

name=backup-`date +%F`.tar.gz  
maindir=/  
backdir=/home/nixit/backup/backups 
exclude=/home/nixit/backup/scripts/exclude

########################### Скриптец #################################################################
clear
echo "\033[37;41m[--------------------------------[Время начала: `date +%F--%H:%M`]--------------------------------]\033[0m"
echo "\033[30;47m[+>-----]\033[0m[`date +%F--%H:%M`] \033[37mНачинаю операцию по спасению.\033[0m"
echo "\033[30;47m[++>----]\033[0m[`date +%F--%H:%M`] \033[37mПерехожу в директорию.\033[0m"
cd $backdir
echo "\033[30;47m[+++>---]\033[0m[`date +%F--%H:%M`] \033[37mВ данный момент куча маленьких обезьянок роются в папках.\033[0m"
echo "\033[30;47m[++++>--]\033[0m[`date +%F--%H:%M`] \033[37mТы же понимаешь, что обезьянкам нужно какое-то время...\033[0m \033[35m"
#Можно использовать параметр -v, чтобы выводить список файлов. Удобно для отладки.
tar -zcf $name --exclude-from=$exclude $maindir
echo "\033[30;47m[+++++>-]\033[0m[`date +%F--%H:%M`] \033[37mОбраз системы [$name] - готов.\033[0m"
echo "\033[30;47m[++++++>]\033[0m[`date +%F--%H:%M`] \033[37mКому-то придется потесниться, ибо папка с бэкапами занимает уже `du -h | grep -o '^.....'`\033[0m"
echo "\033[30;47m[+++++++]\033[0m[`date +%F--%H:%M`] \033[37mВот и всё, блеать!\033[0m"
echo "\033[37;41m[--------------------------------[Время окончания:`date +%F--%H:%M`]--------------------------------]\033[0m"
########################### Скриптец #################################################################

Так оно повеселее будет.

bzip2 - и как это сделать?

-a поддерживает, сейчас попробую. И в чём преимущество этой автокомпресии?

nixit ★★
() автор топика
Ответ на: комментарий от nixit

Я полагаю, что лучше, чтобы в случае чего, не пришлось тратить эти 20 минут...

-х - извлечение же...

nixit ★★
() автор топика
Ответ на: комментарий от nixit

bzip2 - и как это сделать?

Лучше xz, опция -J для tar

du -h | grep -o '^.....'

du -sh . | cut -f1

echo -e «\033[30;47m[+>-----]\033[0m[`date +%F--%H:%M`]


log () {
echo »\033[30;47m[${1}]\033[0m[`date +%F--%H:%M`] \033[37m${2}\033[0m"
}
<...>
log «+>-----» «Начинаю операцию по спасению»
...
AITap ★★★★★
()
Ответ на: комментарий от nixit

Если не бекапить /var и /usr пакеты, я так понимаю, придётся ставить по новой?

nixit ★★
() автор топика
Ответ на: комментарий от AITap

Лучше xz, опция -J для tar

Думаю таки удобнее -a и тогда компрессор будет выбираться в зависимости от расширения в имени архива

zolden ★★★★★
()
Ответ на: комментарий от nixit

man pv, man du
При помощи du сообщаете pv размер архивируемых файлов.
В результате должно получиться: tar ... | pv ... | xz ... > file.txz

AITap ★★★★★
()
Ответ на: комментарий от AITap

Ага, кажется принцип понял. Домой приду, поэкспериментирую. Спасибо.)

Потом, ради интереса выложу, что получилось.

nixit ★★
() автор топика

Зачем резервную копию архивировать tar'ом? Она же не на плёнку идёт. Можно просто rsync'ом на отдельный диск всё что нужно копировать, диск прятать в сейфе.

yvv ★★☆
()
Ответ на: комментарий от AITap

Вроде бы, должно быть как-то так?

tar -jcf - $maindir --exclude-from=$exclude | pv > $name

А что-то не соображу, как сделать, чтобы выводилось имя, проценты?

nixit ★★
() автор топика
Ответ на: комментарий от nixit

1) Уберите -j, если хотите, чтобы считался реальный размер. Сжатие должно происходить после счётчика (т.е. ... | pv ... | xz ... > file)
2) Посчитайте размер при помощи du и укажите его в параметрах pv.

AITap ★★★★★
()
Ответ на: комментарий от AITap

-j - это же сжать используя gzip. Нашел вот такой вариант:

pv -s $(du -sb | grep -o '[0-9]*') > out.tgz

Но, он размер отказывается показывать, отчего-то.

Можно примерчик простенький, как должна выглядеть эта конструкция? не могу сообразить.

nixit ★★
() автор топика
Ответ на: комментарий от nixit

xz - это же параметры для tar? Почему тогда так?..

nixit ★★
() автор топика
Ответ на: комментарий от nixit

-j - это же сжать используя gzip.

bzip2. На вход pv будут поступать сжатые bzip2'м данные, размер которых меньше, чем размер исходных файлов. Ну и как тогда рисовать прогрессбар?

tar c $directory | pv -s $(du -sb $directory | grep -o '[0-9]*') | xz -9c > file.txz


Даже в man есть пример:
              (tar cf - . \
| pv -n -s $(du -sb . | awk '{print $1}') \
| gzip -9 > out.tgz)

AITap ★★★★★
()
Ответ на: комментарий от AITap

Да, перепутал. Дык, не могу никак сообразить, так

tar -jcf - $maindir --exclude-from=$exclude | pv -s $(du -sb . | awk '{print $1}') > $name 
получается совсем ерунда. У него нет размера конечного файла...

nixit ★★
() автор топика
Ответ на: комментарий от nixit

-j

Ещё раз. При использовании -j сам tar сжимает выходные данные при помощи bzip2. Тогда через pv данные проходят уже сжатыми, а ему может быть известен только размер исходных файлов. Т.е. прогрессбар будет врать.

Решение: уберите -j и поставьте компрессор по вкусу в pipe _после_ pv.

AITap ★★★★★
()
Ответ на: комментарий от AITap

Да, для, например, /home работает отлично, а вот для /, проценты не показываются, и время определяется неверно. Но, всё равно, огромное спасибо. Сделаю немного по-другому.

nixit ★★
() автор топика
Ответ на: комментарий от AITap

На основе Вашего примера написал скрипт для бекапа папки с конфигами. Спасибо.) Там время показывается.

nixit ★★
() автор топика
Ответ на: комментарий от micro-chipset

Обязательно, завтра выложу, но, от совершенства он далёк.

nixit ★★
() автор топика
Ответ на: комментарий от micro-chipset
#!/bin/bash
#Необходимо установить pv

name=backup-`date +%F`.tar.bz2  
maindir=/  
backdir=/home/user/backup/backups 
exclude=/home/user/backup/scripts/exclude
log=/home/user/backup/log/backup.log

########################### Скриптец #################################################################
clear
echo "\033[37;41m[--------------------------------[Время начала: `date +%F--%H:%M`]--------------------------------]\033[0m"
echo "`date +%F--%H:%M` начат бэкап, имя файла: $name" >> $log
echo "\033[30;47m[+>-----]\033[0m[`date +%F--%H:%M`] \033[37mНачинаю операцию по спасению.\033[0m"
echo "\033[30;47m[++>----]\033[0m[`date +%F--%H:%M`] \033[37mПерехожу в директорию.\033[0m"
cd $backdir
echo "\033[30;47m[+++>---]\033[0m[`date +%F--%H:%M`] \033[37mВ данный момент куча маленьких обезьянок роются в папках.\033[0m"
echo "\033[30;47m[++++>--]\033[0m[`date +%F--%H:%M`] \033[37mТы же понимаешь, что обезьянкам нужно какое-то время...\033[0m \033[35m"
#Можно использовать параметр -v, чтобы выводить список файлов. Удобно для отладки.
tar -jcf - $maindir --exclude-from=$exclude | pv -ptrb > $name
#tar -jcf $name --exclude-from=$exclude $maindir
echo "\033[30;47m[+++++>-]\033[0m[`date +%F--%H:%M`] \033[37mОбраз системы [$name] - готов.\033[0m"
echo "\033[30;47m[++++++>]\033[0m[`date +%F--%H:%M`] \033[37mКому-то придется потесниться, ибо папка с бэкапами занимает уже `du -sh . | cut -f1`\033[0m"
echo "\033[30;47m[+++++++]\033[0m[`date +%F--%H:%M`] \033[37mВот и всё, блеать!\033[0m"
echo "\033[37;41m[--------------------------------[Время окончания:`date +%F--%H:%M`]--------------------------------]\033[0m"
echo "`date +%F--%H:%M` бэкап завершен" >> $log
########################### Скриптец #################################################################

#Hepl:
#name - название архива
#maindir - дирректория, которую бэкапим (корень)
#backdir - Здесь будет архив
#exclude - файл с исключениями
#log - папка для логирования

Вот, как-то так, есть ещё скрипт, для архивации папки с конфигами, там показывается время:

#!/bin/bash
name=backup-work.`date +%F`.txz
mindir=/home/user/backup/backups/works
bafile=/home/user/WORK
log=/home/user/backup/log/backup.log


clear
echo "\033[37;41m[--------------------------------[Время начала: `date +%F--%H:%M`]--------------------------------]\033[0m"
echo "`date +%F--%H:%M` начат бэкап рабочей папки, имя файла: backup-work.`date +%F`.txz" >> $log
echo "\033[30;47m[+>-----]\033[0m[`date +%F--%H:%M`] \033[37mНачинаю операцию по спасению.\033[0m"
echo "\033[30;47m[++>----]\033[0m[`date +%F--%H:%M`] \033[37mПерехожу в директорию.\033[0m"
cd $mindir
echo "\033[30;47m[+++>---]\033[0m[`date +%F--%H:%M`] \033[37mВ данный момент куча маленьких обезьянок роются в папках.\033[0m"
echo "\033[30;47m[++++>--]\033[0m[`date +%F--%H:%M`] \033[37mОбезьянки сохраняют WORK.\033[0m \033[35m"
tar c $bafile | pv -s $(du -sb $bafile | grep -o '[0-9]*') | xz -9c > $name
echo "\033[30;47m[+++++>-]\033[0m[`date +%F--%H:%M`] \033[37mОбезьянки очень устали.\033[0m"
echo "\033[30;47m[++++++>]\033[0m[`date +%F--%H:%M`] \033[37mКому-то придется потесниться, ибо папка с бэкапами работы занимает уже `du -sh . | cut -f1`\033[0m"
echo "\033[30;47m[+++++++]\033[0m[`date +%F--%H:%M`] \033[37mВот и всё, блеать!\033[0m"
echo "\033[37;41m[--------------------------------[Время окончания:`date +%F--%H:%M`]--------------------------------]\033[0m"
echo "`date +%F--%H:%M` бэкап рабочей папки завершен" >> $log
Авось, кому и сгодится сеё поделие.

nixit ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.