- This topic has 34 hozzászólás, 12 résztvevő, and was last updated 18 years, 7 months telt el by
Perfecto.
-
SzerzőBejegyzés
-
2005-08-29-14:54 #2027384
Tudnál abban segíteni, hogy milyen shell, vagy egyébb kódot használsz a mentéshez? Mint kiindulási támpont, vagy egyébb buktatók elkerülése céljából.
Mivel én egy viszonylag összetett és testreszabott mentést
készítettem, írtam egy bash szkriptet.Az egésznek a lényegi részét az rsync végzi.
-Minden nap 3 órakor hajnalban szinkronizálja az adatmentõ gépen lévõ adatokat
a konfig állományban megadott helyekrõl. Ha keletkezett egy állomány, vagy
megváltozott (mérete, utolsó módosítás dátuma, stb..) akkor átmásolja. Ha letöröltek
egy állományt akkor letörli a mentett adatok közül.2005-08-30-15:40 #2027385Mivel én egy viszonylag összetett és testreszabott mentést
készítettem, írtam egy bash szkriptet.
…
Röviden ennyi…
Ha konkrét kérdésed van akkor arra válaszolok.
[align=right][snapback]147646[/snapback][/align]Nagyom szépen köszönöm, hogy ilyen részletesen leírtad, de titkos az a bash script? Vagy esetleg valamilyen módon megkaphatom? :unsure:
Tudom hogy az nem jó nekem, de azt majd átírom …
Természetesen a gép, megosztas, felhasználónevek, meg a jelszavak nem érdekelnek, azokat cseréld le… gép1, g2, … share1, s2, … user1, u2, … pwd1, p2, … . Ha ez így megoldható lenne, akkor nagyon boldog lennék! :rolleyes:2005-08-31-10:53 #2027386Nagyom szépen köszönöm, hogy ilyen részletesen leírtad, de titkos az a bash script? Vagy esetleg valamilyen módon megkaphatom? :unsure:
Tessék… 🙂
/usr/local/sbin/backup
Code:#!/bin/bash
################################################################################
# Mini backup
################################################################################# Delete old files in directory ################################################
# in:
# $1=Directory name
# $2=Request size to free
# out:
# 0=Ok
# 1=Can’t remove file
# 2=Delete all files but not enough free space
PurgeFile() {
local Sum=0 tmp=
while read tmp; do
rm -f „${tmp#* }” 2>>$LogFile || return 1
tmp=”${tmp#* }”
((Sum+=${tmp%% *}))
(( $Sum > $2 )) && return 0
done < >$LogFile|sort)
return 2
}# Delete empty subdirectories ##################################################
# in:
# $1=Directory
# out:
# 0=Ok
# 1=Can’t remove directory
PurgeDir() {
local tmp=
while read tmp; do
[ „$(ls „$tmp” 2>>$LogFile)” ] || rmdir „$tmp” 2>>$LogFile || return 1
done < >$LogFile)
return 0
}# Search free mount point ######################################################
# in:
# out:
# 0-9=Number of free point
# 254=Not found free point
MountFree() {
local i=
for i in 0 1 2 3 4 5 6 7 8 9; do
[ „$(mount 2>>$LogFile|egrep ” on /mnt/tmp/$i „)” ] || return $i
done
return 254
}# Get rsync status #############################################################
# in:
# $1=Rsync status (numeric)
# out:
# 0-30=Rsync status (numeric)
# RsyncStat=Rsync status (text)
GetRsyncStat() {
case $1 in
0) RsyncStat=”Success”;;
1) RsyncStat=”Syntax or usage error”;;
2) RsyncStat=”Protocol incompatibility”;;
3) RsyncStat=”Errors selecting input/output files, dirs”;;
4) RsyncStat=”Requested action not supported”;;
5) RsyncStat=”Error starting client-server protocol”;;
10) RsyncStat=”Error in socket I/O”;;
11) RsyncStat=”Error in file I/O”;;
12) RsyncStat=”Error in rsync protocol data stream”;;
13) RsyncStat=”Errors with program diagnostics”;;
14) RsyncStat=”Error in IPC code”;;
20) RsyncStat=”Received SIGUSR1 or SIGINT”;;
21) RsyncStat=”Some error returned by waitpid()”;;
22) RsyncStat=”Error allocating core memory buffers”;;
23) RsyncStat=”Partial transfer due to error”;;
24) RsyncStat=”Partial transfer due to vanished source files”;;
30) RsyncStat=”Timeout in data send/receive”;;
esac
return $1
}# Umount #######################################################################
# in:
# $1=(none) All point
# $1=(0-9) Number of point
# out:
# 0=Ok
# 1=Can’t umount this point
# 2=Can’t umount any point(s)
Umount() {
local tmp= err=0
if [ „$1” ]; then
if [ „$(mount 2>>$LogFile|egrep ” on /mnt/tmp/$1 „)” ]; then
sudo umount -f „/mnt/tmp/$1” 2>>$LogFile || err=1
fi
else
while read tmp; do
sudo umount -f „/mnt/tmp/$tmp” 2>>$LogFile || err=2
done < >$LogFile|sed -n „/ on /mnt/tmp/[0-9] /{s/(^.+ on /mnt/tmp/)([0-9])(.+$)/2/;P}”)
fi
return $err
}# Mount SMB ####################################################################
# in:
# $1=User name
# $2=Password
# $3=Domain
# $4=Host name
# $5=Share name
# $6=Options
# out:
# 0-9=Mounted point
# 253=Not enough free point
# 254=Can’t mount host
MountSMB() {
local tmp=
tmp=$(mount 2>>$LogFile|sed -n „/^//${4}/${5} on /mnt/tmp/[0-9] type smbfs .+$/{s/(^//${4}/${5} on /mnt/tmp/)([0-9])(.+$)/2/;P}”)
[ „$tmp” ] && return $tmp
Umount
MountFree
tmp=$?
(( 100 >$LogFile 1>>$LogFile || return 254
return $tmp
}# Mirror SAMBA #################################################################
# in:
# $1=User
# $2=Domain
# $3=Host
# $4=Share
# $5=Source directory
# $6=Destination directory
# $7=Options
# out:
# 0=Ok
# ?=Rsync
MirrorSMB() {
local tmp= opt=
echo „${0##*/}: $(date „+%H:%M:%S”) mirror ‘smb://${3}/${4}/${5}’ to ‘${6}’ „>>$LogFile
tmp=$(sed -n „/^$User:/{s/(^.+:)(.+$)/2/;P}” „/etc/${0##*/}/passwd.conf” 2>>$LogFile)
[ „$7″ ] && opt=”,${7}”
MountSMB „$1” „$tmp” „$2” „$3” „$4” „$opt”
tmp=$?
(( 100 >$LogFile || return 1
rsync -qrlpogt –force –delete –temp-dir=”${6}/${3}/${4//$/}-temp” –partial-dir=”${6}/${3}/${4//$/}-partial” –exclude-from=”/etc/${0##*/}/${3}.${4//$/}.exclude” „/mnt/tmp/${tmp}/${5}” „${6}/${3}/${4//$/}” 2>>$LogFile
GetRsyncStat $?
tmp=$?
echo „${0##*/}: rsync: ${RsyncStat}”>>$LogFile
return $tmp
}# Mirror RSYNC #################################################################
# in:
# $1=User
# $2=Domain
# $3=Host
# $4=Share
# $5=Source directory
# $6=Destination directory
# $7=Options
# out:
# 0=Ok
# ?=Rsync
MirrorRSY() {
local tmp= opt=
echo „${0##*/}: $(date „+%H:%M:%S”) mirror ‘sry://${3}/${4}/${5}’ to ‘${6}’ „>>$LogFile
mkdir -pm 755 „${6}/${3}/${4//$/}” „${6}/${3}/${4//$/}-temp” „${6}/${3}/${4//$/}-partial” 2>>$LogFile || return 1
RSYNC_PASSWORD=”$(sed -n „/^$User:/{s/(^$User:)(.+$)/2/;P}” „/etc/${0##*/}/passwd.conf” 2>>$LogFile)”
export RSYNC_PASSWORD
rsync -qrlpogt –force –delete –temp-dir=”${6}/${3}/${4//$/}-temp” –partial-dir=”${6}/${3}/${4//$/}-partial” –exclude-from=”/etc/${0##*/}/${3}.${4//$/}.exclude” „${1}@${3}::${4}/${5}” „${6}/${3}/${4//$/}” 2>>$LogFile
GetRsyncStat $?
tmp=$?
echo „${0##*/}: rsync: ${RsyncStat}”>>$LogFile
return $tmp
}# Archive ######################################################################
# in:
# $1=Source
# $2=Device
# $3=Destination
# $4=Options
# out:
# 0=Ok
# 1=error
Archive() {
local tmp= dta=$(date „+%y%m%d”)
echo „${0##*/}: $(date „+%H:%M:%S”) archive ‘${1}’ to ‘${2}/${dta}${3}’ „>>$LogFileif [ „$(mount 2>>$LogFile|egrep ” on ${2} type „)” ]; then
sudo /bin/umount $2 2>>$LogFile || return 1
fi
sudo /bin/mount -o „uid=$(whoami),gid=$(whoami)” $2 2>>$LogFile || return 1tmp=$(du -sb ${1} 2>>$LogFile|cut -f1)
if (( $(df -B1 $2 2>>$LogFile|sed -n „/${2////\/}/{s/^[^ ]+ +[0-9]+ +[0-9]+ +([0-9]+).+/1/;P}”) >$LogFile || return 1for tmp in ${4//,/ }; do
case ${tmp%%=*} in
list)
case ${tmp#*=} in
0) echo „${0##*/}: list=0″>>$LogFile;;
u) cd $1; ls -1aRl 2>>$LogFile >”$2/${dta}${3}/${1##*/}.lst” || return 1;;
w) cd $1; ls -1aRl 2>>$LogFile|sed „s/(.*)/1r/” >”$2/${dta}${3}/${1##*/}.lst” || return 1;;
*) echo „${0##*/}: unknown parameter ${4} „>>$LogFile; return 1;;
esac
;;
compress)
case ${tmp#*=} in
0) cd $1; cp -R $1 „$2/${dta}${1}” 2>>$LogFile || return 1;;
z) cd $1; zip -rq9 „$2/${dta}${3}/${1##*/}.zip” „.” 2>>$LogFile || return 1;;
t) cd $1; tar -czf „$2/${dta}${3}/${1##*/}.tar.gz” „.” 2>>$LogFile || return 1;;
*) echo „${0##*/}: unknown parameter ${4} „>>$LogFile; return 1;;
esac
;;
*) echo „${0##*/}: unknown option ${tmp%%=*} „>>$LogFile; return 1;;
esac
done
sudo /bin/umount $2 2>>$LogFile || return 1
return 0
}################################################################################
LogFile=”/var/log/${0##*/}/${0##*/}.log”
CfgFile=”/etc/${0##*/}/${0##*/}.conf”
TmpFile=”/tmp/${0##*/}.tmp”
MailTo=”root”
ShutDown=”disc”
Error=”success”
StartDate=”$(date „+%Y.%m.%d %a %H:%M:%S”)”# Already running?
[ -f „/var/run/${0##*/}/${0##*/}.pid” ] && echo „${0##*/}: ${StartDate} already running… pid:$(cat „/var/run/${0##*/}/${0##*/}.pid”)”>>$LogFile && exit 0
echo $$>”/var/run/${0##*/}/${0##*/}.pid”# Starting backup
echo „${0##*/}: start ${StartDate}”>>$LogFile# Config file is exist?
[ ! -f „$CfgFile” ] && echo „${0##*/}: config file ‘${CfgFile}’ is not exist”>>$LogFile# Process config file ##########################################################
while read CfgLine; do
case $CfgLine in
[[gG][eE][nN][eE][rR][aA][lL]]) Label=”general”;;
[[mM][iI][rR][rR][oO][rR]]) Label=”mirror”;;
[[aA][rR][cC][hH][iI][vV][eE]]) Label=”archive”;;
[*]) echo „${0##*/}: unknown label ‘${CfgLine}’ „>>$LogFile;;
*)
case $Label in
general)
case ${CfgLine%%=*} in
[mM][aA][iI][lL][tT][oO]) MailTo=${CfgLine#*=};;
[sS][hH][uU][tT][dD][oO][wW][nN]) ShutDown=${CfgLine#*=};;
*) echo „${0##*/}: unknown option ‘${CfgLine%%=*}’ „>>$LogFile;;
esac
;;
mirror)
case ${CfgLine%%;*} in
smb)
Type=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Opt=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
User=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Domain=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Host=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Share=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Src=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Des=${CfgLine%%;*}
MirrorSMB „$User” „$Domain” „$Host” „$Share” „$Src” „$Des” „$Opt” || Error=”error”
;;
rsy)
Type=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Opt=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
User=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Domain=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Host=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Share=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Src=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Des=${CfgLine%%;*}
MirrorRSY „$User” „$Domain” „$Host” „$Share” „$Src” „$Des” „$Opt” || Error=”error”
;;
*) echo „${0##*/}: unknown type ‘${CfgLine%%;*}’ „>>$LogFile;;
esac
;;
archive)
Opt=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
SrcDir=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
Device=${CfgLine%%;*}; CfgLine=${CfgLine#*;}
DesDir=${CfgLine%%;*}
Archive „$SrcDir” „$Device” „$DesDir” „$Opt” || Error=”error”
;;
*) echo „${0##*/}: missing label before ‘${CfgLine}’ „>>$LogFile;;
esac
;;
esac
done < >$LogFile)# Umount all points
Umount || echo „${0##*/}: can’t umount any points in ‘/mnt/tmp’ „>>$LogFile# Prepare to shutdown
case $ShutDown in
none) ShutDown=;;
disc) ShutDown=”hdparm -y /dev/hdc”;;
sys) ShutDown=”sudo /sbin/shutdown -hP now”;;
*) echo „${0##*/}: unknown option ‘${ShutDown}’ „>>$LogFile;;
esac# End process
[ -f $TmpFile ] && rm $TmpFile 2>>$LogFile
echo -e „${0##*/}: stop $(date „+%Y.%m.%d %a %H:%M:%S”)nn”>>$LogFile# Send mail
[ „$MailTo” ] && sed -n „/^${0##*/}: start ${StartDate}/,/^$/P” ${LogFile}|sed „1iTo: ${MailTo}nFrom: $(whoami)@$HOSTNAMEnSubject: ${0##*/} ${Error}nn”|/usr/sbin/sendmail „$MailTo”
[ -f „/var/run/${0##*/}/${0##*/}.pid” ] && rm „/var/run/${0##*/}/${0##*/}.pid”# ShutDown
sleep 60
$ShutDown/etc/backup/backup.config
Code:################################################################################
# Mini backup
################################################################################################################################################################
# Az altalanos beallitasok szekcioja[GENERAL]
# A mentesi muvelet befejezese utan levelet kuld a megadott cimre a naplo
# allomany utolso bejegyzeserol. Ha ki van kommentezve akkor az alapertelezett
# „root@localhost” cimre kuldi a levelet. Ha nem szukseges levelet kuldeni akkor
# uresen kell hagyni a cimet.
# (pl. MailTo= )MailTo = root
# Az archivalasi muvelet befejezese utan leallithato az archivumot tarolo diszk
# vagy a teljes gep is. Ha ki van kommentezve akkor az alapertelmezett a diszk
# leallitasa lesz.
# (pl. ShutDown=sys)
#
# none = nincs leallas
# disc = csak az archivalo diszk all le
# sys = a teljes gep leall
#ShutDown = sys
################################################################################
# A halozatban levo gepek adatainak tukrozesere vonatkozo beallitasok.[MIRROR]
# Itt kell megadni hogy honnan hova tortenjen a file-ok tukrozese. Minden sorban
# egy kivalasztott konyvtar adatainak tukrozesere vonatkozo bejegyzes van. A
# bejegyzes nyolc mezobol all, melyeket pontosvesszovel kell elvalasztani
# egymastol.
#
# TYPE; OPTIONS; USER; DOMAIN; HOST; SHARE; SRCDIR; DESDIR
#
# Az oszlopok jelentesei:
#
# TYPE:
# Ez hatarozza megy hogy milyen modon kapcsolodjon a tavoli gephez a szkript. A
# kovetkezo tipusok kozul lehet valasztani:
# smb : samba (windows halozati megosztas)
# rsy : rsync (unix rsyncd szerver)
#
# OPTIONS:
# Itt lehet vesszovel elvalasztott opciokat adni a kapcsolat letesitesehez.
# (pl. codepage=cp852,iocharset=iso8859-2)
#
# USER:
# Annak a felhasznalonak a neve akinek a neveben a tukrozes tortenik.
#
# DOMAIN:
# Az tipus eseten annak a munkacsoportnak vagy tartomanynak a neve
# amelyben a menteni kivant gep / felhasznalo van.
# Az tipus eseten annak a (nis) tartomanynak a neve amelyben a menteni
# kivant gep / felhasznalo van.
#
# HOST:
# Annak a gepnek a neve / IP cime amelyrol a mentes keszul.
#
# SHARE:
# tipus eseten a windows megosztas neve.
# tipus eseten az rsync modul neve.
#
# SRCDIR:
# Lehetoseg van a -en belul tovabbi kivalasztasra, egy forraskonyvtar
# megadasaval. Ha nincs megadva a akkor a teljes tukrozesre kerul.
#
# DESDIR:
# Azt a pontot jeloli a lokalis file-rendszeren belul ahova a tukrozes keszul.
## TYPE; OPTIONS ; USER ; DOMAIN; HOST ; SHARE ; SRCDIR; DESDIR
# —–;————————————;——–;——–;———-;——–;——–;——-
# Mikro-2000 adatbazis
smb ; codepage=cp852,iocharset=iso8859-2; backup; vir ; csepdc ; mikro$; ; /home/backup
# Windows NT rendszer particio
smb ; codepage=cp852,iocharset=iso8859-2; backup; vir ; csepdc ; sys$ ; ; /home/backup
# Felhasznalok konyvtarai
smb ; codepage=cp852,iocharset=iso8859-2; backup; vir ; csepdc ; home ; ; /home/backup# Gyujtott adatok adatbazisa
# rsy ; ; backup; matrix; inf-8 ; backup; ; /home/backup
# Intranet adatterulet
rsy ; ; backup; matrix; morpheus; backup; ; /home/backup
# Ideiglenes tarterulet mentese a Neo szerverrol
rsy ; ; backup; matrix; neo ; backup; ; /home/backup################################################################################
# A lokalis file-rendszerre tukrozott adatok archivalasara vonatkozo beallitasok[ARCHIVE]
# Itt kell megadni hogy honnan hova tortenjen a file-ok archivalasa. Minden
# sorban egy kivalasztott konyvtar adatainak archivalasara vonatkozo bejegyzes
# van. A bejegyzes negy mezobol all, melyeket pontosvesszovel kell elvalasztani
# egymastol.
#
# OPTIONS; SRCDIR; DEVICE; DESDIR
#
# Az oszlopok jelentesei:
#
# OPTIONS:
# Ez hatarozza meg hogy az archivalas milyen opciokkal tortenjen.
# list=0 nem keszul lista az allomanyokrol
# list=u keszul lista az allomanyokrol UNIX formatumban
# list=w keszul lista az allomanyokrol WINDOWS formatumban
# compress=0 nem tomoriti az allomanyokat
# compress=z tomorit a zip programmal
# compress=t tomorit a tar-gz programokkal
#
# SRCDIR:
# Annak a lokalis konyvtarnak a neve amibol az archiv keszul.
# (pl. /home/backup)
#
# DEVICE:
# Annak a konyvtarnak a neve ahova az /etc/fstab szerint az archivalo eszkoz fel
# lesz csatolva a fajlrendszerbe.
# (pl. /mnt/hdd/1)
# Ha nincs megadva akkor a gyoker konyvtar lesz az alapertelmezett.
#
# DESDIR:
# Annak a konyvtarnak a neve ami ala keszulni fog az archiv
# (pl. /home/peldaul_tot_bela)
# Ha nincs megadva akkor a „/” lesz az alapertelmezett celkonyvtar.
## OPTIONS ; SRCDIR ; DEVICE ; DESDIR
# —————-;———————————————-;—————–;——-#list=w,compress=t; /home/backup/inf.system ; /mnt/rack/hdc/1; /inf.system
#list=w,compress=z; /home/backup/inf-8/backup ; /mnt/rack/hdc/1; /inf-8/backup
list=w,compress=z; /home/backup/neo/backup ; /mnt/rack/hdc/1; /neo/backup
list=w,compress=z; /home/backup/morpheus/backup ; /mnt/rack/hdc/1; /morpheus/backuplist=w,compress=z; /home/backup/csepdc/sys ; /mnt/rack/hdc/1; /csepdc/sys
list=w,compress=z; /home/backup/csepdc/mikro ; /mnt/rack/hdc/1; /csepdc/mikro2005-09-01-09:09 #2027387Tessék… 🙂
…
[align=right][snapback]147940[/snapback][/align]Köszi! 🙂 Ezzel el leszek egy darabig, míg felfogom…
2005-09-09-06:11 #2027388Nekem egy Novell szerverem van, amit felcsatolok egy linux szerverre és tar.gz-vel lementem az egész SYS kötetet. Csak azt nem tudom, hogyan tudnám azt megnézni, hogy mindent lementett és semmi hiba nem történt.
Tud valaki segíteni???2005-09-09-06:51 #2027389Nekem egy Novell szerverem van, amit felcsatolok egy linux szerverre és tar.gz-vel lementem az egész SYS kötetet. Csak azt nem tudom, hogyan tudnám azt megnézni, hogy mindent lementett és semmi hiba nem történt.
Irányítsd a targéza hibakimenetét egy napló file-ba.
Ha menet közben valami baja van akkor a napló állományból
értesülhetsz a hibáról.Rengeteg példát találhatsz a fentebb lévõ szkriptben.
2006-05-30-09:01 #20273902006-05-30-09:42 #2027391„Mit kellene tennem ahoz, hogy a legtöbb beállítást megtarthassam, ha újratelepítem linuxomat? elég, ha home és etc könyvtárakat mentem ki?”
Ha a /home nem kerül formázásra, az ott tárolt beállítások megmaradnak.
Ha az általad használt disztró telepítési funkciójában létezik a „rendszer frissítése” opció, a kérdés értelmét veszti.
Az /etc könyvtárban elég sok változás szokott lenni egy új verzió megjelenése esetén, ezért ennek a visszamásolása több problémát okoz, mint amennyit használ.
Nálad a /home nem külön partíció?2006-05-30-09:54 #2027392nem új verziót akarok($apt-get update;apt-get upgrade valamint kernelt fordítgatni), hanem átparticionálni a merevlemezeimet, RAID-et beállítani…
merevlemezem most így néz ki:
elsõ:
fat32(8GB),SWAP(~300MB), gyökér(16GB)
második:
/home(2GB)RAID-0-át akarok az egészbõl – meg kevesebb inode helyet, de elõtte ki kell mentenem adataimat, leveleimet, beállításaimat, feltelepített csomagjaim nevét visszatelepíthetõ formátumban. De nem akarom egész Winchestert telenyomni adataimmal, ezért kellene a mentéseket megoldani, hogy csak ami éppen kell majd az legyen wincsin…
2006-05-30-10:16 #2027393„RAID-0-át akarok az egészbõl…..”
Ez (nekem) egyre homályosabb.
Ha az elsõ vinyód kb. 25giga, a második meg 2giga, ebbõl hogy lesz raid0? -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz