Category Archives: Linux

Récupérer la table des partitions après une fausse manip sous Linux…

Cet article fait suite à la mésaventure arrivée à un client. Lors d’une manipulation dangereuse (sfdisk…), il a totalement écrasé la table des partitions de son disque système. Fort heureusement il a laissé son système en marche, il ne l’a surtout pas redémarré.

 

Attention, cet article s’adresse à des utilisateurs confirmés. Si vous n’avez pas l’habitude de fdisk, ou que vous avez déjà redémarré votre machine, cet article n’est pas pour vous. Si vous perdez vos données, vous en êtes responsable. Ce n’est pas parce que ça a marché dans mon cas, que ça marchera dans le votre. Les commandes données ne sont pas complètes, il ne s’agit pas d’un tutoriel. L’explication sera parlante aux personnes capables de réaliser les commandes. Bref, tout ceci pour vous dire que je ne suis pas responsable en cas de soucis sur vos données.

 

Pourquoi c’est une bonne idée de ne pas l’avoir redémarré après l’erreur ?

Lors de son démarrage, le noyau a mémorisé la table des partitions de son disque de démarrage. C’est d’ailleurs pour ça qu’on doit redémarrer la machine, ou lancer l’outil partprobe après avoir modifié la table des partitions du disque de démarrage. Sinon, la table des partitions du disque est différente de la table des partitions mémorisée par le noyau…

Heureusement qu’il n’a pas lancé partprobe /dev/sda !

En fait, il a lancé la commande. Et c’est ce qui lui a mis la puce à l’oreille. Partprobe lui a répondu par pleins d’erreurs, qui pourraient être traduites par je ne peux pas changer la table des partitions dans le noyau, car les partitions utilisées ont été modifiées. En effet, sa partition / est forcément montée, et dans la nouvelle table des partitions, elle n’existe plus. Le noyau continue donc d’utiliser l’ancienne table, puisqu’il s’appuie sur cette ancienne table pour fonctionner.

La méthode.

L’idée repose sur le fait que justement, le noyau a gardé en mémoire l’ancienne table des partitions. On va donc regarder ce qu’il a en mémoire, et remettre la même chose sur le disque. La machine ne doit en aucun cas être arrêtée ou redémarrée tant que l’opération n’est pas complète. On pourra voir ce qu’il a en mémoire à l’aide des informations accessibles dans /sys.

[root@localhost ~]# cat /sys/block/hda/hda1/start
63
[root@localhost ~]# cat /sys/block/hda/hda1/size
208782

L’opération est à refaire pour chaque partition.

[root@localhost ~]# cat /sys/block/hda/hda2/start
208845
[root@localhost ~]# cat /sys/block/hda/hda2/size
16563015

Dans mon exemple, j’ai deux partitions:

  • hda1 commençant au secteur 63 de taille 208782 secteurs.
  • hda2 commençant au secteur 208845 de taille 16563015 secteurs.
