2008-12-30 17:47

Vous disposez sur votre système d’une batterie de disques configurés avec du RAID1 logiciel (/dev/md0). L’espace de stockage est géré par LVM.

Vos deux disques étant en mirroir, il peut être utile de « casser » le RAID pour pouvoir disposer librement du stockage sur le deuxième disque, ou encore, dans le cadre d’une refonte, d’installer un tout nouveau système sur le deuxième disque, qui remplacera le premier à l’avenir.

En premier lieu, quelques commandes utiles en tout temps pour le diagnostic :

mdadm, le couteau suisse du RAID logiciel :

cat /proc/mdstat
mdadm --detail /dev/md0

La batterie de commandes LVM2 :

pvdisplay
pvs
vgdisplay
vgs
lvdisplay
lvs

La manipulation ne coule pas de source. En voici les étapes :

cat /proc/mdstat montre les deux disques actifs (U pour Up). On marque le deuxième disque (/dev/hdc1) comme défectueux puis on l’enlève de la séquence de RAID pour pouvoir l’utiliser librement :

mdadm --manage --set-faulty /dev/md0 /dev/hdc1
mdadm -r /dev/md0 /dev/hdc1

L’objectif maintenant est de remonter la deuxième moitié du RAID/LVM de manière indépendante, mais sans perdre les données dupliquées présentes.

Il faut donc créer une nouvelle séquence RAID identique à la première en partant du deuxième disque. L’initialisation de /dev/md1 se fait comme suit :

mdadm --create --verbose /dev/md1 --level=mirror --force --raid-devices=1 /dev/hdc1

cat /proc/mdstat doit montrer les deux séquences.

La difficulté désormais est de faire en sorte que le système voie les deux VGs de manière indépendante, car toute commande LVM affiche désormais un avertissement du style :

Found duplicate PV LbpGyrR4uvsZivUwqnJQMYoZbCPTCpgu: using /dev/md1 not
/dev/md0

Le soucis est que les deux PVs sur les deux raids possèdent le même UUID, du coup LVM utilise le PV qui n’est pas celui du système actuel. Le problème est ici assez insoluble. Le seul moyen de s’en sortir est d’utiliser la commande pvcreate pour attribuer un nouveau UUID.
D’autre part, impossible d’utiliser cette commande sur un PV qui contient des LVs actifs (pvcreate refuse).

Ajouter des filtres sur /dev/md0 ou /dev/md1 dans /etc/lvm/lvm.conf ne donne rien non plus car pvcreate ne les verra pas.

Voici donc la manipulation :

Vérifiez la présence d’un fichier /etc/lvm/backup/NOM_DU_VG, ou faite en une sauvegarde à l’aide de la commande vgcfgbackup.

Initialisez un volume physique (PV) vierge sur /dev/md1 en forçant la création :

pvcreate -ff /dev/md1

Puis un VG :

vgcreate vg2 /dev/md1

Copiez le fichier /etc/lvm/backup/NOM_DU_VG et éditez le :

cp /etc/lvm/backup/vg /tmp/vg2
vi /tmp/vg2

Modifiez tous les UUID du fichier de sauvegarde. Il suffit par exemple, dans chaque UUID, de modifier un chiffre. Modifiez aussi le nom du vg. Pour le UUID du PV, mettez celui du PV récemment initialisé sur /dev/md1 (commande pvdisplay).

Il est maintenant possible de restaurer la sauvegarde :

vgcfgrestore --file /tmp/vg2 vg2

Si tout s’est bien passé, on peut ensuite activer les LVs puis les monter :

vgchange -a y vg2
mount /dev/vg2/LV /mnt/test/
2008-12-30 17:47 · Tags: , ,
2008-11-22 18:17

Problème

La Livebox que j’utilise pour me connecter en Wifi me pose le problème suivant :

Le serveur DHCP envoie sa propre adresse 192.168.1.1 comme serveur DNS… logique, me direz-vous, sauf que la boîboîte est incapable de répondre aux requêtes DNS inverses, utilisées par pas mal d’applications. Dès qu’une de ces requêtes est envoyées, donc, l’application en question gèle pendant quelques secondes jusqu’à un certain délai.

$ time nslookup 74.125.43.147 192.168.1.1
;; connection timed out; no servers could be reached

real    0m15.028s
user    0m0.016s
sys     0m0.000s

Alors qu’en utilisant un serveur DNS qui fonctionne :

$ nslookup 74.125.43.147 80.10.246.2
Server:         80.10.246.2
Address:        80.10.246.2#53

Non-authoritative answer:
147.43.125.74.in-addr.arpa      name = bw-in-f147.google.com.

Authoritative answers can be found from:

Jusqu’à maintenant, j’avais ajouté les serveurs DNS à la main dans /etc/dhcp3/dhclient.conf
en utilisant la directive prepend domain-name-servers 80.10.246.2.

Oui mais voila, à chaque fois que me connecte sur un autre réseau Wifi non Livebox, les serveurs DNS (du réseau Livebox) ne sont plus accessibles, et du coup il fallait modifier le resolv.conf à la main pour retirer lesdits serveurs DNS.

Solution

Ajouter un script bien placé, qui vérifie si on est derrière une Livebox pour modifier le fichier resolv.conf comme il se doit.

