Commit 1db5a072 authored by Vitaly Lipatov's avatar Vitaly Lipatov

gluster: semi rewrite grf

parent cc92673a
......@@ -13,14 +13,35 @@ get_bricks()
gluster volume info $GVOLUME | grep Brick"[0-9]" | sed -e "s|Brick[0-9]: ||g"
}
if [ "$1" = "--remove" ] ; then
set_host_path()
{
host="$(echo "$@" | sed -e "s|:.*||g")"
path="$(echo "$@" | sed -e "s|.*:||g")"
echo
echo "$host - $path"
}
if [ "$1" = "--allremove" ] || [ "$1" = "--removeNO" ] ; then
remove="$1"
shift
fi
if [ "$1" = "--restore" ] ; then
restore="$1"
shift
fi
WORKDIR=~/grf
mkdir -p $WORKDIR
sfile="$1"
[ -n "$sfile" ] || exit
md5sum "$sfile"
stat "$sfile"
# hack
[ -L "$sfile" ] && FLAGSYMLINK=1
case "$sfile" in
/var/ftp/pvt/*)
......@@ -39,28 +60,91 @@ case "$sfile" in
fatal "Unknown place $sfile"
esac;
# hack
file="$(echo "$sfile" | sed -e "s|$FTPROOT||g")"
for i in $(get_bricks) ; do
host=$(echo $i | sed -e "s|:.*||g")
path=$(echo $i | sed -e "s|.*:||g")
LISTBRICKS="$(get_bricks)"
if [ -z "$restore$remove" ] ; then
for i in $LISTBRICKS ; do
set_host_path "$i"
echo
echo $host - $path
# FIXME: если каталог не смонтировал, df покажет информацию о корне
ssh $host df $path
#ssh $host df $path
# если каталог, показываем также информацию о самом каталоге
[ -d "$sfile" ] && ssh $host ls -ld $path$file
# показываем информацию о файле или содержимом каталога
if ssh $host ls -l $path$file ; then
ssh $host md5sum $path$file
echo "$file" | grep -q rpm && ssh $host epm checkpkg $path$file
if [ ! -L "$sfile" ] ; then
ssh $host md5sum $path$file
echo "$file" | grep -q rpm && ssh $host epm checkpkg $path$file
else
echo "skip md5, it is link"
fi
fi
# удаляем локальные размещения
if [ "$remove" = "--remove" ] ; then
ssh $host rm $path$file
fi
done
fi
if [ "$remove" = "--allremove" ] ; then
for i in $LISTBRICKS ; do
set_host_path "$i"
# удаляем локальные размещения
# пустых файлов
ssh $host test -s "$path$file" || ssh $host rm "$path$file"
done
fi
OLDFILE=
if [ "$restore" = "--restore" ] ; then
COUNT=1
rm -f $WORKDIR/*
for i in $LISTBRICKS ; do
set_host_path "$i"
FD=$(ssh $host stat -c "%z" $path$file)
echo $FD
if [ -n "$FD" ] ; then
touch -d "$FD" "$WORKDIR/$host-$COUNT"
if [ -z "$OLDFILE" ] || [ "$OLDFILE" -nt "$WORKDIR/$host-$COUNT" ] ; then
if ssh $host test -s "$path$file" ; then
OLDFILE="$WORKDIR/$host-$COUNT"
echo "Select OLDFILE:$OLDFILE"
fi
fi
fi
# группируем одинаковые (md5sum файлы) при условии одинаковых дат
# из файлов с разными датами оставляем файлы старой даты
# из файлов разных размеров оставляем файлы большего размера
# желательно, чтобы файлов было два и больше
# после выбора правильных экземпляров надо произвести контроль данных
# исходный файл может иметь ошибку Ошибка ввода/вывода
# при этом 2 экземпляра лежащих файлов верны. помогает удаление одного из них
# ещё бывает, что файл — символическая ссылка, а где-то создан нулевой файл (права 1000)
# надо сверять каталоги, чтобы было одинаковое содержимое у пар?
COUNT=$(($COUNT+1))
done
ls -l $WORKDIR
echo "OLD: $OLDFILE"
COUNT=1
for i in $LISTBRICKS ; do
set_host_path "$i"
# Удаляем всё, кроме OLDFILE
if ! [ "$OLDFILE" = "$WORKDIR/$host-$COUNT" ] ; then
ssh $host rm -fv $path$file
fi
# нулевые с правами 10000 уберём по-другому
#if [ -n "$FLAGSYMLINK" ] ; then
# ssh $host test -L $path$file || ssh $host rm -v $path$file
#fi
COUNT=$(($COUNT+1))
done
fi
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment