Partitionner et formater un disque dur
Objectif : prise en main de l'organisation d'un disque dur sur un système Linux.
Le partitionnement automatique
Lors de l'installation initiale d'Oracle Linux, nous avons opté pour le partitionnement automatique. Le but de l'opération était de disposer d'un système Linux fonctionnel pour nous entraîner, sans nous soucier des menus détails de l'organisation du système sous le capot.
Dans la configuration par défaut, l'installateur organise le disque en utilisant le gestionnaire de volumes logiques LVM (Logical Volume Manager). Il s'agit là d'une couche d'abstraction entre le système de fichiers et les partitions, qui permet une approche plus souple dans l'organisation du disque.
Nous aurons l'occasion d'aborder cette manière de faire les choses un peu plus loin. Pour l'instant, LVM constitue tout au plus une couche de complexité inutile dont nous allons nous débarrasser, afin de mieux comprendre les bases de l'organisation d'un disque dur sous Linux.
Tout au long de cet atelier pratique, nous allons procéder à une série de réinstallations successives d'un système minimal Oracle Linux 7, en optant pour le partitionnement manuel, avec des schémas de partitionnement allant du cas de figure le plus rudimentaire à des scénarios un peu plus élaborés.
Les tables de partitionnement MBR et GPT
Les informations de partitionnement sont actuellement gérées par deux procédures distinctes :
-
MBR (Master Boot Record) ;
-
GPT (GUID Partition Tables).
Les concepts de partitionnement basés sur les tables de partitions MBR remontent à l'époque MS-DOS, ce qui explique tout un ensemble de limitations et de règles plus ou moins farfelues. Ce concept reste pourtant valable pour à peu près tous les disques durs utilisés dans des PC Windows et/ou Linux jusqu'en 2012. Dans ce cas de figure, la table de partitions est stockée dans le MBR, c'est-à-dire le premier secteur du disque dur.
GPT est un standard créé il y a quelque temps déjà pour éviter les nombreuses limitations liées au MBR. Les ordinateurs de la marque Apple utilisent GPT depuis 2005. Les machines Windows y ont migré depuis la présentation de Windows 8 à l'automne 2012. L'UEFI, le remplaçant du BIOS, exige l'utilisation d'une table de partitionnement GPT.
En théorie, le partitionnement GPT est censé avoir remplacé le modèle MBR depuis belle lurette. En pratique, ce dernier reste largement répandu et nous retrouvons ce paradigme classique où une technologie obsolète a la vie dure et refuse de céder la place au progrès.
Identifier le type de partitionnement sur mon système
Lors de l'installation initiale d'Oracle Linux, c'est l'installateur qui a sélectionné automatiquement le type de partitionnement qu'il fallait utiliser sous le capot.
-
Dans la majorité des cas, nous retrouverons un partitionnement MBR, notamment avec les BIOS traditionnels, les BIOS modernes en mode legacy et les installations dans VirtualBox avec la configuration par défaut.
-
Le partitionnement GPT sera utilisé sur des systèmes où l'UEFI a remplacé le BIOS.
Pour savoir quel est le type de partitionnement utilisé sur votre machine, invoquez la commande suivante :
$ sudo fdisk -l /dev/sda 2> /dev/null | grep type
Disk label type: dos
Ici, j'ai utilisé fdisk
avec l'option -l
pour afficher la table de
partitions de mon disque sda
, en faisant fi des éventuels messages d'erreur
et en filtrant l'affichage pour obtenir la ligne qui me renseigne sur le type
d'étiquette du disque. L'étiquette dos
correspond à une table de
partitionnement MBR.
Sur une machine UEFI, la même commande m'affiche un type
d'étiquette gpt
:
$ sudo fdisk -l /dev/sda 2> /dev/null | grep type
Disk label type: gpt
Pour éviter la confusion, nous allons commencer par traiter le partitionnement MBR, étant donné que c'est le cas de figure que nous allons rencontrer le plus souvent sous Oracle Linux 7. Une fois que nous serons à l'aise avec cette manière traditionnelle de faire les choses, nous attaquerons les tables de partitions GPT et les outils pour les gérer.
Le schéma de partitionnement le plus simple
Pour commencer, nous allons choisir le schéma de partitionnement le plus simple pour notre installation. Un système Linux a besoin d'au moins deux partitions :
-
une partition d'échange ou
swap
; -
une partition principale.
La partition d'échange
La partition swap
est une sorte de mémoire virtuelle de votre machine, une
extension dans le cas où vous arriveriez aux limites de la mémoire vive.
Lorsque ce cas de figure se présente, c'est-à-dire si la RAM arrive à
saturation, son contenu est délocalisé sur cette zone du disque pour éviter de
bloquer le système. La taille de la partition swap
sera égale à celle de la
mémoire vive disponible.
Les systèmes de fichiers pour la partition principale
Une fois que nous aurons créé notre swap
, la partition principale occupera
simplement tout l'espace restant du disque. L'installateur d'Oracle Linux
propose une multitude de systèmes de fichiers au choix pour la formater :
-
ext2
(second extended file system) est le système de fichiers historique de GNU/Linux. -
ext3
est un autre système de fichiers GNU/Linux, une évolution d'ext2
. Ce qui le caractérise principalement, c'est l'utilisation d'un fichier journal. On arrive ainsi à éviter la longue phase de récupération lors d'un arrêt brutal de la machine. -
ext4
est le successeur d'ext3
. C'est le système de fichiers que nous utiliserons pour formater notre partition principale. -
En dehors de cela, il existe une multitude de systèmes de fichiers comme
xfs
,jfs
,reiserfs
oubtrfs
, qui ont chacun des avantages et des inconvénients. L'installateur d'Oracle Linux 7 utilisexfs
par défaut pour formater le disque dur si l'on opte pour le partitionnement automatique.
Retour à la case départ
Démarrez une installation fraîche d'Oracle Linux 7. Si vous disposez d'une machine virtuelle sous VirtualBox, vous avez le choix :
-
créez une nouvelle machine virtuelle ;
-
écrasez le système invité existant.
Dans tous les cas, renseignez la langue du système, le fuseau horaire et la
disposition du clavier comme nous avons pu le faire auparavant. Désactivez le
service Kdump, activez l'interface réseau et renseignez le nom d'hôte. Ensuite,
cliquez sur Destination de l'installation
.
-
Cliquez sur
Je vais configurer le partitionnement
, puis surTerminé
. -
Si vous écrasez un système Oracle Linux installé, cliquez sur la petite flèche
>
à gauche du nom du système pour afficher les partitions existantes. -
Sélectionnez n'importe quelle partition, puis cliquez sur le petit bouton
-
en bas à gauche de l'écran pour la supprimer. -
Confirmez la suppression de toutes les données sur le disque.
Créer la partition d'échange
-
Nous n'utilisons pas LVM. Sélectionnez le schéma de partitionnement
Partition standard
dans le menu déroulant. -
Cliquez sur le bouton
+
en bas à gauche de l'écran pour ajouter un point de montage pour la partition d'échange. -
Sélectionnez le point de montage
swap
et définissez sa taille. Elle sera égale à la quantité de RAM disponible, par exemple1 Gio
. -
Définissez l'étiquette
swap
pour la partition (facultatif) et cliquez surMise à jour des paramètres
.
La combinaison de touches Ctrl+Alt+F2 vous permet d'ouvrir une console virtuelle depuis l'installateur. Invoquez alors la commande
free -m
pour afficher la quantité de RAM disponible dans votre machine. Revenez à la fenêtre de l'installateur avec Ctrl+Alt+F6. Si vous installez une machine virtuelle dans VirtualBox, utilisez les raccourcis clavier respectifs Ctrl+F2 et Ctrl+F6.
Créer la partition principale
-
Cliquez sur le bouton
+
en bas à gauche de l'écran pour ajouter un point de montage pour la partition principale. -
Sélectionnez le point de montage
/
sans renseigner la capacité souhaitée, afin d'utiliser la totalité de l'espace disponible. -
Sélectionnez le système de fichiers
ext4
dans le menu déroulant, définissez l'étiquetteroot
pour la partition (facultatif) et cliquez surMise à jour des paramètres
. -
Cliquez sur le bouton
Terminé
en haut à gauche pour passer à l'écran suivant. -
L'installateur vous affiche un récapitulatif des opérations. Confirmez en acceptant les modifications, ce qui vous ramène à l'écran principal.
Démarrez l'installation du système, définissez un mot de passe pour root
,
ajoutez un utilisateur normal et allez boire un café en attendant
l'installation du système minimal.
État des lieux
Au terme du redémarrage initial, connectez-vous en tant qu'utilisateur normal
et invoquez la commande mount
:
$ mount | grep sda
/dev/sda1 on / type ext4 (rw,relatime,seclabel,data=ordered)
Dans le précédent atelier pratique, nous avons vu que la
commande mount
invoquée sans argument affiche l'ensemble des systèmes de
fichiers montés. Les principes qui s'appliquent pour les disques externes
restent valables pour les disques internes. Concrètement, je vois que la
première partition de mon disque dur (/dev/sda1
) correspond à ma partition
principale (/
), que le système de fichiers utilisé est l'ext4
et que le
tout est accessible en lecture et en écriture (rw
).
Dans les systèmes Linux, c'est le fichier /etc/fstab
(file systems table)
qui me renseigne sur l'organisation des systèmes de fichiers. Jetons un oeil
dans ce fichier.
$ cat /etc/fstab
#
# /etc/fstab
...
UUID=89956d0e-c53e-4e3f-9b7e-16c8aab657c4 / ext4 defaults 1 1
UUID=88142203-6702-480c-b2fb-00dd074876fc swap swap defaults 0 0
La page de manuel en ligne fstab(5)
nous renseigne sur la syntaxe de ce
fichier. Chaque ligne contient une série de six champs, séparés par des espaces
ou des tabulations, qui décrivent respectivement :
-
le périphérique bloc à monter ;
-
le point de montage ;
-
le type de système de fichiers ;
-
les options de montage ;
-
deux indications pour la sauvegarde et la vérification de l'intégrité du système.
Les éléments potentiellement déroutants dans notre fichier /etc/fstab
, ce
sont les périphériques désignés par les UUID, c'est-à-dire les premiers champs
qui commencent par UUID=quelquechose
.
Comprendre les UUID
L'UUID (Universally Unique IDentifier) est un identifiant universel unique.
Il s'agit là d'une chaîne de caractères théoriquement unique au monde qui
identifie sans ambiguïté chaque élément de notre système, en l'occurrence
chaque partition de notre disque dur. Ce n'est pas de la magie noire et, pour
savoir quelle partition correspond à quel UUID, il suffit de jeter un oeil dans
le répertoire /dev/disk/by-uuid
:
$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx. ... 88142203-6702-480c-b2fb-00dd074876fc -> ../../sda2
lrwxrwxrwx. ... 89956d0e-c53e-4e3f-9b7e-16c8aab657c4 -> ../../sda1
Le répertoire contient deux liens symboliques commençant par 881422
et
89956d
sur mon système et qui pointent respectivement vers /dev/sda2
et
/dev/sda1
.
Pour mieux comprendre les UUID, tentez une petite expérience pratique. Éditez
le fichier /etc/fstab
et remplacez chaque UUID par le périphérique qu'il est
censé représenter, en vous méfiant des fautes de frappe potentiellement
fatales. Vous devrez obtenir quelque chose comme ceci :
/dev/sda1 / ext4 defaults 1 1
/dev/sda2 swap swap defaults 0 0
Redémarrez le système. Vous constatez qu'il est toujours fonctionnel.
Actuellement, nous n'utilisons qu'un seul disque dur. Admettons que nous souhaitions en ajouter un après l'installation du système (et c'est d'ailleurs ce que nous allons faire tout à l'heure). Dans certains cas, il est théoriquement possible que le noyau décide de renommer les disques durs. Le nouveau serait nommé
sda
et l'ancien disquesda
deviendraitsdb
. Il en résulterait que notre système ne démarrerait plus. Le recours aux UUID permet donc d'identifier les disques et les partitions de façon persistante.
Pourquoi les partitions ont-elles été inversées ?
Vous aurez peut-être remarqué que l'ordre des partitions sda1
et sda2
n'est
pas celui que nous avions défini lors du partitionnement manuel. Cela est dû au
fait que le programme d'installation a rectifié le tir en reléguant la
partition d'échange vers la fin du disque.
Nous n'allons pas trop rentrer dans les détails mécaniques de géométrie de disque. Retenez juste le fait qu'il est plus logique de ranger la partition d'échange à la fin d'un disque dur et de réserver le début du disque au système à proprement parler, étant donné que ces secteurs – physiquement situés au centre – sont un peu plus rapides d'accès pour les têtes de lecture.
Un schéma de partitionnement un peu plus élaboré
Après cette première prise en main du partitionnement manuel de l'installateur, je vous propose un deuxième exercice pour vous mettre à l'aise avec la procédure. Voici un schéma de partitionnement courant, que j'utilise sur mon ordinateur portable :
-
une partition
/boot
de 500 Mo, formatée enext2
; -
une partition
swap
dont la taille équivaut à la RAM disponible ; -
une partition principale occupant l'espace restant, formatée en
ext4
.
Préparation du disque
-
Dans le menu principal de l'installateur, cliquez sur
Destination de l'installation
. -
Vérifiez si le disque est bien sélectionné.
-
Cochez
Je vais configurer le partitionnement
et cliquez surTerminé
. -
Supprimez toutes les partitions existantes.
-
Dans le menu déroulant, sélectionnez
Partition standard
au lieu deLVM
.
Créer la partition /boot
-
Cliquez sur le bouton
+
pour créer un nouveau point de montage. -
Créez le point de montage
/boot
avec une capacité de500 Mio
. -
Sélectionnez le système de fichiers
ext2
. -
Définissez l'étiquette
boot
(facultatif). -
Confirmez en cliquant sur
Mise à jour des paramètres
.
Créer la partition d'échange
-
Cliquez sur le bouton
+
pour créer un autre point de montage. -
Créez le point de montage
swap
en spécifiant sa capacité en Gio, par exemple1 Gio
. -
Définissez l'étiquette
swap
(facultatif). -
Confirmez en cliquant sur
Mise à jour des paramètres
.
Créer la partition principale
-
Cliquez sur le bouton
+
pour créer un dernier point de montage. -
Créez le point de montage
/
sans spécifier la capacité souhaitée. La partition occupera alors tout l'espace restant du disque. -
Sélectionnez le système de fichiers
ext4
. -
Définissez l'étiquette
root
(facultatif). -
Confirmez en cliquant sur
Mise à jour des paramètres
, puis surTerminé
. -
Notez en passant que, là aussi, la partition d'échange est reléguée à la fin du disque par l'installateur.
État des lieux
Une fois l'installation terminée, voyons comment se présente le système sous le
capot. Invoquez la commande mount
en filtrant les résultats pour les
partitions du disque dur :
$ mount | grep sda
/dev/sda2 on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext2 (rw,relatime,seclabel)
Notre fichier /etc/fstab
comporte une ligne de plus pour la partition
/boot
:
$ cat /etc/fstab
#
# /etc/fstab
...
UUID=c485fdd0-b10b-46f6-b64e-343a4c355c84 / ext4 defaults 1 1
UUID=ff0e7554-aebc-4df7-b571-16646e99af04 /boot ext2 defaults 1 2
UUID=103cca88-f0fb-41b0-bdcb-d20c0c10c778 swap swap defaults 0 0
Jetons un oeil dans /dev/disk/by-uuid
pour retrouver les correspondances
entre les partitions et les UUID :
$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx. ... 103cca88-f0fb-41b0-bdcb-d20c0c10c778 -> ../../sda3
lrwxrwxrwx. ... c485fdd0-b10b-46f6-b64e-343a4c355c84 -> ../../sda2
lrwxrwxrwx. ... ff0e7554-aebc-4df7-b571-16646e99af04 -> ../../sda1
Comprendre les étiquettes
Lors de l'installation du système, nous avons défini des étiquettes boot
,
root
et swap
pour les partitions respectives. Cette opération n'était pas
strictement nécessaire, mais nous pouvons voir ici à quoi elle sert. Le rôle
des étiquettes est similaire à celui des UUID. En effet, regardons dans
/dev/disk/by-label
:
$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx. 1 root root 10 Jun 1 12:45 boot -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jun 1 12:45 root -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jun 1 12:45 swap -> ../../sda3
Les étiquettes sont une autre manière d'obtenir un nommage persistant pour les
partitions du système. Là aussi, je peux tenter l'expérience en éditant
/etc/fstab
et en remplaçant les UUID par les étiquettes correspondantes.
Voici à quoi cela ressemble sur mon système :
LABEL=root / ext4 defaults 1 1
LABEL=boot /boot ext2 defaults 1 2
LABEL=swap swap swap defaults 0 0
Afficher l'espace occupé et l'espace disponible
La commande df
(disk free) nous renseigne sur l'espace occupé et l'espace
disponible au sein des systèmes de fichiers. L'option -h
(--human-readable
)
affiche les résultats dans un format plus lisible :
$ df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/sda2 58G 1.4G 54G 3% /
/dev/sda1 485M 101M 359M 22% /boot
...
Une partition pour /home
Faisons maintenant un petit exercice pratique pour nous familiariser davantage avec les concepts de partitionnement et de systèmes de fichiers. Cette fois-ci, effectuez une installation minimale d'Oracle Linux en respectant le schéma de partitionnement suivant :
-
une partition
/boot
de 500 Mo étiquetéeboot
et formatée enext2
; -
une partition
swap
d'une taille égale à la RAM disponible, étiquetéeswap
; -
une partition principale de 5 Go étiquetée
root
et formatée enext4
; -
une partition
/home
étiquetéehome
, occupant l'espace restant et formatée enext4
;
Vous devrez obtenir quelque chose comme ceci :
$ df -h | grep sda
/dev/sda3 4.8G 1.4G 3.3G 30% /
/dev/sda1 485M 101M 359M 22% /boot
/dev/sda2 53G 53M 50G 1% /home
Partant de là, éditez /etc/fstab
et remplacez les UUID par les étiquettes
correspondantes.
Ajouter un disque à une installation existante
Les différents scénarios de partitionnement et de formatage que nous avons vus jusqu'ici ont tous pu être mis en pratique avec l'interface graphique de l'installateur d'Oracle Linux. Nous abordons maintenant un cas de figure où nous ne disposons plus de cet outil plus ou moins convivial, que les administrateurs durs à cuire appellent un "clicodrome".
Notre point de départ, ce sera le schéma de partitionnement que nous avons vu précédemment, à savoir :
-
une partition
/boot
de 500 Mo, formatée enext2
; -
une partition
swap
dont la taille équivaut à la RAM disponible ; -
une partition principale occupant l'espace restant, formatée en
ext4
.
Concrètement, notre disque dur sda
est organisé en trois partitions sda1
,
sda2
et sda3
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 58.5G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
Insérer et connecter le deuxième disque dur
Si vous disposez d'une installation physique d'Oracle Linux sur un serveur ou un PC faisant office de serveur, insérez le deuxième disque et connectez-le. Allumez la machine et vérifiez si les deux disques apparaissent bien dans le BIOS.
Ajouter un disque dans une machine virtuelle
Vous pouvez très bien ajouter un deuxième disque à un système invité installé dans VirtualBox.
-
Éteignez le système invité et cliquez sur
Configuration
. -
Ouvrez l'onglet
Stockage
et repérez leContrôleur SATA
. -
Cliquez-droit sur le
Contrôleur SATA
et sélectionnezAjouter un disque dur
. -
Dans la fenêtre subséquente, cliquez sur
Créer un nouveau disque
. -
Confirmez le type de fichier de disque dur
VDI
par défaut. -
Confirmez la taille dynamiquement allouée du fichier.
-
Nommez le disque
Disque2.vdi
et définissez sa taille, par exemple20,00 Gio
. -
Sélectionnez le disque
Disque2.vdi
et cliquez surChoisir
.
Vérifier la prise en charge du deuxième disque
Une fois que le nouveau disque dur est installé dans la machine – physique ou virtuelle – il faut démarrer le système. Voyons tout d'abord s'il s'affiche en tant que nouveau périphérique bloc :
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 58.5G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
L'affichage de lsblk
me montre bien la présence d'un deuxième disque sdb
non partitionné en dessous du disque sda
et de ses trois partitions sda1
,
sda2
et sda3
.
Partitionner le deuxième disque
Nous utiliserons fdisk
pour créer une partition de type Linux
sur le
disque sdb
:
$ sudo fdisk /dev/sdb
Appuyez sur N pour créer une nouvelle partition et confirmez successivement par Enter toutes les valeurs proposées par défaut :
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): [Enter]
Using default response p
Partition number (1-4, default 1): [Enter]
First sector (2048-41943039, default 2048): [Enter]
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): [Enter]
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set
J'affiche la table des partitions en appuyant sur la touche P (print) :
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x991dd27b
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
Ici, je viens de créer une partition de type Linux
(83
). J'appuie sur W
(write) pour écrire la nouvelle table de partitions sur le disque :
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Je dispose bien d'une nouvelle partition /dev/sdb1
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 58.5G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sr0 11:0 1 1024M 0 rom
Formater le deuxième disque
Maintenant que mon nouveau disque est partitionné, je peux le formater. Nous
avons vu un peu plus haut que, sous Linux, je dispose de toute une série de
systèmes de fichiers au choix comme ext2
, ext3
, ext4
ou xfs
. Dans cet
exemple, j'opte pour ext4
:
$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
...
Une fois que j'ai formaté la partition, je peux éventuellement l'étiqueter :
$ sudo e2label /dev/sdb1 data
L'étiquetage n'est pas obligatoire, mais il permet d'organiser les choses un peu plus proprement :
$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx. 1 root root 10 Jun 1 09:12 boot -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jun 1 09:27 data -> ../../sdb1
lrwxrwxrwx. 1 root root 10 Jun 1 09:12 root -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jun 1 09:12 swap -> ../../sda3
Ensuite, je crée le point de montage /data
qui me permettra d'accéder aux
données de mon nouveau disque :
$ sudo mkdir -v /data
mkdir: created directory ‘/data’
Dans un premier temps, je monte le disque manuellement :
$ sudo mount -v -t ext4 /dev/sdb1 /data
mount: /dev/sdb1 mounted on /data.
Lors de la première tentative de montage du disque, vous serez probablement confronté au message d'erreur suivant :
mount : /data does not contain SELinux labels.
SELinux est un mécanisme de sécurité que nous aborderons plus loin. Pour l'instant, vous pouvez résoudre le problème en invoquant la commande suivante :sudo restorecon -R /data
.
J'aurais pu invoquer la commande de montage plus simplement :
$ sudo mount /dev/sdb1 /data
Et puisque nous avons vu que les UUID et les étiquettes identifient les partitions sans ambiguïté, nous aurions très bien pu nous y prendre comme ceci :
$ sudo mount LABEL=data /data
Dans un cas comme dans l'autre, vérifions si le disque est bien monté :
$ mount | grep sdb1
/dev/sdb1 on /data type ext4 (rw,relatime,seclabel,data=ordered)
Nous pouvons d'ores et déjà écrire des données sur le deuxième disque.
N'oubliez pas que nous n'avons pas encore défini de permissions particulières
pour cette arborescence. Pour l'instant, /data
appartient à l'utilisateur
root
et au groupe root
:
$ cd /data/
$ sudo mkdir repertoiretest
$ sudo touch repertoiretest/fichiertest
Vous serez peut-être vaguement surpris de trouver un répertoire lost+found
à la
racine du disque. C'est tout à fait normal. Linux utilise ce répertoire lors
des tests d'intégrité des systèmes de fichiers.
$ ls -l
total 20
drwx------. 2 root root 16384 Jun 1 09:25 lost+found
drwxr-xr-x. 2 root root 4096 Jun 1 09:34 repertoiretest
Tout fonctionne comme prévu et nous pouvons démonter le disque à la main :
$ cd
$ sudo umount /data
Il ne reste plus qu'à éditer /etc/fstab
en fournissant les informations de ce
nouveau système de fichiers :
/dev/sdb1 /data ext4 defaults 0 2
Si l'on veut faire les choses plus proprement, on peut identifier le disque par son UUID :
UUID=c84be805-27d1-4ee3-8b20-f37fa1614a3e /data ext4 defaults 0 2
Alternativement, on pourra utiliser l'étiquette du disque :
LABEL=data /data ext4 defaults 0 2
Croisez les doigts et redémarrez. Vérifiez si le disque a bien été monté automatiquement au démarrage du système :
$ mount | grep sdb1
/dev/sdb1 on /data type ext4 (rw,relatime,seclabel,data=ordered)
Le deuxième disque est désormais inclus dans mon système. Dorénavant, je
dispose de 20 Go d'espace supplémentaire dans l'arborescence /data
:
$ df -h | grep sd
/dev/sda2 58G 1.8G 53G 4% /
/dev/sda1 485M 101M 359M 22% /boot
/dev/sdb1 20G 45M 19G 1% /data
Splendeur et misère des tables de partitions MBR
Il y aurait encore beaucoup de choses à dire sur les tables de partitions MBR. Au lieu de cela, je préfère vous fournir une synthèse rapide des possibilités et surtout des limitations.
Les disques munis d'un MBR distinguent trois types de partitions :
-
primaire
-
étendue
-
logique
Un disque peut être muni d'un maximum de quatre partitions primaires, ce qui constitue une limitation considérable. C'est pourquoi on a la possibilité de définir une partition étendue à la place d'une des primaires. À l'intérieur de cette partition étendue, on pourra ensuite créer une série de partitions logiques.
Certains outils de partitionnement – par exemple, le programme d'installation d'Oracle Linux – ne distinguent pas les différents types de partitions en surface et gèrent la répartition des types de partitionnement automatiquement sous le capot.
Une partition étendue ne constitue qu'une sorte de conteneur pour les partitions logiques. Le stockage des données à proprement parler s'effectue sur les partitions primaires et/ou logiques. Attention, ne confondez pas le "type de partitions" avec celui que l'on utilise dans un autre contexte pour indiquer le système d'exploitation censé occuper la partition ou le rôle joué par la partition : Windows, Linux, Linux swap, Linux RAID, BSD, etc.
Avec un MBR, Linux peut gérer un maximum de quinze partitions, dont un maximum de onze logiques. En conséquence, la meilleure solution consiste à créer les trois primaires dans un premier temps, puis la partition étendue qui occupera tout le reste du disque et que l'on remplira de partitions logiques selon le besoin.
La taille maximale d'une telle partition est de deux téraoctets. Il existe une poignée d'astuces pour utiliser le partitionnement MBR avec des disques allant jusqu'à quatre téraoctets, mais il vaut mieux éviter de sauter à travers des cerceaux en feu et passer directement au partitionnement GPT.
Partitionnement manuel d'un système UEFI
Précédemment, nous avons défini un schéma de partitionnement relativement
simple constitué de trois partitions : /boot
, swap
et la principale.
Est-ce que nous pouvons partitionner un système UEFI de la même manière ?
Oui, il suffit d'ajouter une partition EFI au début du disque.
VirtualBox peut émuler un système UEFI. Dans la configuration de la machine virtuelle, ouvrez l'onglet
Système
, repérez lesFonctions avancées
et cochezActiver EFI
.
-
Commencez par créer une partition
/boot/efi
et définissez une capacité de200 Mio
. -
Définissez éventuellement l'étiquette
EFI
pour cette partition. -
Créez les autres partitions comme de coutume.
Comment savoir à coup sûr si vous disposez d'un système UEFI ? L'installateur d'Oracle Linux vous le dira. Une fois que vous avez sélectionné le partitionnement manuel et que vous définissez le premier point de montage, vérifiez la présence d'une entrée
/boot/efi
dans le menu déroulantPoint de montage
. Si elle ne s'affiche pas, c'est que vous êtes en présence d'un BIOS traditionnel.
Une fois que le système est installé, voilà comment cela se présente :
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 500M 0 part /boot
├─sda3 8:3 0 58,3G 0 part /
└─sda4 8:4 0 1G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
L'installateur a choisi automatiquement une table de partitions GPT pour le partitionnement :
$ sudo fdisk -l /dev/sda 2> /dev/null | grep type
Disk label type: gpt
Ajouter un disque avec une table de partitions GPT
Si je veux ajouter un deuxième disque à cette installation, il va falloir que j'utilise une table de partitions GPT. Notez que rien ne m'empêche d'utiliser le partitionnement GPT sur une installation traditionnelle. Dans l'exemple ci-après, je vais transformer mon deuxième disque MBR en disque GPT.
Tout d'abord, je supprime l'entrée correspondante dans /etc/fstab
:
UUID=c84be805-27d1-4ee3-8b20-f37fa1614a3e /data ext4 defaults 0 2
Je démonte le disque manuellement :
$ sudo umount /data
Je supprime la table de partitions du disque en utilisant la
commande dd
:
$ sudo dd if=/dev/zero of=/dev/sdb bs=512 count=64
64+0 records in
64+0 records out
32768 bytes (33 kB) copied, 0.00715704 s, 4.6 MB/s
Pour supprimer la table de partitions, nous la remplissons de zéros. Plus
exactement, nous utilisons dd
pour écrire 64 blocs de 512 zéros sur le début
du disque sdb
. Consultez la page de manuel de dd
pour les détails.
Effectivement, le disque n'affiche plus aucune partition :
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Il existe plusieurs solutions pour le partitionnement GPT d'un disque. Pour ma
part, j'ai une préférence marquée pour l'outil gdisk
, qui fonctionne à peu de
chose près comme fdisk
, sauf qu'il écrit des tables de partitions GPT.
L'outil de partitionnement gdisk
ne fait pas partie d'une installation minimale
d'Oracle Linux. Vous pouvez l'installer comme ceci :
$ sudo yum install -y gdisk
Lancez gdisk
en fournissant le disque sdb
en argument :
$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help):
La création d'une nouvelle partition se fait comme avec fdisk
. Appuyez
sur N et confirmez successivement toutes les valeurs proposées par
défaut :
Command (? for help): n
Partition number (1-128, default 1): [Enter]
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: [Enter]
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: [Enter]
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): [Enter]
Changed type of partition to 'Linux filesystem'
Affichez la table des partitions en appuyant sur la touche P (print) :
Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 84133633-424B-45F7-9F5B-4466BFAF32BA
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 41943006 20.0 GiB 8300 Linux filesystem
Nous venons de créer une partition de type Linux
(8300
). Appuyons sur W
(write) pour l'écrire sur le disque :
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
Notre deuxième disque dispose bel et bien d'une table de partitions GPT :
$ sudo fdisk -l /dev/sdb 2> /dev/null | grep type
Disk label type: gpt
Vous aurez probablement noté que la partition disposait d'un identifiant
8300
, par opposition à l'identifiant83
pour le partitionnement MBR.
À partir de là, nous pouvons formater, étiqueter et monter notre disque GPT exactement comme nous l'avons fait pour le disque MBR :
$ sudo mkfs -t ext4 /dev/sdb1
$ sudo e2label /dev/sdb1 data
$ sudo mount /dev/sdb1 /data
...
Les GUID Partition Tables (GPT)
Avec les tables GPT, chacune des partitions est identifiée grâce à un Global Unique Identifier (GUID). Une table GPT offre théoriquement de la place pour 128 partitions, mais Linux n'en gère que les 15 premières. Toutes les partitions sont égales, c'est-à-dire que l'on ne fait plus la distinction entre les partitions primaires, étendues et logiques. Chaque partition peut avoir une taille théorique de 273 octets, autrement dit près d'un milliard de téraoctets. Cela devrait suffire pour quelque temps.
La table de partitions se situe dans les premiers 32× 512 = 17408 octets du disque dur. Une copie de ces informations se situe dans les 17 derniers kilo-octets du disque.
Pour des raisons de sécurité, la table de partitions GPT commence par des informations de partitionnement MBR pour suggérer aux outils compatibles MBR que l'ensemble du disque est déjà utilisé par une seule partition.
En principe, le partitionnement GPT peut être utilisé sur tous (!) les disques durs. Tous les systèmes d'exploitation modernes savent gérer ce type de partitionnement :
-
les distributions Linux actuelles ;
-
macOS ;
-
toutes les versions 64-bits de Windows depuis XP.
Supprimer une table de partitions GPT
Nous avons vu précédemment que, pour supprimer une table de partitions MBR, il suffisait d'écrire directement une série de zéros – ou n'importe quelle série d'octets aléatoire – sur le premier secteur du disque. Cette procédure ne fonctionne pas avec les tables de partitions GPT. Si nous voulons réinitialiser un disque GPT – pour appliquer un partitionnement MBR par exemple – nous devons nous y prendre autrement.
La manière la plus simple consiste à utiliser l'outil gdisk
. Assurez-vous que
le disque n'est plus monté, puis ouvrez-le :
$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help):
La touche X nous donne accès aux fonctionnalités avancées de gdisk
:
Command (? for help): x
Expert command (? for help):
Une fois que le mode expert est activé, la touche Z (zap GPT data
structures and exit
) supprime la table de partitions :
Expert command (? for help): z
About to wipe out GPT on /dev/sdb. Proceed? (Y/N): y
GPT data structures destroyed! You may now partition the disk using fdisk or other utilities.
Blank out MBR? (Y/N): y
À partir de là, le disque est proprement réinitialisé :
$ sudo gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Formater un disque dur externe ou une clé USB
Dans le précédent atelier pratique, nous avons vu que les clés USB sont normalement formatées en FAT, un système de fichiers géré aussi bien par Microsoft Windows que par macOS ou Linux.
Dans mon quotidien professionnel, il m'arrive de temps en temps qu'un client vienne me voir parce qu'il n'arrive pas à accéder à sa clé USB ou à son disque dur externe. Voici les deux cas de figure les plus fréquents auxquels je suis confronté :
-
La clé USB est formatée en NTFS et n'est pas accessible sous macOS.
-
Le disque dur externe a été formaté en HFS+ sous macOS et n'est pas accessible sous Microsoft Windows.
Le meilleur moyen pour rétablir l'interopérabilité entre les systèmes, c'est de vider les données du disque externe sur une machine capable de le gérer avant de le reformater de manière appropriée.
Dans l'exemple qui suit, je dispose d'une clé USB d'une capacité nominale de 8 Go, que je souhaite formater de manière appropriée. Voyons comment les choses se présentent :
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 55.9G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 51.4G 0 part /
└─sda3 8:3 0 4G 0 part [SWAP]
sdb 8:16 1 7,2G 0 disk
├─sdb1 8:17 1 1,7G 0 part
└─sdb2 8:18 1 2,3M 0 part
sr0 11:0 1 1024M 0 rom
La clé USB sdb
comporte deux partitions sdb1
et sdb2
. Je pourrais
théoriquement m'intéresser au détail des partitions en invoquant sudo
fdisk -l /dev/sdb
. Au lieu de cela, je vais simplement supprimer la table de
partitions de la clé pour commencer sur des bases saines :
$ sudo dd if=/dev/zero of=/dev/sdb bs=512 count=64
64+0 records in
64+0 records out
32768 bytes (33 kB) copied, 1.33173 s, 24.6 kB/s
À partir de là, j'invoque fdisk
pour créer une nouvelle table de partitions
sur la clé :
$ sudo fdisk /dev/sdb
Je crée une nouvelle partition en confirmant les valeurs proposées par défaut :
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): [Enter]
Using default response p
Partition number (1-4, default 1): [Enter]
First sector (2048-15132671, default 2048): [Enter]
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15132671, default 15132671): [Enter]
Using default value 15132671
Partition 1 of type Linux and of size 7.2 GiB is set
J'affiche la table de partitions :
Command (m for help): p
Disk /dev/sdb: 7747 MB, 7747928064 bytes, 15132672 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6b3b2f65
Device Boot Start End Blocks Id System
/dev/sdb1 2048 15132671 7565312 83 Linux
Dans la configuration par défaut, fdisk
crée des partitions de type
Linux
(83
). Je vais changer le type de ma partition grâce à la
touche T (type) :
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes):
Si j'appuie sur L (list), fdisk
m'affiche l'ensemble des types de
partitions qu'il est capable de gérer. Essayez, vous verrez qu'il en existe une
quantité impressionnante. Le type qui nous intéresse ici, c'est W95 FAT32
, ou
encore 0b
pour les intimes :
Hex code (type L to list all codes): 0b
Changed type of partition 'Linux' to 'W95 FAT32'
Command (m for help): p
Disk /dev/sdb: 7747 MB, 7747928064 bytes, 15132672 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6b3b2f65
Device Boot Start End Blocks Id System
/dev/sdb1 2048 15132671 7565312 b W95 FAT32
À présent, je peux écrire les modifications sur le disque :
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Nous avons fait la moitié du chemin. La clé USB dispose désormais d'une
partition de type W95 FAT32
. Il ne reste plus qu'à la formater. Nous
utiliserons la commande mkdosfs
fournie par le paquet dosfstools
. Installez
ce paquet (sudo yum install -y dosfstools
), puis formatez la clé :
$ sudo mkdosfs -v -n MYDATA /dev/sdb1
mkfs.fat 3.0.20 (12 Jun 2013)
Auto-selecting FAT32 for large filesystem
/dev/sdb1 has 239 heads and 62 sectors per track,
logical sector size is 512,
using 0xf8 media descriptor, with 15130624 sectors;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 14748 sectors, and provides 1887637 clusters.
There are 32 reserved sectors.
Volume ID is 2c90b033, volume label MYDATA.
À partir de là, vous pouvez utiliser la clé comme nous l'avons vu dans le chapitre précédent :
$ sudo mount -v /dev/sdb1 /mnt
mount: /dev/sdb1 mounted on /mnt.
$ mount | grep sdb
/dev/sdb1 on /mnt type vfat (rw,relatime,...)
La rédaction de ces cours demande du temps et des quantités significatives de café espresso. Vous appréciez cette formation ? Offrez un café au formateur en cliquant sur la tasse.