C’est donc le moment de lancer fdisk, et de détruire toutes les mauvaises partitions qu’on a créé. Je ne détaillerai pas ces opérations. Une fois que notre table des partitions est vide, on peut mettre les valeurs qu’on a trouver:
Commande (m pour l'aide): p

Disque /dev/hda: 8589 Mo, 8589934592 octets
255 heads, 63 sectors/track, 1044 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système

Commande (m pour l'aide):

Les partitions sont affichées en cylindres, ce qui ne nous arrange pas. Passons les en secteurs avec la commande u

Commande (m pour l'aide): u
Modification des unités d'affichage/saisie à secteurs

Commande (m pour l'aide): p

Disque /dev/hda: 8589 Mo, 8589934592 octets
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 secteurs
Unités = secteurs de 1 * 512 = 512 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système

Commande (m pour l'aide):
Faisons notre partition 1, début 63 et taille de 208782. Attention, quand on précise la taille, on enlève 1 à la valeur trouvée dans /sys. Je dois avouer que je ne sais pas pourquoi, mais sinon, on ne tombe pas sur un nombre de cylindres entier… Si quelqu’un a une explication plus propre, je suis preneur ;) . Donc on fera +208781.
Commande (m pour l'aide): n
Action de commande
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4): 1
Premier secteur (63-16777215, par défaut 63):
Utilisation de la valeur par défaut 63
Dernier secteur ou +taille or +tailleM ou +tailleK (63-16777215,
par défaut 16777215): +208781

Commande (m pour l'aide): p

Disque /dev/hda: 8589 Mo, 8589934592 octets
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 secteurs
Unités = secteurs de 1 * 512 = 512 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/hda1              63      208844      104391   83  Linux

Commande (m pour l'aide):
Ça a l’air d’être ce qu’on veut. Seconde partition maintenant, début 208845 de taille 16563015, donc +16563014 pour fdisk:
Commande (m pour l'aide): n
Action de commande
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4): 2
Premier secteur (208845-16777215, par défaut 208845): 208845
Dernier secteur ou +taille or +tailleM ou +tailleK (208845-16777215,
par défaut 16777215): +16563014        

Commande (m pour l'aide): p

Disque /dev/hda: 8589 Mo, 8589934592 octets
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 secteurs
Unités = secteurs de 1 * 512 = 512 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/hda1              63      208844      104391   83  Linux
/dev/hda2          208845    16771859     8281507+  83  Linux

Et là, oh miracle, on a retrouvé notre table originale. Un reboot permet de vérifier ça (mais attention, si vous redémarrez et que vous n’avez pas passé les bonnes tailles, il faudra alors utiliser un outil de récupération de partitions, avec les risques d’erreurs que ça engendre…).

Accéder à un LVM depuis un disque de secours

Un problème courant, avec LVM, c’est de démarrer une machine installée avec LVM depuis un support externe, et de pester car le support externe ne « voit » pas le LVM. On a parfois ce soucis en utilisant le mode rescue de certains hébergeurs de serveurs dédiés. Alors comment faire ?

Le soucis est que le système possède sans doute les outils LVM, mais ne lance pas de recherche d’installation LVM existante. Il suffit donc de lancer cette recherche à la main. La première chose à faire est de lancer (en root) la commande lvscan. Celle-ci va rechercher des signatures de type LVM parmi tous les supports de stockages de la machine. Elle devrait donc détecter nos disques LVM. Par contre, une fois les volumes logiques détectés, ils ne sont pas pour autant utilisables !

lvscan

En effet, la seconde étape va être d’activer ces groupes de volumes, car par défaut, ils sont en mode « non disponibles ». C’est ce qu’on fait avec la commande vgchange. En lui passant l’option -a y, on met les groupes de volumes en mode « disponible » (l’option -a veut dire available et le y est pour yes). La sortie de la commande doit nous afficher qu’elle a bien activé les groupes de volumes.

vgchange -a y

On peut alors les utiliser, et les monter dans notre arborescence pour continuer notre dépannage, leur contenu est utilisable.

Virtual Box très lent sous OS X 64 bits (ou comment passer OS X en 32 bits)

Lors de son démarrage, les MBP équipés du processeur i7 (et sans doutes d’autres) démarrent avec un noyau 64 bits.

Malheureusement, avec un noyau en 64 bits, VirtualBox devient extrêmement lent (affichage du menu GRUB en plus d’une minute…). Moi qui utilise beaucoup les machines virtuelles pour mon activité, me voilà bien embêté. Un ticket est ouvert chez VirtualBox pour le moment, mais pas de correctif publié.

Une solution temporaire est de reconfigurer le Mac pour qu’il démarre en 32 bits (à priori, peu de contres indications au mode 32 bits, les programmes 64 bits continuent de fonctionner). Pour ça, on a le choix:

  • Au boot du Mac, il faut appuyer simultanément sur 3 et 2. Pratique pour le faire une fois de temps en temps, mais pas très pratique pour les têtes en l’air qui oublieraient !
  • Rendre le changement permanent à l’aide de la commande « sudo systemsetup -setkernelbootarchitecture i386″. La commande « sudo systemsetup -setkernelbootarchitecture x86_64″ permettant de revenir au boot par défaut en 64 bits. Attention, ça ne marche pas si on change de disque de démarrage bien sûr.

Voilà, maintenant mon VirtualBox fonctionne, je peux travailler normalement !

Passage à Ubuntu Edgy, essais de Beryl/Emerald

Ben voilà une news qui ne va pas intéresser du tout les gens qui n’utilisent pas GNU/Linux !!

En effet, je viens de mettre à jour mon ordinateur portable vers la dernière version de Ubuntu, la dénommée Edgy. J’ai effectué la mise à jour le jour de la sortie en utilisant les miroirs de free, car les miroirs officiels étaient un peu surchargés !

La mise à jour s’est très bien passé, et j’ai pu continuer à travailler sur les projets sur lesquels j’étais sans soucis. Cette semaine, la présence d’un jour férié en plein milieu m’a motivé pour faire quelques petits changements et quelques essais de configuration. ?tant intéressé par le bureau 3D, j’ai donc installé beryl et emerald. Et là avalanche de problèmes, et j’ai pu avoir droit à un gros bug de la distribution…

Mon ordinateur (un IBM T41) étant équipé d’une carte vidéo de type ATI (une FireGL9000), j’ai d’abord essayé d’utiliser les drivers spécifiques ATI (les fglrx) avec Xgl. Je redémarre, et je suis sous mon bureau gnome habituel. Tout content, je lance Beryl (beryl-xgl) et le bureau démarre sous beryl. J’arrive à faire tourner le cube, tout semble parfait. Sauf que dès que j’essaie de déplacer une fenêtre, le bureau crashe lamentablement, et je me retrouve devant l’écran de connexion. Après quelques recherches sur divers forums, blogs et sites, il semble que ma carte puisse fonctionner avec AIGLX, ce qui permet d’une part d’utiliser le pilote libre pour ma carte vidéo, et d’autre part de ne pas avoir de serveur spécifique à lancer, comme avec Xgl.

Là, second problème. J’ai beau faire tout ce qu’il faut, je n’arrive pas à avoir glx en dri… Le serveur X active bien les extensions, mais le glxinfo me retourne toujours un  » direct rendering: No ». Après de bonnes recherches, j’ai fini par désinstaller tout ce qui concerne le driver propriétaire fglrx. Puis par réinstaller les bibliothèques libGL: »sudo apt-get install –reinstall libglu1-mesa libglew1 libgl1-mesa-dri libgl1-mesa-glx ». Et là, je redémarre le serveur X et miracle, j’ai bien le direct rendering.

Je peux donc démarrer beryl en mode AIGLX. Aïe, problème, j’ai seulement les deux tiers de mon écran sur lequel je peux voir le bureau. Je pense donc que la mémoire de ma carte vidéo n’est pas suffisante pour marcher en 24 bits avec beryl sur du 1400×1050… Je change donc le paramètre pour passer en mode 16 bits. Et là tout marche parfaitement.

Enfin, jusqu’à ce que j’ai l’idée saugrenue de lancer firefox. Et dès que j’arrive sur une page contenant du flash, paf, firefox meurt. Je réessaie sans beryl, et là, pareil, firefox crashe dès que j’arrive sur une page contenant du flash. Si je me remet en 24 bits, tout va bien. La solution est moins évidente cette fois. Il faut en effet éditer le fichier « /etc/firefox/firefoxrc » et ajouter la ligne « export XLIB_SKIP_ARGB_VISUALS=1″. Et là, ça fonctionne enfin. Et ça, c’est un bug dans Edgy, pas dans Beryl !

Malgré tout ça, j’ai maintenant un beau bureau sous Beryl et Emerald. Alors si plein de fonctions de Beryl sont plutôt visuelles sans vrai apports, il y en a quand même un certain nombre particulièrement intéressantes, comme la visualisation de toutes les applications ouvertes ensembles sur le bureau, et j’en passe.

Il n'a de libre que le nom.

Peut-être avez vous entendu parlé de l’article de Mr Jean Dominique Giuliani intitulé Il n’a de libre que le nom et qui a notamment été publié par Libération. Je vous invite à le lire, si ce n’est pas déjà fait. En effet, il contient des éléments assez caractéristiques et que je rencontre régulièrement chez des gens qui ne connaissent pas ou mal le logiciel libre.

Mr Giuliani fait en effet l’amalgame dangereux entre gratuité et liberté. En effet, il part du principe qu’un logiciel libre est gratuit, et parce qu’il peut être redistribué gratuitement, il a été réalisé également gratuitement. Le problème est que son approche ne correspond pas à l’industrie du logiciel libre que l’on rencontre sur le terrain. Si on prend des exemples comme le noyau Linux, souvent montré en exemple, on se rend vite compte que les principaux développeurs du logiciel sont tous salariés pour travailler sur ce projet (par des sociétés comme RedHat, IBM, Novell, ARM ou d’autres). Un logiciel comme MySQL est également développé par une entreprise commerciale, qui salarie ses développeurs pour travailler sur le projet. Et on peut continuer comme ça pour d’autres grands projets, comme le système de fichiers ReiserFS, ou la suite OpenOffice.org.

La liberté du logiciel libre ne repose pas sur la gratuité, sinon on parlerait de logiciels gratuits et non pas de logiciels libres. Et les anglo-saxons ne préciseraient pas « free as in free beer » (free comme dans bière gratuite) ou « free as in free speech » (free comme dans liberté de parole) si justement l’amalgame n’était pas problématique. Il faut dire qu’ils utilisent le même mot pour gratuité et liberté, ce qui ne simplifie pas leur compréhension… La gratuité du logiciel libre présenté par Mr Giuliani n’est qu’une confusion née de la méconnaissance qu’il a du sujet.

De plus, non content de confondre logiciel libre et logiciel gratuit, on retrouve également une confusion avec les freeware. Dans le logiciel libre, l’auteur du logiciel en reste propriétaire, et la protection intellectuelle associée à son logiciel est la même que s’il avait édité un logiciel propriétaire. Il a juste choisi, dans un cas de ne pas donner accès au code source de son logiciel, et dans l’autre cas, a autorisé un accès au code source du logiciel à des fins d’amélioration, d’éducation de personnalisation etc. Mais il reste l’auteur du logiciel, et en fait ce qu’il veut.

Pour ce qui est de l’affrontement des sociétés de services face aux éditeurs de logiciels propriétaires, on constate en effet aujourd’hui une mise en opposition du service face au logiciel. Ceci pose un problème de taille. En effet, celà laisse supposer que les logiciels propriétaires ne nécessitent pas de services pour fonctionner, et que de faire appel à un éditeur de logiciels propriétaires pour acquérir la licence nécessaire à ce logiciel permet de planifier et de maîtriser le temps et l’amortissement de ces logiciels. On peut rêver, mais ce n’est pas réaliste. Les personnes offrant du service sur des logiciels propriétaires comme Oracle, SAP ou même Microsoft dont le but est que le logiciel se suffise à lui même, ne manquent pourtant pas de travail. De ce coté là, le logiciel libre n’est pas fondamentalement différent. Il a besoin de service pour être configuré, adapté, intégré à l’existant. Comme les autres. Ni plus, ni moins.

Pour résumer le tout, on peut dire que le logiciel libre n’a rien de gratuit, et n’a pas été présenté comme tel par toutes les personnes connaissant un minimum le logiciel libre. Que l’accès au code source, ne viole pas la propriété qu’en a l’auteur du logiciel. Et enfin, que le logiciel libre n’est pas le seul à avoir besoin de service pour être adapté à l’environnement et à l’utilisation qui doit en être faite, c’est le cas de tous les autres logiciels. Quant à parler du prix, si l’exemple du ministère des finances est donné dans l’article, il doit bien faire sourire les acteurs informatiques français. Un projet de 39 milions d’euros, sur trois années (cas du projet copernic du ministère des finances) n’en fait pas, et de très très loin, les logiciels les plus chers de l’histoire… Il suffit de comparer ça aux 78 milions d’euros dépensés simplement en licences logicielles (sans le service) dépensées pour la seule année 2002 par le ministère des finances (source).