Gestion des disques

De The Linux Craftsman
Aller à : navigation, rechercher

fdisk

fdisk est un utilitaire qui permet de manipuler les tables de partitions, c'est à dire de les créer, supprimer ou lister.

Lister les partitions

Commençons par lister les partitions présentes:

fdisk -l

Disque /dev/sda: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x000dca47

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *           1          64      512000   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2              64        1045     7875584   8e  Linux LVM

Disque /dev/sdb: 536 Mo, 536870912 octets
64 têtes, 32 secteurs/piste, 512 cylindres
Unités = cylindres de 2048 * 512 = 1048576 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00000000

Disque /dev/mapper/VolGroup-lv_swap: 855 Mo, 855638016 octets
255 têtes, 63 secteurs/piste, 104 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00000000

Sur cette machine virtuelle, il y a 5 disques durs:

  • sda → pour le système et qui contient deux partitions;
  • sdb → vide.


Création d'une partition

Nous allons créer une partition sur le disque sdb. Pour cela, il faut lancer fdisk en précisant le nom du disque:

fdisk /dev/sdb

Le périphérique ne contient pas une table de partitions DOS ou Sun, SGI, OSF valide
Création d'une nouvelle étiquette DOS avec id de disque 0x48e43534.
Les modifications restent en mémoire jusqu'à ce que vous les écriviez.
Après quoi, bien sûr, le contenu précédent sera irrécupérable.

AVERTISSEMENT: fanion 0x0000 non valide dans la table de partitions 4, sera corrigé par w(écriture)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Commande (m pour l'aide):

Grâce à l'option m on peut lister les différentes commandes de fdisk:

Commande d'action
   a   bascule le fanion d'amorce
   b   éditer l'étiquette BSD du disque
   c   basculer le fanion de compatibilité DOS
   d   supprimer la partition
   l   lister les types de partitions connues
   m   afficher ce menu
   n   ajouter une nouvelle partition
   o   créer une nouvelle table vide de partitions DOS
   p   afficher la table de partitions
   q   quitter sans enregistrer les changements
   s   créer une nouvelle étiquette vide pour disque de type Sun
   t   modifier l'id de système de fichiers d'une partition
   u   modifier les unités d'affichage/saisie
   v   vérifier la table de partitions
   w   écrire la table sur le disque et quitter
   x   fonctions avancées (pour experts seulement)

Nous allons utiliser l'option n (new) pour ajouter une nouvelle partition:

Commande (m pour l'aide): n
Commande d'action
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4): 1
Premier cylindre (1-512, par défaut 1):
Utilisation de la valeur par défaut 1
Dernier cylindre, +cylindres or +taille{K,M,G} (1-512, par défaut 512):
Utilisation de la valeur par défaut 512

Commande (m pour l'aide):

Nous avons créé une partition principale (p) puis entré son numéro (1) et ensuite laissé les choix par défauts.

Maintenant que la partition est créée, il faut sauvegarder les changements en écrivant les nœuds d'index (inodes).

Commande (m pour l'aide): w
La table de partitions a été altérée!

Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.

Vous pouvez constater que le disque /dev/sdb possède bien une nouvelle partition (/dev/sdb1):

# fdisk -l /dev/sdb

Disque /dev/sdb: 536 Mo, 536870912 octets
64 têtes, 32 secteurs/piste, 512 cylindres
Unités = cylindres de 2048 * 512 = 1048576 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x48e43534

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1               1         512      524272   83  Linux

Formatage

Avant de pouvoir écrire le quelconque fichier sur ce disque, il faut formater la partition et pour cela nous allons utiliser l'utilitaire mkfs.

# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=1024 (log=0)
Taille de fragment=1024 (log=0)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
131072 i-noeuds, 524272 blocs
26213 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=1
Nombre maximum de blocs du système de fichiers=67633152
64 groupes de blocs
8192 blocs par groupe, 8192 fragments par groupe
2048 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Écriture des tables d'i-noeuds : complété
Création du journal (8192 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Le système de fichiers sera automatiquement vérifié tous les 38 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.

mount

Maintenant que la partition est créée et formatée, il faut préciser le point de montage pour pouvoir y accéder depuis le système de fichier.

Pour cela nous allons utiliser mount:

# mount /dev/sdb1 /opt/

On monte la partition sur le dossier /opt. On peut maintenant vérifier que la partition est bien montée:

  • soit en listant le contenu du répertoire /opt
# ll /opt/
total 12
drwx------. 2 root root 12288  2 oct.  22:18 lost+found

Le dossier lost+found sert à fsck, utilitaire de récupération des fichiers, pour stocker les blocs utilisés mais non attribués ou se chevauchants.

  • Soit en utilisant la commande mount
# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sdb1 on /opt type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

Info utile: Si vous voulez monter une image ISO, vous pouvez utiliser la commande suivante:

mount -o loop mon_image.iso /opt

fstab

Le problème de la commande mount est qu'elle ne résiste pas au redémarrage et pour que le disque soit monté à chaque démarrage, il faut modifier le fichier /etc/fstab.

C'est dans ce fichier que sont renseigné les informations à propos des systèmes de fichiers et des points de montage.

# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Sep 30 10:57:02 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=27817ca8-2890-4b91-8a7b-4b2023499633 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

Notre partition /dev/sdb1 n'y figure pas mais nous allons remédier à cela. Avant d'aller plus loin, il faut savoir qu'il y a deux façons de désigner les partitions:

  • soit par le périphérique qui les contients: /dev/sda1, /dev/sdb1
  • soit par leurs noms ou UUID: 27817ca8-2890-4b91-8a7b-4b2023499633

Pour avoir les UUID de vos partitions utilisez la commande blkid:

# blkid
/dev/sda1: UUID="27817ca8-2890-4b91-8a7b-4b2023499633" TYPE="ext4"
/dev/sda2: UUID="Q3JwEa-iLF2-3v9D-Gh8J-OeO6-uKid-zJXKnL" TYPE="LVM2_member"
/dev/sdb1: UUID="4632d498-204d-43de-9bd1-f5fcf807118f" TYPE="ext4"
/dev/mapper/VolGroup-lv_root: UUID="05ac331c-df97-4ab0-aaa6-fc71b34c14c3" TYPE="ext4"
/dev/mapper/VolGroup-lv_swap: UUID="de0162fd-9cd7-4d6a-823a-f67e0ed61906" TYPE="swap"

On peut maintenant ajouter la ligne suivante à la fin du fichier:

UUID="4632d498-204d-43de-9bd1-f5fcf807118f" /opt ext4 defaults 0 2

ou bien :

/dev/sdb1 /opt ext4 defaults 0 2

mdadm

Maintenant que l'on sait créer une partition, formater un disque et le monter, nous allons aller un peu plus loin en manipulant non pas un disque mais une grappe de disques !

L'utilitaire mdadm permet de faire ce que l'on appel du RAID logiciel.

Pour cela nous allons avoir besoin de au moins 2 disques si on veut faire du RAID 0 ou 1 mais dans cet exemple nous allons faire du RAID 1+0 ou 10 et il nous faudra 4 disques dur.

# fdisk -l | grep Disque
Disque /dev/sda: 8589 Mo, 8589934592 octets
Disque /dev/sdb: 536 Mo, 536870912 octets
Disque /dev/sdc: 536 Mo, 536870912 octets
Disque /dev/sdd: 536 Mo, 536870912 octets
Disque /dev/sde: 536 Mo, 536870912 octets
Disque /dev/mapper/VolGroup-lv_root: 7205 Mo, 7205814272 octets
Disque /dev/mapper/VolGroup-lv_swap: 855 Mo, 855638016 octets

On a :

  • /dev/sda → qui sert pour le système (pas touche !)
  • /dev/sdb, /dev/sdc, /dev/sdd et /dev/sde qui vont nous servir pour faire notre RAID.

Création des partitions

Pour commencer on va créer 4 partitions sur nos quatre disques grâce à fdisk ce qui donne, une fois l'opération effectuée:

# fdisk -l
...
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1               1         512      524272   83  Linux
...
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdc1               1         512      524272   83  Linux
...
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdd1               1         512      524272   83  Linux
...
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sde1               1         512      524272   83  Linux

Création du volume RAID

On peut maintenant utiliser mdadm pour créer le volume RAID:

# mdadm --create /dev/md0 --level=10 --assume-clean --raid-devices=4 /dev/sd[bcde]1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
  • --assume-clean → permet de passer l'étape de synchronisation des disques (ils sont vides !);
  • --raid-devices → permet de spécifier le nombre de disques (à adapter à votre cas de figure);
  • /dev/sd[bcde]1 → permet de spécifier les périphérique de type bloc utilisés pour le RAID.

On peut maintenant contrôler que notre périphérique /dev/md0 est bien créé:

# fdisk -l /dev/md0

Disque /dev/md0: 1072 Mo, 1072693248 octets
2 têtes, 4 secteurs/piste, 261888 cylindres
Unités = cylindres de 8 * 512 = 4096 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Identifiant de disque : 0x00000000

On note au passage qu'il fait bien 1Go soit:

  • 2 x 512Mo en RAID1 = 512Mo de stockage
  • 2 x 512Mo en RAID0 = 1024Mo soit 1Go

Démonisation

On va utiliser la commande suivante pour signifier à mdadm que l'on veut charger le volume RAID à chaque démarrage :

mdadm --monitor --daemonise /dev/md0

Formatage

On peut maintenant formater le volume /dev/md0 en ext4 :

# fdisk -l /dev/md0

Disque /dev/md0: 1072 Mo, 1072693248 octets
2 têtes, 4 secteurs/piste, 261888 cylindres
Unités = cylindres de 8 * 512 = 4096 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Identifiant de disque : 0x00000000

# mount /dev/md0 /opt/
mount: vous devez spécifier le type de système de fichiers

# mkfs.ext4 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 128 blocs, « Stripe width » = 256 blocs
65536 i-noeuds, 261888 blocs
13094 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=268435456
8 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
        32768, 98304, 163840, 229376

Écriture des tables d'i-noeuds : complété
Création du journal (4096 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Le système de fichiers sera automatiquement vérifié tous les 37 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.

Montage

On peut le monter sur /opt

mount /dev/md0 /opt/

et le renseigner dans /etc/fstab

/dev/md0 /opt ext4 defaults 0 2

Agrandir la grappe

Il peut être intéressant d'ajouter un ou plusieurs disques à votre grappe pour en augmenter le potentiel (taille ou vitesse). Dans l'exemple qui suit, nous allons ajouter deux disques à une grappe de RAID 5 (le RAID 10 sera supporté dans la version 3 de mdadm):

# mdadm --manage /dev/md0 --add /dev/sd[fg]1
mdadm: added /dev/sdf1
mdadm: added /dev/sdg1

Vous remarquerez que les disques /dev/sdf et /dev/sdg on été préalablement partitionnés.

Il ne reste plus qu'a spécifier à mdadam d'utiliser les disques dans la grappe:

mdadm --grow /dev/md0 --raid-devices=6

Enfin, il faut également agrandir le système de fichier:

resize2fs /dev/md0

Supprimer la grappe

Pour supprimer la grappe, il faut l'arrêter:

mdadm --stop /dev/md0

Puis la supprimer:

mdadm --remove /dev/md0

hdparm

Pour tester la vitesse de transfert du volume RAID on peut utiliser l'utilitaire hdparm :

# hdparm -t /dev/md0

/dev/md0:
 Timing buffered disk reads: 762 MB in  3.01 seconds = 253.54 MB/sec

et comparer avec /dev/sda:

# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads: 274 MB in  3.00 seconds =  91.20 MB/sec

On voit clairement le gain de performance apporté par l'utilisation du RAID !