Table des matières
Partitions/File system
Partitionnement disque
Partitionnement MBR (Master Boot Record)
Table de partition
La table de partitions principale est contenue dans le tout premier secteur du support dit secteur d'amorçage. Chaque entrée d'une table de partitions contient l'adresse de début de la partition et sa taille. Il peut s'agir de partitions primaires, qui contiendront un système de fichiers, ou de paritions étendues, qui contiendront à leur tour une table de partitions ayant la même structure que la table principale.
Partitions primaires
Dans la table de partitions principale, on peut créer au plus quatre partitions, qui sont ou bien quatre partitions primaires, ou bien une à trois partitions primaires associée(s) à une partition étendue (généralement la dernière). Une partition étendue permet de s'affranchir de la limite historique de quatre partitions par support.
Partition étendue, partitions secondaires
Lorsque l'on a besoin de plus de quatre partitions, il faut donc créer une partition étendue. Cette dernière est simplement une partition primaire spéciale qui va contenir à son tour des partitions secondaires (souvent appelées partitions logiques). L'outil fdisk sous Linux gère jusqu'à 60 partitions : trois partitions principales et une partition étendue contenant 56 partition logiques.
Partitionnement GPT (GUID Partition Table)
Pas de limite à 4 partitions, limite à 128 partitions sous Windows 64 bits. En mode GPT, les informations concernant la table de partitionnement sont stockées dans un entête GPT, mais pour garantir une compatibilité (avec les logiciels gérant MBR mais non GPT), GPT maintient une entrée MBR (dite protectrice car englobant la totalité du disque) suivie de l'entête d'une partition primaire, le véritable début de la table de partitionnement.
Identification disque
Identification du disque et obtention de la référence UUID :
sudo blkid
fdisk (jusqu'à 2 To)
sudo fdisk /dev/sdx
Création d’une partition en tapant n puis p pour partition primaire
Numéro de partition 1
Cylindre de début : laisser par défaut
Cylindre de fin : laisser par défaut pour tout le disque ou bien nbre de cylindre ou taille en Mo (ex : +500M)
Enfin pour enregistrer les modifications et quitter taper w.
Lister les partitions
sudo fdisk -l
parted (à partir de 2 To)
sudo parted /dev/sdx
- affiche la table de partition
- création d’un nouveau label du type gpt, msdos, bsd, mac, pc98, sun ou loop (raw disk access)
mklabel <type>
- création d’une partition primaire utilisant toute la taille du disque avec un filesystem ext4
mkpart primary ext4 0GB 100%
- donne un nom à la partition 1
name 1 <nom>
- rend la partition 1 bootable. Partitions 1 à 4 pour les primaires et à partir de 5 les partitions étendues.
set 1 boot on
Lister les partitions
Système de fichiers
Différents file system
FAT16
- Taille maximum partition : 2 Go (voir 4 Go)
- Taille maximum fichier : 4 Go
- Taille maximale nom de fichier : 8.3 étendu à 255 caractères avec VFAT
- Nombre maximum de fichier au total : 65 518
FAT32
- Taille maximum partition : 2 To
- Taille maximum fichier : 4 Go
- Taille maximale nom de fichier : 255 caractères (UTF-16)
- Nombre maximum de fichier par répertoire : 65 534 (en incluant les entrée répertoire courant et répertoire parent)
- Nombre maximum de fichier au total : 2 28 (268 000 000)
NTFS
- Taille maximum partition : 256 To
- Taille maximum fichier : 16 To
- Taille maximale nom de fichier : 255 caractères (UTF-16)
- Nombre maximum de fichier au total : 2 32 - 1 (4 294 967 295)
ext4
- Taille maximum partition : 16 To
- Taille maximum fichier : 16 To
- Taille maximale nom de fichier : 255 octets
- Nombre maximum de fichier au total : 2 32
Btrfs
- Taille maximum partition : 16 Eio
- Taille maximum fichier : 16 Eio
- Taille maximale nom de fichier : 255 octets
- Nombre maximum de fichier au total : 2 64
XFS
- Taille maximum partition : 16 Eio
- Taille maximum fichier : 8 Eio
- Taille maximale nom de fichier : 255 octets
ZFS
- Taille maximum partition : 16 Eio
- Taille maximum fichier : 16 Eio
- Taille maximale nom de fichier : 255 octets
- Nombre maximum de fichier au total : 2 48
Formatage
sudo mkfs /dev/sdxn –t ext4
Avec « x » lettre du disque et « n » numéro de partition.
Pour le format xfs installer le paquet xfsprogs :
sudo apt-get install xfsprogs sudo mkfs /dev/sdxn –t xfs
Label
ext2/ext3
sudo apt install e2fsprogs sudo e2label /dev/sdxy nouveau_nom
FAT32
sudo apt install mtools sudo mlabel -i /dev/sdxy ::nouveau_nom
NTFS
sudo apt install ntfsprogs sudo ntfslabel /dev/sdxy nouveau_nom
Vérification
Manuel
Vérification d'une partition non montée :
sudo e2fsck /dev/sdxn
Automatique
Vérification tous les 90 jours ou tous les 500 montages :
sudo tune2fs –i 90d –c 500 /dev/sdxn
Interrogation paramètres
Vérifier les paramètres « Maximum mount count » et « Check interval » suite à la commande :
sudo dumpe2fs -h /dev/sdxn
SWAP
Pour définir une partition ou un fichier comme espace d’échange :
sudo mkswap /dev/sda6
Pour activer la partition d’échange :
sudo swapon /dev/sda6
A ajouter dans le fichier /etc/fstab pour prise en compte permanente.
Interrogation
| file –s /dev/sda1 | Retourne le système de fichiers de la partition |
| lsblk -f | affiche les filesystems des devices block |
| lsblk -m | affiche les propriétaires et les droits associés des devices block |
| lsblk -t | affiche la topologie des devices block |
| df -h | affiche l’utilisation des différents systèmes de fichiers |
Echange de fichiers avec MAC
Installer les paquets suivants :
sudo apt-get install hfsprogs hfsutils
Utiliser le format HFS+ avec gparted ou autre.
Arborescence filesystem linux
| /bin | commandes disponible en runlevel 1 |
| /sbin | autres commandes indispensables au système |
| /usr | binaires pour les utilisateurs |
| /opt | binaires non système |
| /lib | librairies |
| /sys | ensemble du système tel que vu par le noyau Linux |
| /proc | répertoire virtuel, représentation des process en cours |
| /dev | devices |
| /var | log, e-mail, spool d’impression,… |
| /tmp | espace temporaire (effacé au reboot) |
| /home | home dir des utilisateurs |
| /etc | fichiers de configuration |
Montage
Montage temporaire
Utilisation de la commande mount :
sudo mount /dev/sdb1 /mnt
Pour défaire le montage on peut préciser le point de montage ou bien l'objet du montage :
sudo umount /mnt sudo umount /dev/sdb1
Montage persistant
Afin de rendre persistant un montage il faut utiliser le fichier /etc/fstab. Celui-ci contient les informations suivantes :
<file system> <mount point> <type> <options> <dump> <pass> UUID=xxxxxxx / ext4 errors=remount-ro 0 1 UUID=yyyyyyy none swap sw 0 0
File system
Il est préférable d'indiquer l'UUID obtenu par la commande blkid plutôt qu'un chemin en dur du type /dev/sda1. En effet ce dernier peut changer lors de l'ajout d'un nouveau device.
Mount point
Point de montage dans l'arborescence.
Type
Indique le format de la partition.
| ext2,ext3,ext4,xfs | Format linux |
| swap | Swap linux |
| tmpfs | Filesyste temporaire en mémoire |
| fat | Windows fat16 |
| vfat | Windows fat32 |
| ntfs | Windows ntfs |
| hfsplus | MAC |
| iso9660 | Disques |
Options
Les options s'appliquent en fonction des systèmes de fichiers.
| option | Description | filesystem |
|---|---|---|
| defaults | Correspond à rw,suid,dev,exec,auto,nouser,async | tous |
| rw/ro | Montage en lecture/écriture (par défaut) ou lecture seule | tous |
| suid/nosuid | Les bits suid et sgid sont pris en compte (ou non). Relatif aux droits donnés aux exécutables sur la partition | tous |
| dev/nodev | Interprète ou non les fichiers spéciaux de périphériques présents sur le système (par défaut) | tous |
| exec/noexec | Autorise l'exécution des programmes (par défaut) | tous |
| auto/noauto | Montage automatique (ou non) lors d'un appel mount -a (par défaut) | tous |
| nouser | Seul le compte root peut monter/démonter le système de fichier (par défaut) | tous |
| _netdev | Le système de fichiers est sur une machine qui nécessite un accès réseau. Cela indique au système d'attendre que la configuration réseau soit active avant de procéder au montage | ? |
| async | Montage asynchrone (par défaut) | tous |
| atime/noatime | Inscrit (ou non) la date d'accès (préférer noatime pour les SSD) | norme POSIX |
| sw | Montage des partitions swap | swap |
| discard | active le TRIM sur les partitions SSD (à rajouter manuellement) | ext4,brfs (SSD) |
Dump
Utilisé pour les sauvegardes. Laisser 0.
Pass
Donne l'ordre de vérification au démarrage.
| 0 | swap et partitions windows : pas de vérification |
| 1 | racine |
| 2 | autres partitions linux |
Prise en compte des modifications
Avant tout redémarrage toujours tester les modifications de la fstab via la commande :
mount -a
Sécurité
| /tmp | peut être monté avec l'option noexec pour interdire l'exécution à partir de ce répertoire |
| /usr | monter en read-only pour sécuriser une fois l'installation des softs terminés |
Montages particuliers
Monter un fichier
Pour monter un fichier comme une image iso il faut utiliser l'option loop
mount -o loop image.iso /mnt
Monter un répertoire
Pour remonter un répertoire ailleurs dans l'arborescence en read only :
mount --bind olddir newdir mount -o remount,ro,bind olddir newdir
Ou pour un montage persistent via la fstab :
olddir newdir none bind,ro
Interrogation
| df -h | Liste les systèmes de fichiers |
| mount | Liste les montages |
| mount | column -t | idem plus lisible |
| findmnt | Liste les montages de manière hiérarchique |
Fragmentation
Interrogation
Vérifier le type de système de fichiers à l'aide le commande :
blkid
Système de fichier ext4
sudo e4defrag -c /localisation
A la fin on obtient un « Fragmentation score » :
- de 0 à 30 : le système de fichiers n'est pas fragmenté.
- de 31 à 55 : le système de fichiers est un peu fragmenté.
- à partir de 56 : le système de fichiers devrait être défragmenté.
Système de fichier xfs
xfs_db -r /dev/sdxn xfs_db> frag -d ==> répertoires xfs_db> frag -f ==> fichiers
Défragmentation
Système de fichier ext4
sudo e4defrag /localisation
Système de fichier xfs
xfs_fsr /dev/sdxn xfs_fsr ==> défragmentation de tous les systèmes xf montés
Sources
Espace disque
Interrogation
En volume
| df -h | Affiche le taux d’occupation des partitions en terme de taille |
| du -sh * | Affiche la taille des répertoires/fichiers |
En nombre d'inodes
| df –i | Affiche le taux d’occupation des partitions en terme d’inodes | |
| du –inodes -d 3 / | sort –n | Affiche la liste triée des répertoires/fichiers avec le nombre d’inodes utilisé |
Disque saturé
Pour résoudre le problème d'un disque saturé on utilisera les commandes suivantes :
df -h # pour vérifier l'espace libre sur les partitions du -sh * # pour vérifier l'espace pris par les différents fichiers ls -alhS # lister les fichiers par ordre de taille ncdu # idem mais graphique lsof +L1 # pour lister les fichiers supprimés qui sont encore ouvert par des process
Augmenter la taille de la partition /
- Augmenter la taille du disque virtuel
- Identifier le disque et la partition à agrandir
- Redimensionner la partition (exemple pour la partition 1)
sudo parted /dev/<disque> resizepart 1 100%
- Etendre le système de fichier
sudo resize2fs /dev/root
Diminuer la taille d'une partition
Démonter la partition
sudo umount /dev/sdxn
Vérification du système de fichier
sudo e2fsck -f /dev/sdxn
Redimensionnement du système de fichiers
sudo resize2fs /dev/sdxn <nouvelle taille>
Redimensionnement partition
Utiliser gparted.
Copier un système linux sur un disque plus petit
Démarrer un live CD avec les 2 disques accessibles.
Préparation disque
Créer la (ou les) partition de destination, la formater et la rendre bootable en positionnant le drapeau boot.
Copier le système de fichiers
Monter les 2 disques sous /mnt/src et /mnt/dst puis copier le système de fichiers :
cd /mnt/src cp -dpRx * /mnt/dst
Adaptation fstab
Lister les uuid :
sudo blkid
Adapter le fichier /mnt/dst/etc/fstab avec les nouveaux UUID.
GRUB
Reconstruire un grub adapté :
sudo mount --bind /dev /mnt/dst/dev sudo mount --bind /proc /mnt/dst/proc sudo chroot /mnt/dst sudo grub-mkconfig -o /boot/grub/grub.cfg grub-install /dev/sdx
LVM
VG : Volume Group
LV : Logical Volume
Création
pvcreate /dev/sdxn pvdisplay vgcreate vgname /dev/sdxn vgdisplay lvcreate –n lvname –L 50g vgname lvdisplay mkfs –t ext4 /dev/vgname/lvname
Extension
Démonter le volume
umount /dev/mapper/vgname
Vérifier le système de fichiers
e2fsck -f /dev/mapper/vgname
Etendre le volume
Ici on utilise tout l'espcae libre restant du volume group
lvextend -l +100%FREE /dev/mapper/vgname
Etendre le système de fichier
resize2fs /dev/mapper/vgname
Pour un système de fichier xfs on utilisera la commande xfs_growfs qui fonctionne avec le système de fichier monté. Ainsi pour étendre le filesystem root avec tout l'espace disponible :
xfs_growfs /dev/centos/root
Remonter le système de fichier
Si déjà dans la fstab on se contente de :
mount -a
Augmenter taille partition
Après augmentation de la taille sur une vm par exemple.
Forcer le système à relire les informations liées aux disques
partprobe
Créer une partition à la suite des autres
cfdisk
Vérifier le type des partitions
df -hT
Formater la partition avec le type désiré
mkfs.ext4 /dev/sdxn
Ajouter la partition dans le VG
Le Physical Volume est créé automatiquement.
vgextend <vgname> /dev/sdxn vgdisplay
Extension du LV
lvextend –l +100%FREE <lvname> lvdisplay
Redimensionnement du système de fichiers
resize2fs <lvname>
Vérification du résultat
df -hT
Snapshot
lvcreate --size 1g --snapshot -n <nomdusnapshot> /dev/vg1/data lvcreate –L 1g –s –n <nomdusnapshot> /dev/vg1/data mount -o ro,auto /dev/vg1/lv-snap3 /local/snapshot/3
Récupération fichier
Avec process en cours
Il est possible de retrouver le contenu d'un fichier qui a été ouvert par un process qui est toujours en cours d'exécution en allant voir son contexte en mémoire. Exemple un script UPLOAD.sh lance un process java. Après suppression du fichier :
- Lister les fichiers effacés
lsof | grep deleted bash 363415 ec2-user 254r REG 202,4 103 25488824 /home/ec2-user/UPLOAD.sh (deleted)
- Récupérer le numéro de processus et aller chercher le file descriptor dans le contexte en mémoire
cd /proc/<PID>/fd
- Copier le contenu du fichier pour le sauvegarder
cat <fd> # soit pour l'exemple ci-dessus : cat /proc/363415/fd/254
Investigation HDD défectueux
Affichage données SMART
smartctl –a /dev/sda : liste toutes les données SMART smartctl –x /dev/sda : liste toutes les données SMART et non SMART du device
Vérification d'un disque
sudo badblocks -s -v -c 10240 /dev/sdx
| option | fonction |
|---|---|
| -s | Affiche l'état d'avancement |
| -v | Affiche toutes les erreurs |
| -c | Permet de déterminer la taille des blocs à tester |
Une fois le test terminé, le nombre de secteurs défectueux est affiché.
Récupération table de partition
Installation package gpart
sudo apt-get install gpart sudo gpart /dev/sdx
Lecture table de partition
sudo gpart /dev/sdx
Recréation de la table
Si le résultat de la lecture de la table semble cohérent on peut tenter de recréer la table :
sudo gpart -W /dev/sdx /dev/sdx
Récupération descripteur d'un système de fichier
Message d'erreur
Message d'erreur vu avec la commande dmesg : EXT4-fs: group descriptors corrupted!
Recherche des sauvegardes du descripteur
sudo mke2fs -n /dev/sdxn Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Restauration du superblock à partir d'une des sauvegardes
sudo e2fsck -b<block number> /dev/sdxn
Récupération données sur HDD défectueux
Installer le package testdisk
sudo apt-get install testdisk
Lancer testdisk
sudo testdisk
- Création fichier de log … ou pas
[create]
- Sélectionner le périphérique
[Proceed]
- Sélectionner le type de partition
[Intel]
- Lancer l'analyse
[Analyse]
[Quick Search]
Test performances
sudo hdparm -t --direct /dev/sdx dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync # test les performances sur la création d'un fichier d'1 Go
Commande dd
Syntaxe
sudo dd if=<input> of=<output> bs=<block size> skip= seek= conv=param1,param2,...
- if : périphérique source
- of : périphérique destination
- bs : taille des block. Puissance de 2 supérieure à 512. Sur du matériel moderne bs=4096 est une bonne valeur (équivalent à bs=4k).
- skip : saute des blocs d'entrée au début du média.
- seek : saute autant de blocs sur le média de sortie avant d'écrire .
- conv=notrunc : ne pas tronquer le fichier en sortie
- conv=noerror : continuer en cas d'erreur de lecture (source défectueuse).
Copier une partition sur une autre
sudo dd if=/dev/sdxn of=/dev/sdym bs=64k conv=notrunc status=progress
Cloner un disque dur entier
sudo dd if=/dev/sdx of=/dev/sdy conv=notrunc status=progress
Copier un disque sur un disque plus petit
Clonezilla
- Faire une copie de disque vers disque.
- Cocher l'option -icds « Ne pas vérifier le disque cible avant de créer la table de partition »
- Dans un des panels suivants choisir l'option -k1 « Créer la table de partition proportionnellement »
Manuellement
Copie d'un disque avec une seule partition, on saute la table de partition lors de la copie. En agissant ainsi, on laisse intacts les 4 premiers Ko sur chaque disque (on ne veut pas dire à un lecteur qu'il est plus gros qu'il n'est en réalité en écrivant une table de partition depuis un lecteur plus gros vers un lecteur plus petit).
dd if=/dev/sdx skip=1 of=/dev/sdy seek=1 bs=4k status=progress
Copier un disque sur un disque plus grand
Si vous copiez une partition plus petite vers une plus grande, la plus grande partition affichera sa taille correcte avec :
fdisk -l
Mais pas avec :
df -h
Cela parce que fdisk lit la table de partitions et df lit l'info de format. Pour palier ce problème après avoir copier le disque :
e2fsck -f /dev/sdxn resize2fs /dev/sdxn
Sauvegarde d'une partition dans un fichier
sudo dd if=/dev/sdxn of=fichier.img bs=64k
Créer une image iso à partir d'un CD/DVD
dd if=/dev/dvd of=image.iso bs=2048
Effacer un disque dur
Effacement simple
dd if=/dev/zero of=/dev/sdx conv=notrunc
Effacement sécurisé
for n in `seq 7`; do dd if=/dev/urandom of=/dev/sdx bs=8b conv=notrunc; done
On réalise 7 passes d'inscriptions aléatoires de caractères sur tout le disque.
Créer un fichier d'une taille donnée
Fichier de zéro
Création d'un fichier de 100 Mo de 0 (100 000 blocs de 1 Ko) :
dd if=/dev/zero of=fichier bs=1k count=100000
Fichier au contenu aléatoire
Création d'un fichier de 100 octets aléatoires :
dd if=/dev/urandom of=fichier bs=1 count=100
Création d'un fichier de 10 Go aléatoires :
dd if=/dev/urandom of=fichier bs=1024 count=10485760
Fichier vide
Il s'agit d'un fichier dont la taille apparait bien avec la commande ls mais dont la taille réelle sur le disque est nulle avec la commande du -sh Fichier vide de 10 Mo :
dd if=/dev/zero of=10M.bin bs=1024 count=0 seek=$[1024*10]
Fichier vide de 100 Mo :
dd if=/dev/zero of=100M.bin bs=1024 count=0 seek=$[1024*100]
Fichier vide de 1 Go :
dd if=/dev/zero of=1G.bin bs=1024 count=0 seek=$[1024*1024]


