Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
etersoft-admin-essentials
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
etersoft-admin-essentials
Commits
c8df964b
Commit
c8df964b
authored
Jul 01, 2016
by
Vitaly Lipatov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gluster/grf: improve
parent
7f4f41f1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
98 additions
and
37 deletions
+98
-37
grf
gluster/grf
+98
-37
No files found.
gluster/grf
View file @
c8df964b
...
@@ -53,10 +53,15 @@ opbrick()
...
@@ -53,10 +53,15 @@ opbrick()
$1
"
$MOUNTDIR
//
$host
/
$path
/
$2
"
$1
"
$MOUNTDIR
//
$host
/
$path
/
$2
"
}
}
fastssh
()
{
ssh
-o
"ControlMaster auto"
-o
"ControlPath ~/tmp/ssh_mux_%h_%p_%r"
-o
"ControlPersist 4h"
"
$@
"
}
sshopbrick
()
sshopbrick
()
{
{
echo
"remote execute: ssh
$host
$1
$path
/
$2
"
>>
$0
.log
echo
"remote execute: ssh
$host
$1
$path
/
$2
"
>>
$0
.log
ssh
$host
$1
$path
/
$2
fastssh
$host
$1
"
$path
/
$2
"
}
}
# TODO: проблемы со snail2
# TODO: проблемы со snail2
...
@@ -84,6 +89,16 @@ if [ "$1" = "--force" ] ; then
...
@@ -84,6 +89,16 @@ if [ "$1" = "--force" ] ; then
shift
shift
fi
fi
if
[
"
$1
"
=
"--mount"
]
;
then
mount
=
"
$1
"
shift
fi
if
[
"
$1
"
=
"--umount"
]
;
then
mount
=
"
$1
"
shift
fi
WORKDIR
=
~/grf
WORKDIR
=
~/grf
mkdir
-p
$WORKDIR
mkdir
-p
$WORKDIR
...
@@ -128,11 +143,17 @@ LISTBRICKS="$(get_bricks)"
...
@@ -128,11 +143,17 @@ LISTBRICKS="$(get_bricks)"
MOUNTDIR
=
~/grf-mount
MOUNTDIR
=
~/grf-mount
# TODO: move before GVOLUME detect
# TODO: move before GVOLUME detect
if
[
"
$
1
"
=
"--umount"
]
;
then
if
[
"
$
mount
"
=
"--umount"
]
;
then
umount_g
umount_g
exit
exit
fi
fi
# TODO: move before GVOLUME detect
if
[
"
$mount
"
=
"--mount"
]
;
then
mount_g
exit
fi
# check and fix path
# check and fix path
if
[
-n
"
$sfile
"
]
;
then
if
[
-n
"
$sfile
"
]
;
then
# select via param?
# select via param?
...
@@ -146,7 +167,7 @@ if [ -n "$sfile" ] ; then
...
@@ -146,7 +167,7 @@ if [ -n "$sfile" ] ; then
if
echo
"
$sfile
"
|
grep
-q
"
\*
"
;
then
if
echo
"
$sfile
"
|
grep
-q
"
\*
"
;
then
sdir
=
"
$(
dirname
"
$sfile
"
)
"
sdir
=
"
$(
dirname
"
$sfile
"
)
"
if
[
-d
"
$sdir
"
]
;
then
if
[
-d
"
$sdir
"
]
;
then
echo
"Work with dir
$sdir
"
echo
"Work with
all files in
dir
$sdir
"
else
else
sdir
=
sdir
=
fi
fi
...
@@ -198,7 +219,7 @@ tr_gfid_to_rpath()
...
@@ -198,7 +219,7 @@ tr_gfid_to_rpath()
get_gfid
()
get_gfid
()
{
{
local
file
=
"
$1
"
local
file
=
"
$1
"
[
-n
"
$host
"
]
||
return
#trusted.gfid=0x9dd12f564daa42ff94e103a4b0fb0899
#trusted.gfid=0x9dd12f564daa42ff94e103a4b0fb0899
# /var/local/eterglust/pub/.glusterfs/9d/d1/9dd12f56-4daa-42ff-94e1-03a4b0fb0899
# /var/local/eterglust/pub/.glusterfs/9d/d1/9dd12f56-4daa-42ff-94e1-03a4b0fb0899
gfid
=
$(
sshopbrick
"getfattr -h -d -m . -e hex"
"
$file
"
|
grep
^trusted.gfid |
sed
-e
"s|trusted.gfid=0x||g"
)
gfid
=
$(
sshopbrick
"getfattr -h -d -m . -e hex"
"
$file
"
|
grep
^trusted.gfid |
sed
-e
"s|trusted.gfid=0x||g"
)
...
@@ -208,6 +229,10 @@ get_gfid()
...
@@ -208,6 +229,10 @@ get_gfid()
fi
fi
}
}
is_nofile
()
{
LANG
=
C
stat
"
$1
"
2>&1 |
grep
-q
"No such file or directory"
}
test_file
()
test_file
()
{
{
...
@@ -224,14 +249,16 @@ if [ -z "$restore" ] ; then
...
@@ -224,14 +249,16 @@ if [ -z "$restore" ] ; then
md5sum
"
$sfile
"
md5sum
"
$sfile
"
fi
fi
FLAGNOFILE
=
FLAGBROKENFILE
=
FLAGBROKENFILE
=
if
!
stat
"
$sfile
"
>
/dev/null
;
then
if
!
stat
"
$sfile
"
>
/dev/null
;
then
sleep
1
sleep
1
stat
"
$sfile
"
>
/dev/null
||
FLAGBROKENFILE
=
1
stat
"
$sfile
"
>
/dev/null 2>/dev/null
||
FLAGBROKENFILE
=
1
is_nofile
"
$sfile
"
&&
FLAGNOFILE
=
1
fi
fi
if
[
-n
"
$restore
"
]
&&
[
-z
"
$FLAGBROKENFILE
"
]
&&
[
-z
"
$force
"
]
;
then
if
[
-n
"
$restore
"
]
&&
[
-z
"
$FLAGBROKENFILE
"
]
&&
[
-z
"
$force
"
]
;
then
PERM
=
$(
stat
-c
"%a"
"
$sfile
"
)
PERM
=
$(
stat
-c
"%a"
"
$sfile
"
2>/dev/null
)
if
[
"
$PERM
"
=
"1000"
]
;
then
if
[
"
$PERM
"
=
"1000"
]
;
then
FLAGBROKENFILE
=
1
FLAGBROKENFILE
=
1
fi
fi
...
@@ -281,14 +308,6 @@ for brick in $LISTBRICKS ; do
...
@@ -281,14 +308,6 @@ for brick in $LISTBRICKS ; do
done
done
fi
fi
if
[
"
$remove
"
=
"--allremove"
]
;
then
for
brick
in
$LISTBRICKS
;
do
set_host_path
"
$brick
"
opbrick
"rm -v"
"
$file
"
gfid
=
$(
get_gfid
"
$file
"
)
[
-n
"
$gfid
"
]
&&
opbrick
"rm -fv"
"
$(
get_pgf_name
$gfid
)
"
done
fi
OLDFILE
=
OLDFILE
=
SELFILE
=
SELFILE
=
...
@@ -297,29 +316,66 @@ SELPATH=
...
@@ -297,29 +316,66 @@ SELPATH=
ISDIR
=
ISDIR
=
[
-n
"
$FORCEDIR
"
]
&&
ISDIR
=
1
[
-n
"
$FORCEDIR
"
]
&&
ISDIR
=
1
[
-d
"
$sfile
"
]
&&
[
!
-L
"
$sfile
"
]
&&
ISDIR
=
1
echo
"
$sfile
"
|
grep
-q
"/$"
&&
ISDIR
=
1
if
[
-n
"
$ISDIR
"
]
;
then
echo
"Handle
$sfile
as a directory"
#[ "$remove" != "--allremove" ] && echo "Skipping" && continue
fi
if
[
-n
"
$ISDIR
"
]
;
then
RMCMD
=
"rmdir -v"
if
[
-n
"
$force
"
]
;
then
RMCMD
=
"rm -rfv"
RMFCMD
=
"rm -rfv"
fi
else
RMCMD
=
"rm -fv"
fi
RMFCMD
=
"rm -fv"
if
[
"
$remove
"
=
"--allremove"
]
;
then
for
brick
in
$LISTBRICKS
;
do
set_host_path
"
$brick
"
opbrick
"
$RMCMD
"
"
$file
"
gfid
=
$(
get_gfid
"
$file
"
)
[
-n
"
$gfid
"
]
&&
opbrick
"
$RMCMD
"
"
$(
get_pgf_name
$gfid
)
"
done
fi
if
[
"
$restore
"
=
"--restore"
]
;
then
if
[
"
$restore
"
=
"--restore"
]
;
then
COUNT
=
1
COUNT
=
1
FILNUM
=
0
FILNUM
=
0
rm
-f
$WORKDIR
/
*
rm
-f
$WORKDIR
/
*
[
-d
"
$sfile
"
]
&&
[
!
-L
"
$sfile
"
]
&&
ISDIR
=
1
for
i
in
$LISTBRICKS
;
do
for
i
in
$LISTBRICKS
;
do
set_host_path
"
$i
"
set_host_path
"
$i
"
# Надо отличать, есть файл или ошибка с ним. Если файла вообще нет, надо удалять всё на томах
# Надо отличать, есть файл или ошибка с ним. Если файла вообще нет, надо удалять всё на томах
FD
=
$(
opbrick
'stat -c %z'
"
$file
"
2>/dev/null
)
FD
=
$(
opbrick
'stat -c %z'
"
$file
"
2>/dev/null
)
echo
"FD:
$FD
"
SPFILE
=
[
"
$(
opbrick
'stat -c %s%a'
"
$file
"
2>/dev/null
)
"
=
"01000"
]
&&
SPFILE
=
"01000"
echo
"
$COUNT
. FD:
$i
$FD
$SPFILE
"
if
[
-n
"
$FD
"
]
;
then
if
[
-n
"
$FD
"
]
;
then
FILNUM
=
$((
$FILNUM
+
1
))
# При force добавляем все файлы, либо только нормальные (пропускаем 01000)
if
[
-n
"
$force
"
]
||
[
-z
"
$SPFILE
"
]
;
then
FILNUM
=
$((
$FILNUM
+
1
))
fi
NUMFILES
=
0
[
-n
"
$ISDIR
"
]
&&
NUMFILES
=
$(
opbrick
"ls -1"
"
$file
"
|
wc
-l
)
# TODO: Если в каталоге что-то есть, хорошо бы из него удалить все 01000 и удалить его, если он станет пустым
# Это решит секрет неудаляемых каталогов.
touch
-d
"
$FD
"
"
$WORKDIR
/
$host
-
$COUNT
"
touch
-d
"
$FD
"
"
$WORKDIR
/
$host
-
$COUNT
"
#if [ -z "$OLDFILE" ] || [ "$OLDFILE" -nt "$WORKDIR/$host-$COUNT" ] || [ "$NUMFILES" != "0" ] ; then
if
[
-z
"
$OLDFILE
"
]
||
[
"
$OLDFILE
"
-nt
"
$WORKDIR
/
$host
-
$COUNT
"
]
;
then
if
[
-z
"
$OLDFILE
"
]
||
[
"
$OLDFILE
"
-nt
"
$WORKDIR
/
$host
-
$COUNT
"
]
;
then
if
opbrick
"test -
L"
"
$file
"
||
opbrick
"test -r
"
"
$file
"
;
then
if
opbrick
"test -
r"
"
$file
"
&&
[
-z
"
$SPFILE
"
]
||
opbrick
"test -L
"
"
$file
"
;
then
# Если ссылка или файл
# Если ссылка или файл
OLDFILE
=
"
$WORKDIR
/
$host
-
$COUNT
"
OLDFILE
=
"
$WORKDIR
/
$host
-
$COUNT
"
SELFILE
=
"
$file
"
SELFILE
=
"
$file
"
SELHOST
=
$host
SELHOST
=
$host
SELPATH
=
$path
SELPATH
=
$path
echo
"Select OLDFILE:
$OLDFILE
(
$file
)"
echo
"Select
ed
OLDFILE:
$OLDFILE
(
$file
)"
fi
fi
fi
fi
fi
fi
...
@@ -338,13 +394,22 @@ if [ "$restore" = "--restore" ] ; then
...
@@ -338,13 +394,22 @@ if [ "$restore" = "--restore" ] ; then
COUNT
=
$((
$COUNT
+
1
))
COUNT
=
$((
$COUNT
+
1
))
done
done
ls
-l
$WORKDIR
#
ls -l $WORKDIR
echo
"FILNUM:
$FILNUM
OLD:
$OLDFILE
"
echo
"FILNUM:
$FILNUM
OLD:
$OLDFILE
"
# Если два оригинала, ничего не удаляем (если нет иных проблем)
# Если два оригинала, ничего не удаляем (если нет иных проблем
и force
)
[
"
$FILNUM
"
-eq
2
]
&&
[
-z
"
$FLAGBROKENFILE
"
]
&&
[
-z
"
$force
"
]
&&
continue
[
"
$FILNUM
"
-eq
2
]
&&
[
-z
"
$FLAGBROKENFILE
"
]
&&
[
-z
"
$force
"
]
&&
echo
"skipping"
&&
continue
if
[
-n
"
$OLDFILE
"
]
;
then
# Если файла нет, но мы нашли потерянный экземпляр (1 шт)
if
[
-n
"
$FLAGNOFILE
"
]
&&
[
-n
"
$OLDFILE
"
]
&&
[
"
$FILNUM
"
-eq
1
]
&&
[
-z
"
$ISDIR
"
]
;
then
echo
"*** Trying to restore file
$SELFILE
from
$SELHOST
..."
TDIR
=
"
$(
dirname
"
$sfile
"
)
"
host
=
$SELHOST
path
=
$SELPATH
opbrick
"cp -p --target-directory=
$TDIR
"
"
$SELFILE
"
echo
"
$sfile
"
>>
grf.redo.list
continue
fi
if
[
-n
"
$OLDFILE
"
]
||
[
"
$FILNUM
"
-eq
0
]
||
[
"
$remove
"
=
"--allremove"
]
;
then
# get best gfid
# get best gfid
# we need host and path vars for get_gfid
# we need host and path vars for get_gfid
...
@@ -352,20 +417,13 @@ if [ "$restore" = "--restore" ] ; then
...
@@ -352,20 +417,13 @@ if [ "$restore" = "--restore" ] ; then
path
=
$SELPATH
path
=
$SELPATH
GENGFID
=
$(
get_gfid
"
$SELFILE
"
)
GENGFID
=
$(
get_gfid
"
$SELFILE
"
)
COUNT
=
1
COUNT
=
1
for
i
in
$LISTBRICKS
;
do
for
i
in
$LISTBRICKS
;
do
set_host_path
"
$i
"
set_host_path
"
$i
"
if
[
-n
"
$ISDIR
"
]
;
then
RMCMD
=
"rmdir -v"
else
RMCMD
=
"rm -fv"
fi
RMFCMD
=
"rm -fv"
# Удаляем всё, кроме OLDFILE
# Удаляем всё, кроме OLDFILE
if
[
!
"
$OLDFILE
"
=
"
$WORKDIR
/
$host
-
$COUNT
"
]
;
then
if
[
!
"
$OLDFILE
"
=
"
$WORKDIR
/
$host
-
$COUNT
"
]
||
[
"
$remove
"
=
"--allremove"
]
;
then
# FIXME: Нельзя удалять, если OLDFILE на неактивном томе
# FIXME: Нельзя удалять, если OLDFILE на неактивном томе
# TODO: обычно нет смысла удалять пару
# TODO: обычно нет смысла удалять пару
# прежде удаляем из .glusterfs
# прежде удаляем из .glusterfs
...
@@ -383,10 +441,11 @@ if [ "$restore" = "--restore" ] ; then
...
@@ -383,10 +441,11 @@ if [ "$restore" = "--restore" ] ; then
[
-n
"
$GENGFID
"
]
&&
opbrick
"
$RMFCMD
"
"
$(
get_pgf_name
$GENGFID
)
"
[
-n
"
$GENGFID
"
]
&&
opbrick
"
$RMFCMD
"
"
$(
get_pgf_name
$GENGFID
)
"
fi
fi
opbrick
"
$RMCMD
"
"
$file
"
dfile
=
$(
echo
"
$file
"
|
sed
-e
"s|/*
$|
|g"
)
opbrick
"
$RMFCMD
"
"
$file
"
opbrick
"
$RMCMD
"
"
$dfile
"
opbrick
"
$RMFCMD
"
"
$dfile
"
echo
"
$
path
/
$file
(
$host
)
"
>>
grf.removed.list
echo
"
$
RMCMD
/
$RMFCMD
$host
:
$path
/
$dfile
"
>>
grf.removed.list
fi
fi
# нулевые с правами 10000 уберём по-другому
# нулевые с правами 10000 уберём по-другому
...
@@ -396,13 +455,15 @@ if [ "$restore" = "--restore" ] ; then
...
@@ -396,13 +455,15 @@ if [ "$restore" = "--restore" ] ; then
COUNT
=
$((
$COUNT
+
1
))
COUNT
=
$((
$COUNT
+
1
))
done
done
stat
"
$sfile
"
if
!
stat
"
$sfile
"
&&
[
"
$FILNUM
"
-ne
"0"
]
;
then
LANG
=
C
stat
"
$sfile
"
2>&1 |
grep
-q
"No such file or directory"
||
echo
"
$sfile
"
>>
grf.redo.list
fi
fi
fi
fi
fi
}
}
if
[
-n
"
$uselist
"
]
;
then
if
[
-n
"
$uselist
"
]
;
then
cat
"
$uselist
"
|
sort
-u
|
grep
"^/"
|
while
read
sf
;
do
cat
"
$uselist
"
|
grep
"^/"
|
while
read
sf
;
do
test_file
"
$sf
"
</dev/null
test_file
"
$sf
"
</dev/null
done
done
else
else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment