====== 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 ]]