ďťż
 
 
   Program do kontroli i/o podczas kopiowania
 
 

Tematy

 
    
 

 

 

 

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis