août 31 2010

rsnapshot to backup an iMac

guillaume | Global | 0 Commentaire

I did give Time Machine a try, but it just would not do it. No matter if I am using a network disk or a USB-attached dedicated hard drive, the I/O load is just not worth it. Even on my shiny new iMac. Sad.
Hey, if I wanted my CPU or I/O to be overloaded by some system task, I would be using Windows with some good heavy AV on it.

So back to the good old, reliable rsnapshot for daily, during-the-night backups.

There is catch that has been bothering me for quite some time, though, and I only found the solution very recently.

I like my Snow Leopard iMac to go to sleep after a reasonable period of time, because it is not meant to stay up 24×7 – unlike the Ubuntu backup/storage/kids game machine.
The iMac is fairly clever in that it can wake up from simple SSH requests – or from the preceding ARP requests.
Here is the issue: I want rsnapshot to wake up the iMac before the backup – and obviously let it go back to sleep afterwards.

Scripting the ability to wake up the iMac is not a big deal. This simple script would do:
#!/bin/bash
let "i=0"
sshup=1
while [ $i -lt 20 -a $sshup -ne 0 ]
do
let "i += 1"
sleep 2
ssh $IMAC echo
sshup=$?
done
exit $sshup

Their needs to be some ssh trust relationship in place between the backup server and the iMac; enough articles have been written on that topic, I will not contribute to the noise.

Inserting this script (let’s call it /usr/local/sbin/ssh_wake) in the rsnapshot workflow is not a big deal, thanks to the cmd_preexec configuration item in rsnapshot.conf:
cmd_preexec /usr/local/sbin/ssh_wake

(do mind that like usually there is a TAB between cmd_preexec and /usr/local/sbin/ssh_wake)

However, this design comes with an issue: in its default sequence,

  • rsnapshot starts by launching cmd_preexec (hereby waking up the iMac),
  • then rotates the backup directories (daily.n becomes daily.n+1),
  • then rsyncs the backup.

On fairly large backups, there is going to be a significant delay between the « let’s wake up the iMac » and the « let’s perform the rsync data transfer ». To a point where the iMac would go back to sleep before the actual data transfer.

Quite a few weeks banging my head against that one.

Until I started reading the rsnapshot source code (it is only Perl after all ™), and noticing this sync_first configuration item that changes significantly the usual workflow.
sync_first was nowhere to be found in my rsnapshot.conf, because my configuration file dates back to a version of rsnapshot that did not support sync_first.
Makes you feel like a dinosaur. Just a bit.

A bit of RTFM later, here is how sync_first works:

  • sync_first decouples data transfer and directory rotation, which by itself warrants my interest
  • If there is no .sync folder in the backup directory (same level as the daily.X), then rsnapshot copies daily.0 to .sync
  • If there is a .sync, then use it as a helper for the rsync data transfer
  • Once the data transfer is completed, copy (hard link the usual rsnapshot way) .sync to daily.0

The key in all of this is that I can sneak in my cmd_preexec right before the data transfer, provided that I use this sync_first. Directory rotation and clean-up happens after sync, hence the sync_first.
In rsnapshot.conf:
sync_first 1

(TAB, again)

So the daily cron job just needs to be doing the following:
/usr/local/sbin/ssh_wake && \
/usr/bin/rsnapshot -c /etc/rsnapshot.conf sync && \
/usr/bin/rsnapshot -c /etc/rsnapshot.conf daily

(or whatever variation using ionice to lessen the I/O load on the backup server)

Final caveat: this sequence is likely to fail the first time it is executed, because the .sync directory does not exist yet.
But starting with the second day… things start working as expected. Voilà!

Avec le printemps, la marmotte siffleuse a6643fr est de retour. Le bruit est très aigu et difficilement supportable.

Hypothèse de travail, peut-être bien que l’alimentation sous-dimensionnée pousse ses derniers râles – et non pas le disque dur rajouté injustement accusé précédemment. 300 W, c’est bien léger et avait déjà fortement limité le choix de la carte vidéo de remplacement.

Un petit coup de NetOnNet.no plus tard, arrive sous deux jours ouvrés une alimentation Corsair TX650W.
Bien plus de connecteur courants SATA qu’il n’en faut (on se souvient que ce n’est pas évident), très jolis câbles et connecteurs robustes. L’alimentation se change très facilement et s’avère très silencieuse au premier démarrage.

