Les disques sous Linux

Résumé sur les commandes générales et essentielles pour manipuler les disques sous Linux, visualiser les différents systèmes de fichiers, les différents disques et pour gérer les partitions.

Informations sur les périphériques

Disques SCSI/SATA

La commande lsscsi permet d’énumérer les périphériques SCSI/SATA. L’option -s permet d’obtenir la taille du disque.

# lsscsi -s
[0:0:0:0] disk ATA ST1000LM024 HN-M 2BA3 /dev/sda 1.00TB
[1:0:0:0] cd/dvd PLDS DVD-RW DA8A5SH RL61 /dev/sr0 -
[4:0:0:0] disk Generic- xD/SD/M.S. 1.00 /dev/sdb

Disques SATA uniquement

L’utilitaire hdparm permet d’obtenir des informations pour les disques SATA.

# hdparm /dev/sda1
/dev/sda1:
multcount = 16 (on)
IO_support = 1 (32-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 46593/255/63, sectors = 2009, start = 40

L’option -g permet d’avoir des informations sur les secteurs.

# hdparm -g /dev/sda1
/dev/sda1:
geometry = 46593/255/63, sectors = 2009, start = 40

Informations sur les périphériques Block

Les périphériques de bloc sont des périphériques de stockage tels que des disques durs, des lecteurs flash, etc. La commande lsblk est utilisée pour signaler des informations sur les périphériques de bloc comme suit.

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1,8T 0 disk
├─sda1 8:1 0 1004,5K 0 part
├─sda2 8:2 0 195,3G 0 part /
├─sda3 8:3 0 1,6T 0 part /home
└─sda4 8:4 0 2G 0 part [SWAP]

Si vous souhaitez afficher tous les périphériques de bloc sur votre système, incluez l’option -a.

# lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0 9:0 0 0 md
sda 8:0 0 1,8T 0 disk
├─sda1 8:1 0 1004,5K 0 part
├─sda2 8:2 0 195,3G 0 part /
├─sda3 8:3 0 1,6T 0 part /home
└─sda4 8:4 0 2G 0 part [SWAP]
nbd0 43:0 0 0 disk
nbd1 43:1 0 0 disk
nbd2 43:2 0 0 disk
ram0 1:0 0 4M 0 disk
ram1 1:1 0 4M 0 disk
ram2 1:2 0 4M 0 disk
loop0 7:0 0 0 loop
loop1 7:1 0 0 loop
loop2 7:2 0 0 loop
nbd10 43:10 0 0 disk
nbd11 43:11 0 0 disk
nbd12 43:12 0 0 disk
ram10 1:10 0 4M 0 disk
ram11 1:11 0 4M 0 disk
ram12 1:12 0 4M 0 disk

Interruptions

Une interruption est un arrêt temporaire de l’exécution normale d’un programme par le CPU afin d’exécuter un autre programme (appelé service d’interruption).

# cat /proc/interrupts

Système de fichiers

Commande fsck

La commande fsck permet de vérifier et de réparer un système de fichiers.

# fsck

Commande badblocks

La commande badblocks tente de vérifier les blocs défectueux sur le périphérique de stockage fourni en argument. Elle peut être appelée par mkfs ou fsck si le paramètre -c (check) leur est fourni. Par défaut badblocks lit l’intégralité des blocs du support et retourne un erreur si un ou plusieurs d’entre eux sont illisibles. La commande peut être lancée même si le système de fichiers est monté, sauf si vous tentez un test en lecture et écriture, même non destructif.

# badblocks -v /dev/sda2
Vérification des blocs 0 à 530144
Vérification des blocs défectueux (test en mode lecture seule) : done
Passe complétée, 0 blocs défectueux repérés.

Les paramètres -n (non destructif) et -w (write, avec motifs, destructif) tentent des écritures sur les blocs. Le premier lit et réécrit le bloc à l’identique, le second écrit plusieurs motifs (0xaa, 0x55, 0xff, 0x00) donc écrase l’ancien contenu. L’exécution de badblocks peut être très longue, plusieurs heures sur quelques centaines de Go.

Commande dumpe2fs

La commande `dumpe2fs`` accepte en argument un périphérique contenant un système de fichiers ext2 ou ext3. Elle retourne un grand nombre d’informations sur le système de fichiers.

# dumpe2fs /dev/sda2
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 43e1d790-5a64-49f5-b2ab-f4b8cb231cfc
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl

Commande tune2fs

La commande tune2fs est l’une des commandes unix avancées qui vous permet d’ajuster divers paramètres accordables des systèmes de fichiers ext2/ext3. Naturellement, cela vous aide également à confirmer les paramètres existants configurés pour vos systèmes de fichiers.

La commande tunefs -l vous montrera toutes les informations contenues dans le superbloc d’un système de fichiers.

# tune2fs -l /dev/sda2
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: bf43701d-71a7-4da9-8c79-5df4b428e776
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
[...]

Information sur les partitions

Le fichier /proc/partitions

Ce fichier contient des informations d’allocation de blocs de partition.

  • major : correspond au bloc de périphérique ide0, dans /proc/devices
  • minor : sert à séparer les partitions en plusieurs disques physiques, le nombre correspond à la fin du nom de la partition.
  • blocks : nombre de blocs contenus dans la partition.
  • name : nom de la partition.
# cat /proc/partitions 
major minor #blocks name
8 0 1953514584 sda
8 1 1004 sda1
8 2 204798976 sda2
8 3 1746662400 sda3
8 4 2046976 sda4

Le fichier /etc/fstab

Le fichier /etc/fstab contient une configuration statique des différents montages des systèmes de fichiers. Il est appelé à chaque démarrage du système car c’est ici qu’on indique les périphériques et leurs points de montage. Il contient six champs : périphérique point_de_montage typefs options dump fsck.

# cat /proc/partitions 
major minor #blocks name
8 0 1953514584 sda
8 1 1004 sda1
8 2 204798976 sda2
8 3 1746662400 sda3
8 4 2046976 sda4

Manipuler les partitions

Commande fdisk

Lancé tel quel fdisk -l se place sur le premier disque du système. Le paramètre -l permet de lister les partitions du disque donné, ou de tous les disques.

# fdisk -l /dev/sda
Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 1 3907029167 1953514583+ ee GPT
Partition 1 does not start on physical sector boundary.

Pour manipuler les partitions (suppression, ajout, modification) il faut lancer fdisk directement sur le DD. Il est ensuite conseillé d’aller regarder l’aide en tapant sur m :

# fdisk /dev/sda
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Commande (m pour l'aide) : m

Monter / démonter / remonter / forcer un périphérique

Lister les périphériques avec mount

La commande mount permet d’accéder aux périphériques de type blocs (les partitions) sur lesquels un système de fichiers existe. La commande mount attache le répertoire racine du système de fichiers à un répertoire pré-existant appelé point de montage (mountpoint).

# mount
/dev/root on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=4033320k,nr_inodes=1008330,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=806756k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=2022900k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
/dev/sda3 on /home type ext4 (rw,relatime,quota,usrquota,grpquota,data=ordered

Les mêmes informations sont accessibles en affichant le contenu du fichier /etc/mtab.

# cat /etc/mtab

Monter un périphérique avec mount

La partition sdb1 disposant de nouveau d’un système de fichiers ext3, la commande suivante rattache la racine du système de fichiers contenu dans sdb1 au répertoire /mnt/DATA.

mount -t ext3 /dev/sdb1 /mnt/DATA

Remonter un système de fichiers

Vous n’êtes pas obligé·e de démonter puis de remonter un système de fichiers si vous modifiez une option. Si vous modifiez une option de montage du système de fichiers (via le paramètre -o) vous pouvez passer l’option remount pour que la modification soit prise tout de suite en compte. Ne retapez pas la ligne de commande complète, mais seulement le périphérique ou le point de montage. Dans l’exemple suivant le système de fichiers est remonté en lecture seule :

# mount -o ro,remount /mnt/DATA

Démonter un périphérique

La commande umount détache le système de fichiers du point de montage.

# umount /mnt/DATA

Périphérique occupé, donc pas démontable

Si un ou plusieurs fichiers du système de fichiers à démonter sont encore en cours d’utilisation, alors umount ne marchera pas.

# umount /mnt/DATA
umount: /mnt/DATA: périphérique occupé
Impossibilité de démonter un périphérique

Vous devez vous assurer qu’aucun processus n’accède au système de fichiers.

Commande lsof

La commande lsof vous aide à déterminer quel processus est actuellement en train d’utiliser un fichier du point de montage. Ici c’est le shell bash lancé par l’utilisateur john qui y est présent (probablement que le répertoire courant est /mnt/DATA).

# lsof /mnt/DATA
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 5366 john cwd DIR 8,17 4096 2 /mnt/DATA

Forcer un périphérique à se démonter

Commande fuser

De manière très violente vous pouvez forcer l’arrêt des processus accédant au point de montage avec fuser. Il est fort probable que l’utilisateur concerné n’apprécie pas du tout (dans le cas présenté ici son shell sera arrêté et il sera déconnecté).

# fuser -km /mnt/DATA

Commande df

La commande df permet d’obtenir des statistiques d’occupation de chaque système de fichiers monté. Sans argument, df fournit des informations sur tous les systèmes de fichiers. Vous pouvez passer comme argument un périphérique monté ou un point de montage. Si vous passez un répertoire quelconque, df donne des informations sur le système de fichiers qui contient ce répertoire.

# df
Sys. de fich. 1K-blocs Occupé Disponible Capacité Monté sur
/dev/sda3 41286828 6482952 32706592 17% /
udev 1031240 124 1031116 1% /dev
/dev/sda2 521780 27092 468184 6% /boot
/dev/sdb1 153834852 49189572 96830864 34% /home
/dev/sda6 73142560 19150372 50276760 28% /public
/dev/sdc1 292890560 175894672 116995888 61% /media/EXTERNE

Le résultat est explicite. L’unité par défaut est le kilo-octet (identique au paramètre -k) bien que la norme POSIX
définisse une unité de bloc à 512 octets. Vous pouvez modifier les paramètres pour demander le résultat en Mo(-m).

# df -m /home
Sys. de fich. 1M-blocs Occupé Disponible Capacité Monté sur
/dev/sdb1 150230 48043 94557 34% /home

Pour que ce soit plus lisible, rajoutez le paramètre -h (Human readable), à ne pas confondre pas ce dernier paramètre avec -H qui affiche le résultat en unités SI (Système International).

# df -h /home
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur
/dev/sdb1 147G 47G 93G 34% /home

Le -T rajoute l’affichage du type de système de fichiers.

# df -T /home
Sys. de fich. Type 1K-blocs Occupé Disponible Capacité Monté sur
/dev/sdb1 ext3 153834852 49197688 96822748 34% /home
> Partager <