GPT et UEFI

  • GPT : remplace le partitionnement classique avec MBR (limite: 4 partitions).
  • UEFI : remplace ou complète (selon les constructeurs) le BIOS. Même principe, plus de fonctionnalités (y compris de vous interdire l'accès à votre machine au boot).



Mais j'ai déjà installé Linux !

Snif, format et réinstalle ?

Mais non, on peut s'en tirer. Et on va en profiter pour taper quelques commandes pas forcément disponibles à l'installation.

D'un autre côté, nous n'aurions pas eu besoin de taper ces commandes pour préparer un disque vierge.


Identification du hardware
  • lshw


J'en profite pour ouvrir une parenthèse et parler d'un paramètre de lspci qui permet de connaître les modules rattachés à un device:

  • lspci -k


Sauver ce qui a déjà été installé à l'aide d'une clé usb
  • Clé usb montée sur /mnt/clef
  • Disque remonté sur /mnt/disk (cf plus bas)

#~ mount -o bind / /mnt/disk
#~ tar czpCf /mnt/disk /mnt/clef/mondisque.tar.gz .

Explications du tar:

  • czp : créer l'archive, comprimez les données, préserver les permissions
  • Cf /mnt/disk : C permet de chrooter sur le répertoire /mnt/disk (on restaurera ainsi /sbin et non pas /mnt/disk/sbin).
  • /mnt/clef/mondisque.tar.gz : archive à créer (argument du flag -f vu ci dessus et indiqué au dessus pour des raisons de lisibilité, alors qu'il serait mieux à côté de cette option, mais avec tar on ne fait pas toujours ce que l'on veut.)
  • . : partir de /mnt/disk
  • Si vous avez de la place sur la clé usb, enlevez le flag -z , la copie sera dix fois plus rapide.

Et voila, si vous aviez installé un Linux, vous voila prêt pour tout effacer et le récupérer rapidement ensuite.


Partitionnement avec gptfdisk

Le GPT, qu'est-ce donc ?

GPT remplace le MBR.

Il y a en plus des subtilités selon que votre carte mère a un bios classique ou le support UEFI.

Les cartes mères récentes n'ont plus de BIOS, mais un UEFI («support firmware étendu») qui remplace celui-ci, avec les mêmes missions.

Préparation des outils
  • Boot sur un media d'installation
  • Activer le réseau. Au hasard: dhcpcd eth0
  • Mettre à jour la liste des paquets: pacman -Sy
  • Charger gptfdisk, pour le partitionnement: pacman -S gptfdisk
    • Avec une distrib récente, gptfdisk sera présent sur le media d'installation.


Schéma de partitionnement et boot futur

Nous sommes obligés d'abandonner grub qui ne supporte pas le partitionnement gpt.

Pour ma part, j'ai choisi grub2, qui m'a l'air d'être le choix le moins pire.

Les bios non-UEFI nécessitent la création d'une partition de 2 Mo au début du disque.

  • Cette partition sera utilisée par grub2 pour stocker des informations.
  • Le Dell 6420 a l'air d'avoir un firmware bâtard, entre le bios et l'uefi. Dans le doute, et après avoir lu des choses très méchantes sur son support optimus+uefi, j'ai activé l'option legacy. J'ai donc créé la partition nécessaire à grub2.

Attention, car avec un partitionnement GPT utilisé sans UEFI, vous ne pourrez plus installer un MS-Windows sans grosses bidouilles.

  • Il vous faudra rajouter des partitions dans le mbr (cela s'appelle un hybrid mbr quand c'est utilisé en parallèle avec le gpt).
  • http://www.rodsbooks.com/gdisk/hybrid.html


Utilisation de gdisk
  • A conventional GPT disk contains a protective MBR with a single partition, of type 0xEE (EFI GPT), defined. This partition spans the entire size of the disk or 2 TiB, whichever is smaller. The intent is to keep GPT-unaware OSes and utilities from trying to modify the disk.
  • gdisk remplace fdisk

Lancez gdisk sur votre device (ex: /dev/sda).

  • Si votre disque est au format MBR (livré partitionné à l'ancienne), une conversion automatique sera appliquée.
  • Vous devez valider la conversion (avec w) et quitter.
  • Sinon, vous pouvez créer une nouvelle table de partition GPT avec la commande o.

Ensuite, vous pouvez commencer à créer des partitions avec n

Nous commençons par la partition de 2 Mo, réservée à grub2.

  • Cette partition ne doit pas forcément être la première, mais elle doit se trouver sous les deux premiers téraoctets (ce qui nous laisse un peu de marge pour les disques SSD).
  • n
  • numéro de partition : 1
  • Premier secteur : validez, l'alignement sera automatique.
  • Dernier secteur : +2M
  • Hex code ou GUID : EF02

Ensuite, partition Linux (data)

  • Même principe que ci-dessus.
  • Hex code : 8300

Et enfin, partition swap pour l'hibernation

  • Hex code : 8200

C'est fini. On écrit les modifications et on quitte.

  • w (pour ceux qui n'ont pas suivi)

Voilà, il ne reste plus qu'à formater les partitions à la manière habituelle (mkfs.ext4 /dev/sda2 -L linux_root par exemple).


Support Kernel de GPT

Si vous compilez vos noyaux vous-même, vous aurez besoin d'activer cette option:

  • FS/Partitions : cocher PARTITION_ADVANCED
  • Une fois cette option activée, choisissez : EFI GUID Partition support.

Dans le cas contraire, vous allez vous taper un kernel panic lors du mount de votre partition Linux.

  • Le Kernel Panic indiquera qu'il n'a trouvé que sda1 (si vous n'avez qu'un disque, sinon ça sera un autre device bien sûr).
  • Ce device correspond en réalité à l'unique partition visible sous le système de partitionnement MBR (en d'autres termes, sda1 est la partition de protection MBR créée par GPT).



Installation et configuration de GRUB2

Avec la partition linux ssd sur : mount /dev/sda2 /mnt/dest


# modprobe dm-mod
# mount -o bind /dev /mnt/dest/dev
# mount -t proc /proc /mnt/dest/proc
# mount -t sysfs /sys /mnt/dest/sys
# chroot /mnt/dst bash
# pacman -Sy
# pacman -S grub2-bios
# tar cpzf vieux_grub.tar.gz /boot/grub 
# mv /boot/grub /boot/vieuxgrub
# grub_bios-install --boot-directory=/boot --no-floppy --recheck /dev/sda
# grub-menulst2cfg /boot/vieuxgrub/menu.lst.pacsave /boot/grub/grub.cfg

Le module dm_mod (device mapper) a l'air requis.

Sans lui, grub-probe semble avoir du mal à détecter les disques et les partitions. Il est nécessaire de le charger avant le chroot.


Sauf que ça ne boote pas

Cette commande est insuffisante


# grub-menulst2cfg /boot/vieuxgrub/menu.lst.pacsave /boot/grub/grub.cfg

En effet, mes partitions sont décalées depuis la création de la première (dédiée à grub).

On peut tester l'ajustement des indices avec l'option e depuis grub, au boot.

Ensuite, il convient bien sûr de modifier de façon permanente /boot/grub/menu.cfg


J'ai également eu un problème de nommage des partitions. n'avais pas mis le même label quand je les ai recréées.

Il suffit de les renommer:


# e2label /dev/sda2 arch_root
# mkswap /dev/sda3 -L arch_swap



Support du TRIM


tune2fs -o discard /dev/sda2

Vous pouvez également le préciser dans /etc/fstab

  • notez le flag discard dans les options de montage de la partition arch_root.
  • le flag noatime est expliqué juste en dessous, un peu de patience…

LABEL=arch_root / ext4 defaults,noatime,discard 0 1
LABEL=arch_swap swap swap defaults 0 0



Astuces diverses

L'option de montage noatime

Dans /etc/fstab :


/dev/sda2 /home ext4 defaults,noatime,discard 0 1

Notez l'utilisation judicieuse de discard, déja évoqué ci-dessus (pédagogie, répétition inutile ou boucle infinie dans les explications ? Je vous laisse seuls juges).


Ramdisk pour /tmp

Certaines sources vous conseillent de faire un ramdisk pour y monter /tmp.

Ce n'est pas très avisé, car /tmp n'a pas une taille prévisible. On peut y trouver aussi bien quelques fichiers de 10Ko que la grosse archive de 4Go que vous êtes en train de déplier avec midnight-commander.

À moins d'avoir vraiment beaucoup de ram, ce n'est donc pas conseillé.

Maintenant que vous voila prévenus, voici comment opérer:


none    /tmp    tmpfs   nodev,nosuid,noatime,size=768M,mode=1777        0       0

À noter qu'il me semble que l'installation de base Arch propose une ligne de ce style dans son /etc/fstab.


Compiler en ram

Il est tentant, mais dangereux de compiler dans un ramdisk.

  • tentant, pour les temps d'accès rapides.
  • dangereux, car c'est un coup à perdre toutes ses sources en cas de plantage de la machine.

On peut décider de transiger, et de ne placer que certains fichiers dans le ramdisk.

Pour ma part, il s'agit des fichiers .gch, qui correspondent à la précompilation des fichiers includes par gcc.

En C++ notamment, la lecture des fichiers include peut prendre un temps non négligeable (ce point a déja été abordé dans un autre billet, disponible dans la même collection chez les meilleurs fournisseurs d'accès).



Il n'est quand même pas bien gros ce disque

L'espace s'étiole

Le principal inconvénient du SSD vient de son prix au gigaoctet.

Vu les capacités, on ne gaspille pas.

Or, un df -h / après l'installation des choses essentielles apporte son lot d'interrogations:


~$ df -h /
Sys. fich.     Taille Util. Dispo Uti% Monté sur
/dev/root        231G  4,2G  215G   2% /

Un rapide calcul mental nous confirme que 231-4.2 devrait être plus proche de 227 que des 215 affichés.

Diantre, 12Go de perdus, mais que se passe t-il ?!

Journalisation, inodes, arrondissement des clusters... toutes les hypothèses défilent dans notre esprit perplexe.


Bon alors c'est le journal et les inodes ?

~# dumpe2fs /dev/sda2
dumpe2fs 1.41.14 (22-Dec-2010)
Filesystem volume name:   arch_root
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Default mount options:    discard
Filesystem state:         clean
Filesystem OS type:       Linux
Inode count:              15335424
Block count:              61341696
Reserved block count:     3067084
Free blocks:              59292798
Free inodes:              15165485
First block:              0
Block size:               4096
Inode size:               256
Taille du journal:         128M

Je me suis permis de couper un peu la sortie.

Si on calcule la place maximale nécessaire à la gestion du disque (journal + inodes), on obtient:

  • (128×1024×1024) + (15335424 * 256) = 134217128 + 3 925 868 544 = environ 4 Go.
  • Donc potentiellement, on n'aura jamais plus que (231-4) Go utilisables sur le disque, dans l'éventualité où tous les inodes sont occupés.

Je refais le calcul avec les inodes occupés actuellement.

  • Pour connaître le nombre d'inodes occupés, on peut bien sûr faire Inode count moins Free inodes. On peut aussi utiliser la commande: df -i et regarder la colonne IUsed

~# df -i /
Filesystem       Inodes  IUsed    IFree IUse% Mounted on
/dev/root      15335424 169465 15165959    2% /

Multiplions ce nombre par la place prise par un inode, et ajoutons la place prise par le journal.

  • Pour les valeurs ci-dessus, ce sont 169 mo qui disparaissent pour les besoins de la gestion de la partition.

Le journal et les inodes ne gonflent pas l'occupation de manière déraisonnable.

  • Où sont donc passés les giga restants, et qui est le vrai coupable ?

Sachant que df tient compte de l'arrondi des clusters (la taille de tout fichier est arrondie au multiple de block size le plus proche), cette hypothèse est également fausse.


<balance>C'est root le coupable !</balance>

Le coupable ne peut rester plus longtemps ignoré.

Et quand je parle de root, je ne parle pas de ce slash innocent à la base de votre arborescence, mais bien de la forme de vie carbonée assise devant l'écran et lisant cet article.

Oui, vous: root , et je le prouve.

Regardez cette ligne:


Reserved block count:     3067084

En multipliant cette valeur par la taille d'un bloc (4096), nous obtenons 12562776064.

  • Soit pas loin de 12 Go.
  • Le voila, notre espace perdu

La valeur reserved block count correspond à un espace alloué uniquement pour les besoins de root.

  • Ainsi, même si les utilisateurs ne peuvent plus remplir le disque, on ne se retrouve pas dans une situation difficile où même root ne peut plus intervenir.

Cela étant dit… combien de personnes utilisent ce portable déja… ah oui je me souviens, c'est moi.



Fini de trimer

À ce stade, il ne devrait pas y avoir grand choses de plus à faire pour assurer la bonne marche du SSD.

Vous pouvez maintenant profiter de taux de transferts et de temps d'accès proprements ahurissants. Du moins, pour ceux d'entre-vous qui ne sont pas déja blasés et partis sur autre chose à configurer…

…Optimus par exemple. Mais ceci est une autre histoire.