LINUX.ORG.RU
решено ФорумAdmin

Где косяк?

 ,


0

1

Значит имеется на серваке поднятая и настроеная NFS. Каждый день в 3 ночи делается по крону бэкап файлов в зашареную по NFS директорию.

Задача клиента - вытянуть файло с сервера в нужную директорию, сверить md5-суммы, убраться после себя.

Кусок кода:

#!/bin/sh
until [ "$diff '/tmp/md5sum_orig.txt' '/tmp/md5sum_copy.txt'" = "" ]
do
cd /mnt/nfs/backup/wrk/ && md5sum * > /tmp/md5sum_orig.txt
mkdir /mnt/work/backup/files/tmp/
cp * /mnt/work/backup/files/tmp/
cd /mnt/work/backup/files/tmp/ && md5sum * > /tmp/md5sum_copy.txt
done

Уходит в бесконечный цикл с перезаливом архивов.

Для таких извращенцев типа как я готовый, рабочий скрипт:

#!/bin/sh
cd '/mnt/nfs/backup/wrk'
if [ -n "$(ls)" ]
then mkdir '/mnt/work/backup/files/tmp/'
until `diff '/tmp/md5sum_orig.txt' '/tmp/md5sum_copy.txt' 2> /dev/null`
do
cd '/mnt/nfs/backup/wrk/' && md5sum * > '/tmp/md5sum_orig.txt'
cp * '/mnt/work/backup/files/tmp/'
cd '/mnt/work/backup/files/tmp/' && md5sum * > '/tmp/md5sum_copy.txt'
done
cd '/mnt/work/backup/files/tmp/'
mv * ../
rm -rf '/mnt/work/backup/files/tmp/'
rm /mnt/nfs/backup/wrk/*
rm /tmp/md5sum_*
else exit 0
fi
★★★★★

Последнее исправление: leg0las (всего исправлений: 4)

Наверно потому, что константная строка никогда не будет нулевой длины.

GotF ★★★★★
()

$diff

$ убери.

Deleted
()

Где косяк?

Ты скурил.

anonymous
()
- until [ "$diff '/tmp/md5sum_orig.txt' '/tmp/md5sum_copy.txt'" = "" ]
+ until $diff '/tmp/md5sum_orig.txt' '/tmp/md5sum_copy.txt'
GotF ★★★★★
()
Ответ на: комментарий от leg0las

Тогда подозреваю что может быть еще бок с скобками. Попробуйте или в двойные, или вовсе без них

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

У diff есть код возврата, зависящий от наличия разницы между файлами. Для полного просветления прочти описание «until» в man bash.

GotF ★★★★★
()

тебе нужен только один файл с контрольной суммой, дальше надо делать
md5sum -c checksumfile

zolden ★★★★★
()

Может лучше rsync'ом?

Deleted
()
Ответ на: комментарий от GotF

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

leg0las ★★★★★
() автор топика
Ответ на: комментарий от zolden
# ls -la /tmp/ | grep md5
-rw-r--r--  1 leg0las leg0las 345 июня  12 12:49 md5sum_copy.txt
-rw-r--r--  1 leg0las leg0las 345 июня  12 12:49 md5sum_orig.txt
# cat /tmp/md5sum_orig.txt 
bf30982de8107f00b3a02f489c6dbc2f  backup_files_20120612_1233.tar.bz2
bf30982de8107f00b3a02f489c6dbc2f  backup_files_20120612_1235.tar.bz2
c5ec23e5aa604c3cbf0f4041b70a7915  backup_files_20120612_1247.tar.bz2
leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

md5sum * > md5sum_orig.txt
после копирования
md5sum -c md5sum_orig.txt && echo «Checksum is ok» || echo «Try again»

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

А ларчик просто открывался:

until `diff '/tmp/md5sum_orig.txt' '/tmp/md5sum_copy.txt'`
leg0las ★★★★★
() автор топика
Ответ на: комментарий от dreamer

Я хочу свой велосипедистый велосипед, с блекджеком и ДЛП.

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

Поделюсь своим скриптом.

#!/bin/sh

admin_mail="support@**********.ru"
sn="autobackup"
backupdir="/home/serge/backups"
backupdir2="/mnt/backup/bk"
dept=5

backupname="$backupdir/`date +%y-%m-%dT%H`.7z"
cd /

vb="VBoxManage"

log()
{
	echo $*
}

log ================= Начало работы ======================
mkdir -p "$backupdir"
mashines="`$vb list vms | sed 's/^"\(.*\)".*$/\1/'`"
log Найдены машины: $mashines
for vm in $mashines
do
	log -n Резервирование $vm
#	snapshots="`$vb snapshot "$vm" list --machinereadable|grep UUID|cut -d= -f2|tr -d \\\" | while read a;do echo "{$a}"; done`"
	snapshots="`$vb showvminfo "$vm"|grep Name: | grep -v "$vm"|sed 's/^.*Name: \(.*\) (.*$/\1/'`"
	for snapshot in $snapshots
	do
		$vb snapshot "$vm" delete "$snapshot" && log Удаление снимка $snapshot завершено || log Не удалось удалить снимок $snapshot
	done
	
	$vb snapshot "$vm" take "$sn" --pause && log Создан новый снимок $sn || log Не могу создать новый снимок $sn
done

files="`$vb list hdds|grep Location|grep -v Snapshot|sed 's/Location:\s*\/\(.*\)$/"\1"/'`"
log Упаковка: $files в $backupname
log `date`
eval 7z a \"$backupname\" $files 
log `date`
log -n Копирование
cp "$backupname" "$backupdir2/" && log Дополнительная копия создана || log Не могу создать дополнительную копию

for bdir in "$backupdir" "$backupdir2"
do
	if [ "`ls -t "$bdir" | wc -l`" -gt $dept ]
	then
		rmfile="$bdir/`ls -t "$bdir" | tail -n 1`"
		rm "$rmfile" && log Старый архив удален: $rmfile || log Не удалось удалить старый архив: $rmfile
	else
		log Удаление старых архивов не требуется
	fi
done

log Завершено

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