|
Program do kontroli i/o podczas kopiowania
markossx - 10-11-2008 20:18
Jak w temacie. Robię codziennie rano mały (około 25GB) backup na dysk zewnętrzny, wszystko chodzi ładnie, tylko jest mały problem: podczas kopiowania z serwera na dysk usb serwer przez prawie 20 minut sprawia wrażenie jakby miał drgawki właśnie przez to kopiowanie. I mam w związku z tym pytanie czy jest jakiś program, który pozwoli mi ograniczyć wykorzystanie mocy sprzętu? Taki myk jak w downloaderach, że można sobie ograniczyć prędkość ściągania.
Potem jeszcze porównuje sumy kontrolne oryginałów z kopiami, a że pliki są sporawe też jeździ po dysku jak po dzikiej świni ale na to pewnie lekarstwa nie ma; czy może jakoś inaczej weryfikować? Pozdrawiam.
snah - 12-11-2008 16:53
Próbowałeś obiżyć priorytet operacji za pomocą nice?
markossx - 12-11-2008 23:57
Nie próbowałem, wybadam to. Dzięki.
Utumno - 13-11-2008 11:42
Co do automatycznego limitowania IO danego procesu - nie wiem, ale dlaczego nie robic takich backupow o 5 rano, gdy spisz?
markossx - 13-11-2008 21:06
To jest serwer, który chodzi 24h/365d. Zmniejszenie priorytetu nie wiele pomaga niestety :-|
adnix - 13-11-2008 22:20
A nie mógłby tego robić metodą przyrostową?
Utumno - 14-11-2008 04:03
Oczywiscie, ze przyrostowa - rsync'iem. Bedzie duzo szybciej. Ja do backupu wszystkiego poza 'home' uzywam nastepujacego skryptu: #!/bin/sh
if [ `whoami` != root ] then echo You have to be root to run this script! exit 1 fi
DEVICE=hdc2 echo Mounting $DEVICE... mount /dev/$DEVICE /mnt
RET=$?
if [ $RET != 0 ] then echo Error mounting $DEVICE ! exit 2 fi
echo `date` > /root/.SYNCHRONIZED
for folder in bin boot etc emul initrd lib root sbin usr var do echo Syncing $folder ... rsync -av --delete /$folder /mnt done
echo Correcting menu.lst and fstab... cat /mnt/boot/grub/menu.lst | sed "s/\(.*\)sdb1\(.*\)/\1${DEVICE}\2/" > menu.tmp cat /mnt/etc/fstab | sed "s/\(.*\)sdb1\(.*\)/\1${DEVICE}\2/" > fstab.tmp
mv menu.tmp /mnt/boot/grub/menu.lst mv fstab.tmp /mnt/etc/fstab
echo Unmounting... umount /dev/$DEVICE
echo Done!
W skrocie: mam dysk /dev/hdc2 podlaczony do tasmy IDE ale niezamontowany. Ten skrypt go montuje i backupuje wszystko oprocz 'home' , jednoczesnie zmieniajac /etc/fstab i /boot/grub/menu.lst po to, zeby ten dysk byl zwarty i gotowy ( jak bede chcial z niego zabootowac to tylko zmieniam kolejnosc dyskow w BIOSie i jest )
Od czasu do czasu robie tez z tego .iso DVD w ten sposob: genisoimage -o /media/data/root-image-2007-01-05.iso -R -A "Root Image 2007-01-05" /mnt
markossx - 14-11-2008 11:02
Nie chcę tu robić klasycznego backupu (przyrostowy, różnicowy...) bo są to pliki baz danych firebird. Zmieniają się cały czas wszystkie więc to nie ma ma większego sensu, a 2 - nie chcę turlać dzień w dzień 25GB przez sieć dlatego zdecydowałem, że będę to wrzucał na USB i również popełniłem skrypt następujący: #!/bin/bash # Skrypt kopii bazy danych na dysk zewnetrzny v 2.0 # log="/home/backup.log" ### FUNCTION backup function backup { usbd="/dev/$dn" date >> $log mount -o rw $usbd /mnt sleep 1 mount -o rw $usbd /mnt sleep 1 mount -o rw $usbd /mnt sleep 2 #fdisk -l /dev/sda >> $log cat /mnt/hd.info >> $log echo 'czyszczenie katalogu na dysku USB' >> $log rm -vrf /mnt/`date +%a` >> $log echo '.................' >> $log echo "Tworzenie katalogu `date +%a`" >> $log mkdir /mnt/`date +%a` echo '.................' >> $log echo 'listing katalogu /server/kopie-pcb' >> $log ls -l /server/kopie-pcb >> $log echo 'Liczba plikow' `ls /server/kopie-pcb/ | wc -l` >> $log echo 'listing plikow do skopiowania' >> $log find /server/kopie-pcb/ -mtime -1 >> $log echo "START `date +%T`" >> $log find /server/kopie-pcb/ -mtime -1 -exec cp -vp {} /mnt/`date +%a` \; >> $log #find /server/kopie-pcb/ -mtime -1 -exec ls -l {} \; >> $log echo "KONIEC `date +%T`" >> $log echo 'listing skopiowanych plikow na dysku USB' >> $log df -h >> $log df -i >> $log ls -l /mnt/`date +%a` >> $log # find /server/kopie-pcb/ -mtime 0 -exec md5sum {} \; > /home/server-chcks find /mnt/`date +%a` -name '*' -exec md5sum {} \; > /home/usbdisc-chcks awk '{ print $1 }' /home/server-chcks > /home/oryg awk '{ print $1 }' /home/usbdisc-chcks > /home/kopia echo 'listing md5sum ' >> $log diff -y -s /home/oryg /home/kopia >> $log rm -fv /home/server-chcks /home/usbdisc-chcks /home/oryg /home/kopia # date >> $log umount /mnt sleep 3 umount /mnt mail -s "backup_db.OK at `date +%F`" info@info.info < $log rm -f $log } ### END FUNCTION backup ### FUNCTION check sda function check_sda { echo 'checking sda...' >> $log if [ -b /dev/sda4 ]; then { declare dn=sda4 echo 'function_call sda' >> $log backup } else { echo 'Something wrong :( (Maybe usb device connected incorrect...)' >> $log echo 'sda not ok...' >> $log mail -s "Backup_DB_ALERT at `date +%F`" info@info.info < $log exit } fi } ### END FUNCTION check sda echo 'checking sdb...' >> $log ### check sdb if [ -b /dev/sdb4 ]; then { declare dn=sdb4 echo 'function_call sdb' >> $log backup } else { echo 'sdb not ok...' >> $log check_sda } fi
Tylko zauważyłem niestety, że jest potężne obciążenie podczas tych zadań. W sumie nie jest to sprawa krytyczna jednak pomyślałem, że może można jakoś kontrolować strumieniem podczas kopiowania, ale jak widać ciężka sprawa... Sprawdzanie sum kontrolnych też zamula bo pliki są po kilka GB więc mu trochę schodzi zanim policzy... I tak to właśnie wygląda. Dzięki Panowie za zainteresowanie tematem :->
fenix23 - 14-11-2008 11:03
A nice nie pomogło?
Utumno - 14-11-2008 11:40
nice ewentualnie pomoze w kernelu skompilowanem z opcja 'CONFIG_PREEMPT' , Debianowe kernele o ile wiem maja tylko 'CONFIG_PREEMPT_VOLUNTARY'
[ Dodano: 2008-11-14, 18:45 ] Ad. marcossx: nie musisz backupowac 'przez siec' , wystarczy dysk SATA podlaczony do systemu, ale nie zamontowany... Tak zreszta bedzie szybciej niz przez USB.
markossx - 14-11-2008 19:50
Nice nie pomogło, być może że mam off w jajku CONFIG_PREEMPT Dodam, że kopia robi się jednego dnia na jeden dysk USB drugiego na drugi i tak w koło. Próbowałem również z SATA (dysk zewnętrzny ma i sata i usb) wyjście zewnętrzne, kontroler do śledzia) ale był problem (już nie pamiętam dokładnie co i jak) w każdym razie jak było spięte na SATA był problem z zamienianiem dysków w trybie Hot-Swap dlatego ostatecznie zostało przy USB; dlatego w skrypcie sprawdzam jak dysk się wykrył bo czasem jest 10x pod rząd sda potem 2x sdb. Pewnie dlatego, że czasem pendrive usb podłączę albo inny ,,cukierek''... Utumno, dodam, że prędkość jest naprawdę zadowalająca (około 25GB niecałe 20 minut) tylko, że mnie nie zależy tutaj na prędkości akurat :evil: Próbowałem nawet wgetem na URI takie: file:/// ale nie chce łykać. Tak na marginesie:
jest jeden serwer (Bacula) co robi ogólny backup i właśnie dlatego przez sieć - tu wyjątek, lokalnie na USB ;-) Będę z tym żył jakoś... pozdrawiam.
Utumno - 14-11-2008 20:44
Ok, pomyszkowalem troche i oto co znalazlem: why aren't you using ionice
Takze
man ionice
markossx - 14-11-2008 21:50
ÂŚwietna robota Utumno, tego mi było trzeba, dzięki, że chciało Ci sie poświecić chwile <piwko>
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|