onsdag den 27. april 2011

Crash boom bang (husk backup!)

Ja - så skete det altså også for mig - min blog har været nede ca. siden kl. 13 - her løb / nemlig tør for plads, midt i jeg var ved at opdatere et indlæg.

Det gik jo som det kunne - resultatet blev en korrumperet wp_posts tabel i databasen til min lifeblog - selvfølgelig den vigtigste af alle, intet mindre kunne gøre det!

Måske jeg skulle få sat noget diskplads overvågning op? Hmm...

Hvornår tog jeg sidst backup af min blog database? Hmm... 16/12-2010 - dur ikke...

Hvad mon Webmin's database administration kan? Intet! Kunne ikke engang se databasen (selvom det kun var en af tabellerne den var gal med).

Prøvede en repair via PHPMyAdmin - kunne se alle tabellerne i databasen, men wp_posts havde status "in use" - googlede lidt - nope, den stallede bare i forsøget...

Googlede videre - virkede heller ikke, men blev ledt på sporet af  myisamchk, som jeg læste lidt man pages på - det måtte være sidste skud i bøssen.

Først lukkes mysql ned (/etc/init.d/mysqld stop)
Check med ps - ef |grep mysql indtil der ikke kører flere mysql instanser.

Første forsøg (myisamchk -r wp_posts.MYI) endte med fejlen:

myisamchk: Disk is full writing '/tmp/STxlpW4r' (Errcode: 28). Waiting for someone to free space... Retry in 60 secs

Øv... for lidt plads i /tmp - som ikke sådan lige kan udvides.

Løsningen er at specificere en anden mappe end /tmp:

mkdir /home/mysqltmp
chmod 0777 /home/mysqltmp
cd /var/lib/mysql/blog
myisamchk -r --tmpdir=/home/mysqltmp wp_posts.MYI


Se så! Det var sager - herefter startede jeg mysql igen (/etc/init.d/mysqld start) og til sidst apache (/etc/init.d/apache2 start).

Voila! lifeblog flyver igen! Og så lige en backup med BackWPup - og en reminder til mig selv om at gøre det noget oftere...

søndag den 3. april 2011

Rsync problem med filnavne

Det virker jo fint med rsync - bortset fra at der var enkelte mapper og filnavne som den nægtede at røre ved - fik eksempelvis fejl som:

rsync: recv_generator: failed to stat "/var/run/usbmount/Seagate_FreeAgent_GoFlex_1/Media/MP3/TV-2/Verdens Lykkeligste Mand/TV2 - P\#345 Fredag Har Jeg Fri.mp3": Invalid or incomplete multibyte or wide character (84)

Det var jo selvfølgelig karakter kodning i filnavnet, den var gal med - lige lidt hjalp det at mounte share på min laptop og ændre navnet - kodningen var stadig forkert.

Fandt svaret på YouTube - man skal bruge programmet convmv (sudo apt-get install convmv).

[embed]http://www.youtube.com/watch?v=YKFL9j-wRKE[/embed]

Jeg vidste kodningen skulle være UTF-8, men der findes åbenbart ingen metode til at finde ud af hvilken kodning det oprindelige filnavn er i - så jeg gættede på at filerne i sin tid kom fra min Windows maskine og dermed måtte det jo være iso-8859-1.

Jeg testede med en enkelt mappe først - i dryrun mode (viser ændringer uden udførsel):
convmv -f iso-8859-1 -t UTF-8 *

Resultatet af dette:

Starting a dry run without changes...
mv "./TV2 - K�rligheden Overvinder Alt.mp3" "./TV2 - Kærligheden Overvinder Alt.mp3"
mv "./TV2 - Mad Og Retf�rdighed.mp3" "./TV2 - Mad Og Retfærdighed.mp3"
mv "./TV2 - P� Fredag Har Jeg Fri.mp3" "./TV2 - På Fredag Har Jeg Fri.mp3"
mv "./TV2 - S�dan Er Det Bare.mp3" "./TV2 - Sådan Er Det Bare.mp3"
mv "./TV2 - Stormfulde H�jder.mp3" "./TV2 - Stormfulde Højder.mp3"
No changes to your files done. Use --notest to finally rename the files.


Altså hedder kommandoen:
convmv --notest -f iso-8859-1 -t UTF-8 *

Eller hvis man er modig - fyrer man kommandoen af på mappeniveau med rekursiv switch:
convmv -r --notest -f iso-8859-1 -t UTF-8 *

Herved bliver alle mapper og filnavne i og under den mappe man står i konverteret - kan anbefale dryrun (uden --notest) første gang, for at se om alle filnavne vil se rigtige ud.

fredag den 1. april 2011

Rsync backup med Syncmin

Så fik jeg også backup konfigureret i Webmin - først skulle Syncmin modulet hentes og installeres:

  1. Hent syncmin.tar fra sourceforge: syncmin.tar

  2. Installere Webmin modulet: Webmin Configuration > Webmin Modules > From uploaded file > Vælg mappe/fil på serveren, som du har gemt tar filen i.


Herefter skal man konfigurere et backup job i Webmin modulet Cluster > Syncmin Manager - her er et eksempel (som det ser ud hos mig):