L’avenir dira si cette très bonne première impression se confirme.

Dernière bonne blague, le a6643fr familial a un disque dur qui se prend pour une marmotte. Pas qu’il dorme à longueur de journée, mais plutôt qu’il soit un grand siffleur.
Que les disques se mettent à siffler avec l’âge, soit, mais pour un disque d’un an c’est un peu court.

Un peu de recherche sur le web, cela peut être du à une alimentation de mauvaise qualité – problème qui avait déjà été identifié.

Après plusieurs tentatives de redémarrage, la solution la plus robuste semble de mettre le disque dur de sauvegarde dans un boitier USB externe.
Plus de bruit depuis.

Rétrospective et hypothèse du jour : ce n’est pas vraiment HP qui nous a vendu cet unité centrale, c’est Apple. Avec pour plan machiavélique de nous dégouter du monde des PC pour de bon, et nous faire acheter un iMac. Ça se tient, non ?

Comparaison de prix rapide : un iMac 2.8 GHz Intel Core i7, écran 27 pouces, RAM 4 GB DDR3 1066 MHz, disque dur 1 To, carte graphique ATI radeon HD 4850 512 Mo, lecteur/graveur DVD double couche, carte son avec sortie numérique, souris Magic Mouse bluetooth, carte son, FireWire, sans-fil 802.11n, haut-parleur intégré, clavier international avec pavé numérique coûte 17 190 NOK livraison comprise. Et produit 18 dBA au repos.

Pour un équivalent PC, petit saut sur le site de Dell, gamme semi-professionnelle (on ne me surprendra plus à taper dans la gamme grand public) : un Dell Precision T1500, Windows 7 Professionnel 64 bit (je ne me fais pas d’illusion quant à la possibilité de remboursement de la taxe Microsoft pour installer un Ubuntu Lucid à la place), Intel Core i7 2.8 GHz, RAM 4 GB DDR3 1066 MHz, carte graphique NVidia Quadro FX 580 512 Mo, adaptateur DisplayPort to DVI, disque dur 1 To, lecteur/graveur DVD 16x, carte son Sound Blaster, Firewire, sans-fil 802.11n, anti-virus Tend Micro pour 15 mois, écran Dell UltraSharp 24 pouces, haut-parleurs, clavier, souris sans-fil, DVD avec pilotes coûte 22 214 NOK livraison comprise (17 371 NOK hors livraison). Pas de précision sur le niveau sonore.

Point de vue WAF, y’a pas photo.

Votre serviteur n’a pas de sympathie immodérée pour Google, mais les lenteurs de Firefox commençaient à quelque peu le fatiguer.

Suffisamment en tous cas pour jeter un coup d’œil approfondi à Google Chrome.
Comme tout le monde, on commence par aller voir chez Google, qui nous offre un lien vers un paquetage Ubuntu 64 bits. Parfait.

Sauf que… Qu’est-ce qui me garanti que le paquetage va être mis à jour ?
Je n’ai aucune envie d’aller vérifier régulièrement la dernière version, et je tiens en horreur les systèmes de mise à jour ad-hoc qui dépendent des lubies de chaque éditeur de logiciel.

Dans le genre, il a été servi le Guillaume.

Le paquetage google-chrome-beta installe un script /etc/cron.daily/google-chrome (qui s’exécute donc tous les jours). Ce script rajoute une clef d’authentification apt (ces clefs qui identifient les sources de paquetages auxquelles apt fait confiance) :
pub 1024D/7FAC5991 2007-03-08
uid Google, Inc. Linux Package Signing Key sub 2048g/C07CB649 2007-03-08

Le script s’assure aussi que la source de paquetages Google est réactivée en cas de mise à jour de la distribution.

Nous voici face à un paquetage qui s’occupe de lui-même d’assurer ses mises à jour et d’authentifier son éditeur auprès de mon apt. Qui se fait suffisamment confiance pour ajouter une clef d’authentification qui n’a pas été plus vérifiée que ça, comme elle a été servie en texte clair. Qui ouvre la porte à plein d’autres applications Google – la ligne sources.list.d/google-chrome-list est très générique :
deb http://dl.google.com/linux/deb/ stable main

