Outils pour utilisateurs

Outils du site


all:bibles:linux:hdd

Partitions/File system


Attention lors des manipulations de toujours bien identifier le disque /dev/sdx et de ne surtout pas se tromper lors des commandes.

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.

La partition d'amorçage d'un système Windows est forcement la première partition primaire.

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.

Taper m pour obtenir de l'aide sur les commandes disponibles.

Lister les partitions

sudo fdisk -l

parted (à partir de 2 To)

sudo parted /dev/sdx
  • affiche la table de partition
print
  • 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

sudo parted -ls

Haut de page

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

Source

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

Haut de page

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
Après redémarrage le montage sera perdu.

Montage persistant

Attention des modifications erronées dans la fstab peuvent empêcher le système de redémarrer.

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

Haut de page

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

source

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

Haut de page

LVM

PV : Physical Volume
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

Haut de page

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
Cette étape peut être très longue.

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]


Haut de page

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

Haut de page

Commande dd

Source

Possibilité d'installer la version améliorée : dcfldd

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]

Convertir un fichier en minuscule

dd if=Fichier_Source of=Fichier_Cible conv=ucase

Haut de page

all/bibles/linux/hdd.txt · Dernière modification : de omeylhoc