Parameters (av normally) av
Description Synkronisering af mediefiler
Source Host lan1
Target Host lan1
Source Path (End in / if dir) /data/Media/
Target Path /var/run/usbmount/Seagate_FreeAgent_GoFlex_1/Media/
Execute Before Sync
Execute After Sync
Target User root
Target Password <dit root password>


Herefter trykkes Continue og man kan nu sætte en cron job op - jeg har indtil videre sat jobbet til at køre hver aften kl. 23:00 - mest fordi jeg blev færdig med konfiguration kl. 22:58 og jeg ville jo se det køre (haha), men når det er færdig vil jeg nok ændre det til at køre en gang i ugen, eller evt. manuelt.

Selve scriptet der oprettes til rsync jobbet ligger i /etc/webmin/syncmin/scripts/<jobid>.sh
Den tilhørende log til sync jobbet ligger i /var/log/<jobid>.log
Hvis man vil vide hvilke filer/mapper jobbet er nået til, skal man bare udføre kommandoen "tail /var/log/<jobid>.log"

Eksterne kilder:
http://sourceforge.net/projects/syncmin/
http://www.macminicolo.net/rsync2minis.html
http://ubuntuforums.org/showthread.php?t=983832

USB Automount på Ubuntu server

Så fik jeg endelig taget mig sammen til at hive en USB harddisk til hus - blev nødt til at få taget mig sammen til at lave en backup af alle familiens billeder, musik og hjemmevideo - der lurer jo en ægteskabelig krise om hjørnet, hvis det en dag forsvinder!

Strategien har tidligere været, at alle billederne i hvert fald lå både på serveren og mindst en bærbar i husstanden, men den er gået fløjten for længe siden, efter min hustru har fået en netbook og jeg bruger min firma computer - den ene kan der ikke være noget på, den anden må der ikke ligge noget på...

Valget faldt på en 1 TB Seagate FreeAgent GoFlex 2.5" USB harddisk - af flere grunde:

  1. Den kan nøjes med at bruge 1 USB stik - modsat tidligere typer, der skulle bruge 2 USB porte, for at have strøm nok.

  2. Man kan opgradere til USB 3.0 eller købe enten en USB, FireWire eller netværks dock, alt efter hvordan man vil koble den op (sidstnævnte findes endda med plads til 2 GoFlex drev).

  3. Jeg fandt et special-price-for-you tilbud til 699 i Computercity - havde eller satset på en 500 GB, fordi 1 TB modellen kostede 999 på deres hjemmeside.


Men en ting er at hive muldvarpen frem, en anden er at få dyret koblet op til serveren på en måde, så det ikke bliver et bøvl at tage backup, når trangen er over en - jeg fik derfor lejlighed til at løse et mindre irritations moment jeg har haft ved min server - man får ikke automounted USB drev, når man tilslutter dem - man skulle lave en SSH forbindelse og mounte manuelt som root - det er ikke umiddelbart noget der hjælper på lysten til at lave en ad-hoc backup!

Der findes flere løsninger på nettet, bla. ivman og halevt (som dog også kan løse andre opgaver), men den letteste løsning blev at installere pakken "usbmount" (sudo apt-get install usbmount) - den fungerer lige ud af flasken - i hvert fald med ext2 og ext3 formaterede drev.

Nu var der jo bare det lille problem, at harddisken jeg havde købt var formateret med ntfs og jeg havde besluttet mig til at beholde dette format, så den trods alt er direkte læsbar fra en Windows maskine (der jo stadig ikke fatter hat af andre disk formater) - det kræver lige et par ændringer i /etc/usbmount/usbmount.conf, for at også partitioner med ntfs (og fat) bliver mounted:

  • Linjen med FILESYSTEMS skal ændres til FILESYSTEMS="ext2 ext3 vfat ntfs"

  • Linjen med FS_MOUNTOPTIONS skal ændres til FS_MOUNTOPTIONS="-fstype=ntfs,rw,errors=remount-ro,dmask=0000,fmask=0000 -fstype=vfat,dmask=0000,fmask=0000"


Det var umiddelbart alt der skulle til - da jeg stak USB stikket i porten, blev harddisken automatisk mounted på /media/usb0 - skrivbar selvfølgelig!

Endnu en smart ting ved usbmount er, at den samtidig laver en symlink i /var/run/usbmount med navnet på enheden - f.eks. i mit tilfælde /var/run/usbmount/Seagate_FreeAgent_GoFlex_1 - herved kan jeg være sikker på at ramme den rigtige harddisk, uanset om jeg har andre enheder tilsluttet før den - altså selvom den bliver mountet på /media/usb4 vil dette symlink stadig ramme den rigtige harddisk - genialt i forbindelse med backup scripts...

Nu mangler jeg blot at konfigurere backup via webmin - så det bliver så smertefrit som muligt - det skulle gerne køre med noget rsync, men det skulle være til at finde ud af.

PS. Jeg kører stadig Ubuntu 8.10, indtil jeg synes det giver mening at opgradere, det er derfor ikke sikkert usbmount vil fungere på nyere distributioner (læs: nyere kerner) og programmet ser ud til at være forladt af udvikleren - men generelt skulle den virke på debian baserede distributioner - der er kun en måde at finde ud af det på!

Eksterne kilder:
http://usbmount.alioth.debian.org/
http://tinyhack.com/2008/08/25/tips-for-agestar-ncb3ast/