Gestion des disques
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 !