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
()

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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.