Dubitatif le Guillaume.

J’aurais quand même bien aimé qu’on me demande mon avis.

On se retrouve à prendre des lignes de bus dont on ignorait jusqu’à l’existence.
Et qui vous baladent de partout, mais alors partout…

mar 29 2010

Ça dit Windows 2000

guillaume | Geek, Mobile | 0 Commentaire

mais il ne faut vraiment pas focaliser sur le « professionnel ».

mar 28 2010

Louer un film à Oslo

guillaume | Fjord, Geek | 0 Commentaire

Alternative numéro un, affronter les éléments et sortir louer un DVD. 50 couronnes (6 €), horaires aussi limitées que le choix.

Alternative numéro deux, dégainer iTunes depuis son canapé. 4 $ (3 €) pour louer un DVD pour 24 heures, vaste choix, dans la dizaine de minutes de téléchargement en ADSL 2. Pour ceux qui ont précieusement conservé leur compte iTunes américain.

Alternative deux testée samedi soir, très convaincante.

La recette de la brioche est au point, mais sa cuisson est un peu trop prononcée – principalement à cause du dernier temps de maintient au chaud.

À la rescousse, la possibilité qu’a la CG508 de créer ses propres recettes :

  • Avec la touche MENU, naviguer jusqu’à la recette prédéfinie numéro 5
  • Préciser POIDS à 750 g et (important) CUISSON légère (icône de gauche représentant un pain « vide »)
  • Appuyer sur la touche MODIFIER jusqu’au bip
  • Entrer les temps suivants en appuyant sur MODIFIER entre chaque durée : 00, 03, 20, 40, :20, 24, :10, 51, 52, 00
  • Un ultime MODIFIER génère un bip long
  • Appuyer sur la touche ENREGISTRER. Une succession de trois bips indique que la nouvelle recette est enregistrée.

Pour programmer une brioche, il suffit alors de mettre les ingrédients comme indiqué, puis choisir la recette 5 via la touche « mes recettes préférées » (celle avec un livre) suivie de DEMARRER.

Effluves issues d’un mirrordir trempant dans la tasse de mes sauvegardes disque-à-disque :

$ sudo grep -R mirrordir /usr/local/sbin/ | wc -l
2

[ Mis à jour suite au rajout d'un WD20EARS ]

Symptômes : i/o wait prend des proportions dantesques, iotop nous dit que l’écriture du journal ext4 est la cause du gel momentané de mplayer, performances en copie pathétiques…

Il semble que la cause est la taille des cylindres du WD15EARS (et du WD20EARS) : 4096 octets au lieu des 512 octets habituels. Western Digital n’a pas cru bon d’informer les pilotes de cette particularité, et retourne un bien mal avisé 0 :

$ sudo hdparm -i /dev/sdb
/dev/sdb:
Model=WDC, FwRev=80.00A80, SerialNo=WD-XXXXXXXXXXX
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
BuffType=unknown, BuffSize=0kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=2930277168
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=no WriteCache=enabled
Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6,7
* signifies the current active mode

ou bien pour la version 2 TB:
Model=WDC WD20EARS-00MVWB0, FwRev=51.0AB51, SerialNo=WD-XXXXXXXXXXX
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=3907029168
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=no WriteCache=enabled
Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6,7
* signifies the current active mode

Dur dur pour partitionner son disque selon des partitions alignées correctement, dans ces conditions.

Le mode d’emploi est assez simple. Pour avoir une seule partition XFS qui couvre tout le disque, avec un parted assez récent (2.3 fait l’affaire) :

$ sudo parted /dev/VOTRE_DISQUE_DUR
(parted) mklabel
-> gpt
# Testé uniquement avec le format de table de fichier GPT
(parted) unit s
# On choisit le nombre de secteurs comme unité de mesure
(parted) mkpart primary xfs 0% 100%
(parted) print
(parted) quit

La création du système de fichier n’a rien de particulier :

$ sudo mkfs.xfs /dev/PARTITION

Page 2 de 18

© 2007 Au petit plombier | Wordpress | Gallerie | dKret2 2.1 | WPG2 Optimized | XHTML | CSS | Haut |