====== Démarrer sur une architecture de type PC ======
Il s'agit des machines les plus communes, c'est à dire majoritairement basées sur des puces de type Intel x86 et x86_64. À opposer aux machines PowerPC, ARM, RISC-V ou MIPS.
Sur cette architecture, un micrologiciel (//firmware//) va chercher à amorcer sur disque-dur selon deux standards:
* BIOS, l'ancienne méthode cherche à lire les premiers secteurs du disque.
* [[ https://uefi.org/ | UEFI ]], le dernier standard, parcours une hiérarchie de fichiers à partir de la première partition de type //FAT// trouvée.
Le partitionnement décrit dans cet article va vous permettre d'être à la fois compatible //UEFI//et //BIOS//.
===== Disques =====
Trouvez les références des disques détectés sur votre machine:
root@machine $ geom disk list
Geom name: ada0
Providers:
1. Name: ada0
Mediasize: 1000204886016 (932G)
Sectorsize: 512
Stripesize: 4096
Stripeoffset: 0
Mode: r1w1e2
descr: WDC WD10EZEX-08WN4A0
lunid: 50014ee263369a74
ident: WD-WCC6Y1YZ7T6R
rotationrate: 7200
fwsectors: 63
fwheads: 16
Le paramètre //sector size// est en général faux, pour des raisons de compatibilité.
Déterminez d'abord votre situation actuelle:
root@machine $ gpart show
=> 34 1953525101 ada0 GPT (932G)
34 999967 1 efi (488M)
1000001 1757172651 2 linux-data (838G)
1758172652 93389332 - free - (45G)
1851561984 101961728 3 linux-data (49G)
1953523712 1423 - free - (712K)
Si un partitionnement existe déjà comme ci-dessus, détruisez-le au préalable:
root@machine $ gpart destroy ada0
Vous pouvez retrouver les //uuid// dans ''/dev/gptid'' à l'aide de la clef ''kern.geom.label.gptid.enable'' de loader.conf(5). Pour pouvoir les monter via leur identifiant dans fstab(5), par exemple.
===== Schémas de partitionnement =====
La plupart des firmwares reconnaissent le schéma de partitionnement [[https://fr.wikipedia.org/wiki/GUID_Partition_Table | GPT ]], successeur de MBR.
Au passage, assurons-nous que geom(4) va calculer les alignements au préalable.
root@machine $ sysctl kern.geom.part.mbr.enforce_chs=0
root@machine $ gpart create -s gpt ada0
===== Partitions =====
==== Amorces ====
En règle générale, il est préférable d'assurer les alignement sur 4096 octets (//4k//).
Les partitions seront numérotées dans l'ordre où on les crée.
Créons une première partition pour l'EFI, qui sera étiquetée //efiboot0//:
root@machine $ gpart add -a 4k -t efi -s 200M -l efiboot0 ada0
Copions le micro-code que va lire le bios pour amorcer, ici, un saut vers la partition EFI.
root@machine $ gpart bootcode -p /boot/boot1.efifat -i 1 ada0
Un firmware EFI sera capable de monter cette partition et d'exécuter le //bootloader// qu'elle contient.
En fait ''boot1.efifat'' est une partition FAT entière qui contient aussi bien le lanceur //EFI// (''/EFI/BOOT/BOOTX64.EFI'') que les méta-données de la partition.
Depuis FreeBSD 13, ce fichier n'existe plus (s'il est encore là, c'est un vieux). Copiez directement ''/boot/loader.efi'' dans ''efi/boot/BOOTx64.efi'', après avoir formaté la partition avec newfs_msdos(8).
Dans le cas du BIOS, il faut ruser.
Ajoutons une partition pour le BIOS:
root@machine $ gpart add -a 4k -t freebsd-boot -s 512k -l gptboot0 ada0
root@machine $ gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 ada0
le premier //bootcode// va s'inscrire dans le schéma //GPT// lui-même pour aider la machine à trouver la partition //freebsd-boot// et y exécuter le deuxième, qui se trouve sur la deuxième partition (''-i 2'').
==== FreeBSD ====
Passons à FreeBSD en lui-même,
soit une partition pour le swap et le reste du disque pour un système ZFS.
root@machine $ gpart add -a 1m -s 2G -t freebsd-swap -l swap0 ada0
root@machine $ gpart add -a 1m -t freebsd-zfs -l zfs0 ada0
Et pour finir, déclarons ce disque actif:
root@machine $ gpart set -a active ada0
===== Résultat =====
Voyons ce que ça donne:
root@machine $ gpart show
=> 40 5860533088 ada0 GPT (2.7T)
40 409600 1 efi (200M)
409640 1024 2 freebsd-boot (512K)
410664 984 - free - (492K)
411648 4194304 3 freebsd-swap (2.0G)
4605952 5855926272 4 freebsd-zfs (2.7T)
5860532224 904 - free - (452K)
ou, pour une partition sans EFI:
root@machine:~ # gpart show
=> 40 3907029088 ada0 GPT (1.8T)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 67108864 2 freebsd-swap (32G)
67110912 3839918080 3 freebsd-zfs (1.8T)
3907028992 136 - free - (68K)
Un,
root@machine gpart list -a
vous donnera plus de détails.
Pour savoir sous quel mode votre machine a démarré:
david@popeye:~ % sysctl machdep.bootmethod
machdep.bootmethod: BIOS
===== Réplication =====
Les commande ''backup'' et ''restore'' de gpart(8) vous aideront à reproduire le schéma de partition d'un disque à l'autre. Et si vous utilisez zfs(8), vous pouvez ajouter de nouveaux disques **après** la mise en service de votre machine.
===== En savoir plus =====
* gpart(8)
* geom(8)
* [[https://gitlab.com/TurtleCrazy/zfsinstaller | un installeur maison ]]
==== biblio ====
* [[https://mwl.io/nonfiction/os#fmse | FreebSD mastery Storage essentials ]]