Le script est à placer dans /etc/network/if-up.d/fixdns avec le contenu suivant :

#!/bin/sh
# script pour ajouter d'autres serveurs dns derrière une livebox
# si on reconnait la livebox, on fait la modif dans le resolv.conf

if arp "$DHCP4_DHCP_SERVER_IDENTIFIER" | grep -q 00:1b:bf:3d:21:49
then
        cp /etc/resolv.conf.livebox /etc/resolv.conf
fi

Et voila, le tour est joué ! Cette solution a le mérite de fonctionner avec NetworkManager, qui n’exécute pas les scripts de /etc/dhcp3/dhclient-enter-hooks.d/.

2008-11-22 18:17 · Tags: , , ,
2008-11-13 21:56

J’ai récemment récupéré une tablette Trust TB-2100 :

$ lsusb
Bus 002 Device 005: ID 08ca:0021 Aiptek International, Inc. APT-2 Tablet

J’ai enfin réussi à faire fonctionner la bête.

Il faut installer le pilote xorg :

sudo aptitude install xserver-xorg-input-aiptek

Ensuite créer le fichier /etc/udev/rules.d/61-aiptek.rules pour ajouter le périphérique dans udev :

BUS=="usb", DRIVER=="aiptek", KERNEL=="event[0-9]*", SYMLINK+="input/aiptektablet"
KERNEL=="event[0-9]*", SYSFS{vendor_id}=="0x08ca", SYMLINK+="input/aiptektablet"
SUBSYSTEMS=="usb", DRIVERS=="aiptek", ATTRS{size}=="3000x2250", ATTRS{model_code}=="0x0064", SYMLINK+="input/aiptektablet"

Dans Ubuntu Intrepid, la configuration Xorg des périphérique d’entrée ne se fait plus dans xorg.conf, mais dans HAL.
On ajoute un fichier /etc/hal/fdi/policy/10-aiptek.fdi contenant :

<?xml version="1.0" encoding="ISO-8859-1" ?>
<deviceinfo version="0.2">
<device>
<match key="info.product" contains="Aiptek">
<merge key="input.x11_driver" type="string">aiptek </merge>
<merge key="input.x11_options.SendCoreEvents" type="string">true </merge>
<merge key="input.x11_options.Type" type="string">stylus </merge>
<merge key="input.x11_options.Mode" type="string">absolute </merge>
</match>
</device>
</deviceinfo>

Enfin, on redémarre le système et on prie pour que ça marche. Je n’ai pas réussi en redémarrant simplement HAL et Xorg.

Commandes utiles pour déboguer :

xinput
hal-device
udevinfo -a -p $devpath # on trouve devpath dans dmesg

Sources :

2008-11-13 21:56 · Tags: , ,
2008-07-29 14:43

rsync est un outil très puissant de copie/transfer/sauvegarde de fichiers sous Unices.

Pour effectuer une sauvegarde triviale, on peut l’utiliser de la manière suivante :

rsync -av MES_DONNEES DOSSIER_SAUVEGARDE

Plutôt que de refaire une copie intégrale de mes données dans le dossier de sauvegarde à chaque sauvegarde, il est plus intelligent d’utiliser rsync combiné avec le système de fichiers ext3 pour faire des sauvegardes incrémentales.

cp -al DOSSIER_SAUVEGARDE_HIER DOSSIER_SAUVEGARDE
rsync -av MES_DONNEES DOSSIER_SAUVEGARDE

Le cp -al recopie le dossier en créant des nouveau répertoire, mais en faisant des liens en dur vers les fichiers. En faisant un rsync par dessus, seuls les fichiers modifiés sont copiés. Ainsi, on utilise de l’espace disque en plus seulement pour les nouveaux fichiers. Le plus fort, c’est qu’on peut accéder à chaque dossier de sauvegarde de manière très rapide car ils sont tous identiques aux originaux. Un mini système de gestion de versions très simple à mettre en place.

Mais le plus fort c’est que rsync peut tout faire à notre place :

rsync -av --link-dest=DOSSIER_SAUVEGARDE_HIER MES_DONNEES DOSSIER_SAUVEGARDE
2008-07-29 14:43 · Tags: ,
2008-07-22 10:40

Pour faire des réglages avancés dans Thunderbird, il faut aller dans Édition > Préférences > Avancé > Éditeur de configuration

Pour personnaliser l’en-tête de réponse du type “Toto a écrit :”, comme ajouter la date, il faut changer mailnews.reply_header_type pour 2. On peut aussi personnaliser cet en-tête en utilisant la valeur 3 et les champs complémentaires mailnews.reply_header_*

Pour que Thunderbird récupère automatiquement les nouveaux messages des boîtes partagées, il faut changer mail.check_all_imap_folders_for_new pour true.

2008-07-22 10:40 · Tags:
2008-07-21 22:02

xmllint est un programme bien pratique, fourni en standard dans la plupart des distributions, dans le paquet libxml2-utils.

$ xmllint /tmp/truc.xml 
/tmp/truc.xml:3: parser error : Opening and ending tag mismatch: tata line 2 and toto
</toto>
       ^
/tmp/truc.xml:4: parser error : Premature end of data in tag toto line 1

^
2008-07-21 22:02 · Tags: