Niekedy je potrebné prekopírovať naraz veľký počet súborov medzi servrami a paralelným behom sa ušetrí veľa času.
Nižšie uvedený skript kopíruje paralelne 2 procesmi (premenná "pro") súbory uvedené aj s cestami v súbore "datafiles_list_ESKVPL". Aktuálne kopírovaný súbor v poradí načíta do premennej "file" a do premennej "filec" skonvertuje zdrojovú na cieľovú cestu (v tomto prípade len odlišný jeden podadresár).
Kopírovanie prebieha v riadku "ssh".
#!/bin/ksh
# ------------------
# BK build 2
# SUBOR DATAFILES VYGENEROVAT CEZ NIS_MAIN_FN A FUNKCIU GET DATA FILES
# STIAHNUT SEM ZO VZDIALENEJ LOKALITY
# "datafiles_list_ESKVPP"
# taha zo vzdialenej lokality sem, nahradza nazov Sady v ceste
# --------------------
# CONFIG ===================
# ZDROJ, CIEL
dbz=ESKVPL
dbc=ESKVQL
# PAR PROCESOV
pro=2
# END CONFIG ===============
#cd /home/oracle/bk/copy
echo "`date +\"%d.%m.%Y %T\"`: zaciatok"
files=`cat datafiles_list_$dbz`
for file in $files;
do
filec=`echo $file | sed -e 's/$dbz/$dbc/g'`
pocet=`ps -ef | grep dd | grep of | grep $dbc | grep -v grep | wc -l`
while [[ $pocet -ge $pro ]]
do
printf .
sleep 5
pocet=`ps -ef | grep dd | grep of | grep $dbc | grep -v grep | wc -l`
done
print "`date +\"%d.%m.%Y %T\"`: copying $file"
# echo " kopirujem $file do $filec"
ssh 10.10.195.203 "dd if=$file bs=1024k" | dd of=$filec bs=1024k &
sleep 1
done
until [[ $pocet -eq 0 ]]
do
printf .
sleep 5
pocet=`ps -ef | grep dd | grep of | grep $dbc | grep -v grep | wc -l`
done
print "`date +\"%d.%m.%Y %T\"`: koniec"
exit
Komprimácia prenášaných dát
Ďalší (jednoduchší) skript na kopírovanie s priebežným gzipovaním (ak máme výkonné CPU, ale obmedzuje nás priepustnosť siete):
Súbor zoznam.txt si vygenerovať vopred, ja som ho vytvoril
find-ami
find /u?/oracle/DBEI/redo -type
f
find /u?/oracle/DBEB/redo -type
f
find /u?/oracle/DBEI/data -type
f
find /u?/oracle/DBEB/data -type
f
Samotný skript, 6 paralelných procesov (resp 7):
#!/bin/ksh
echo "`date +\"%d.%m.%Y %T\"`: zaciatok"
files=`cat zoznam.txt`
for file in $files;
do
pocet=`ps -ef |
grep dd | grep of | grep -v grep | wc -l`
while [[ $pocet
-gt 6 ]]
do
printf .
sleep 5
pocet=`ps -ef | grep dd | grep of | grep -v grep | wc -l`
done
print "`date
+\"%d.%m.%Y %T\"`: copying $file"
# echo "
kopirujem $file"
dd if=$file bs=1M | gzip -1 -c | ssh 10.215.12.175
"gzip -d -c | dd of=$file bs=1M" &
sleep 1
done
until [[ $pocet -eq 0 ]]
do
printf .
sleep 5
pocet=`ps -ef |
grep dd | grep of | grep -v grep | wc -l`
done
print "`date +\"%d.%m.%Y %T\"`: koniec"
exit
Žiadne komentáre:
Zverejnenie komentára