Здравствуйте. Живу в Москве. Учусь в одном из колледжей по компьютерной тематике.
Возник вопрос такого характера. Я использую утилиту fsarchiver для мои маленьких backup,но она не умеет делать инкрементальный бэкап. Как сделать на основе fsarchiver подобие инкрементальныx бэкап? Сейчас я использую в cron такой набор команд:
md5deep -r /etc/* > etc.md5 - определяем суммы для все файлов в etc.
md5sum --quiet -c etc.md5 > etc.check - находим различия в суммах и записываем в файл.
потом я нахожу новые суммы для этих файлов и пытаюсь стравить это в sed, но не получается
Конструкция sed "/$b/$c/g" etc.md5 призвана заменить значение в $b на значение в $c, но не работает в моём варианте.
Imho, собака порылась в том как 'раскрываются' эти переменные и возможно в зарезервированных символах в этих переменных.
Или в sed нельзя так перебрать и заменить все значения? А жаль [Ответ]
Hip-Hop 05:25 20.03.2011
Ну, интуитивно мне казалось чё такая работа sed возможна, но с другой стороны возможно и невозможна
Наверное лучше будет брать из этих переменных по строке и стравливать sed'y. Оформив это в цикле for.
Я изучаю linux всего второй месяц. Не корите меня сильно [Ответ]
Hip-Hop 18:38 20.03.2011
Катя., Я не очень понимаю в чем дело.
смотри. я использую такую конструкцию
while read line
do
sed -e "/$line/d" etc.md5 > tmp.md5
done < tmp
Я читаю из файла по строке и на каждой итерации в $line новая строка? Но почему-то не работает.
[Ответ]
Hip-Hop 15:27 21.03.2011
Xelas, задача простая. из файла tmp нужно прочитать все строки и удалить их из etc.md5. На выходе мы должны получить файл без строк в tmp.
Цикл в моем посте записывает в файл только последнюю итерацию. Оно и понятно, но надо чтобы все строки из tmp были убраны из etc.md5. Есть и более простой способ. Просто пересчитывать контрольную сумму каждый раз после её нарушения, но эт как-то плохо
if [ -s $back_dir/etc.check ]
then $back_prog savedir -o -A -d --exclude=$excl $back_dir/incremental/$increm.$today.fsa /etc/ && rm $back_dir/etc.check && md5deep -r /etc/* > $back_dir/etc.md5
else echo "Стоп"
fi
А в переменной $excl должно быть все кроме того чья сумма изменилась перед очередной проверкой. [Ответ]
Hip-Hop 15:59 22.03.2011
Xelas, вопрос решается очень просто Что б цикл работал правильно (как хотелось бы). - Удалял строки из tmp в etc.md5. Нужно добавить ключик -i к sed. Тогда все операции будут производиться непосредственно над файлом. И мы не получим каждый раз перезаписанный файл и последнюю итерацию в этоге.
вот так:
while read line
do
sed -e -i "/$line/d" etc.md5
done < tmp
Но так же можно включить в цикл проверку и управление циклом [Ответ]
Hip-Hop 16:43 22.03.2011
В самом простом варианте такая работа будет выглядеть так:
md5deep -r /etc/* > etc.md5 # считает контрольные суммы. Один раз
md5sum --quiet -c etc.md5 > etc.check # Проверяет их.
if [ -s etc.check ] # если он не равен нулю.
then
a=`awk -F":" '{print $1}' etc.check` # файлы которые претерпели изменения.
b=`grep "$a" etc.md5 | awk -F" " '{ print $1 }'`# старые суммы этих файлов.
echo $b > tmp # Старые суммы
while read line
do
sed -e -i "/$line/d" etc.md5
done < tmp
md5sum $a > tmp # Новые суммы.
cat tmp >> etc.md5
rm etc.check
else echo "Суммы не изменились"
fi.
Как-то так Но надо ещё учесть поведение при УДАЛЕНИИ файлов и при ДОБАВЛЕНИИ в etc.
И написать скрип для восстановления. И что если это будет не только etc?
[Ответ]
Hip-Hop 17:25 22.03.2011
mishel13, VitohA, я в знаком с linux всего три месяца (до этого был заядлый виндос ), но уже почувствовал его поистине безграничные возможности.
этот замечательный цикл с чтением строк можно использовать в куче задач.
ещё пример:
if [ -f /etc/firewall/black_url ] ;
then
cat < /etc/firewall/black_url | sed 's/^[ \t]*//;s/[ \t]*$//;/./!d' > /tmp/firewall.tmp # удаляем все пробелы, табуляцию и пустые строки
rm /etc/firewall/black_url
mv /tmp/firewall.tmp /etc/firewall/black_url
cat /etc/firewall/black_url | while read line
do
$IPT -A INPUT -m string --string "$line" --algo kmp --to 65535 -j DROP
done
fi
используем iptables для запрещения доступа к сайтам по блэк-листу [Ответ]
bdot 20:40 22.03.2011
Судя по всему тема потертая (подозреваю что здесь жутко глумились).
По существу: используй rdiff-backup и не заморачивайся всякими циклами. KISS
[Ответ]
Hip-Hop 22:02 22.03.2011
Сообщение от bdot:
Судя по всему тема потертая (подозреваю что здесь жутко глумились).
Да, тут глумились всякие тролли. Которые не смогли внести ни капли полезного в топик.
Сообщение от bdot:
По существу: используй rdiff-backup и не заморачивайся всякими циклами. KISS
Это оффтопик Да, я знаю про tar и про rsync. Знаю про drbd о_О и т.д. Но вопрос в решении задачи топика. [Ответ]