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.
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.
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.
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 du disque et obtention de la référence UUID :
sudo blkid
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.
sudo fdisk -l
sudo parted /dev/sdx
mklabel <type>
mkpart primary ext4 0GB 100%
name 1 <nom>
set 1 boot on
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
sudo apt install e2fsprogs sudo e2label /dev/sdxy nouveau_nom
sudo apt install mtools sudo mlabel -i /dev/sdxy ::nouveau_nom
sudo apt install ntfsprogs sudo ntfslabel /dev/sdxy nouveau_nom
Vérification d'une partition non montée :
sudo e2fsck /dev/sdxn
Vérification tous les 90 jours ou tous les 500 montages :
sudo tune2fs –i 90d –c 500 /dev/sdxn
Vérifier les paramètres « Maximum mount count » et « Check interval » suite à la commande :
sudo dumpe2fs -h /dev/sdxn
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.
| 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 |
Installer les paquets suivants :
sudo apt-get install hfsprogs hfsutils
Utiliser le format HFS+ avec gparted ou autre.
| /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 |
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
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
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.
Point de montage dans l'arborescence.
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 |
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) |
Utilisé pour les sauvegardes. Laisser 0.
Donne l'ordre de vérification au démarrage.
| 0 | swap et partitions windows : pas de vérification |
| 1 | racine |
| 2 | autres partitions linux |
Avant tout redémarrage toujours tester les modifications de la fstab via la commande :
mount -a
| /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 |
Pour monter un fichier comme une image iso il faut utiliser l'option loop
mount -o loop image.iso /mnt
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
| 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 |
Vérifier le type de système de fichiers à l'aide le commande :
blkid
sudo e4defrag -c /localisation
A la fin on obtient un « Fragmentation score » :
xfs_db -r /dev/sdxn xfs_db> frag -d ==> répertoires xfs_db> frag -f ==> fichiers
sudo e4defrag /localisation
xfs_fsr /dev/sdxn xfs_fsr ==> défragmentation de tous les systèmes xf montés
| df -h | Affiche le taux d’occupation des partitions en terme de taille |
| du -sh * | Affiche la taille des répertoires/fichiers |
| 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é |
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
sudo parted /dev/<disque> resizepart 1 100%
sudo resize2fs /dev/root
sudo umount /dev/sdxn
sudo e2fsck -f /dev/sdxn
sudo resize2fs /dev/sdxn <nouvelle taille>
Utiliser gparted.
Démarrer un live CD avec les 2 disques accessibles.
Créer la (ou les) partition de destination, la formater et la rendre bootable en positionnant le drapeau boot.
Monter les 2 disques sous /mnt/src et /mnt/dst puis copier le système de fichiers :
cd /mnt/src cp -dpRx * /mnt/dst
Lister les uuid :
sudo blkid
Adapter le fichier /mnt/dst/etc/fstab avec les nouveaux UUID.
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
pvcreate /dev/sdxn pvdisplay vgcreate vgname /dev/sdxn vgdisplay lvcreate –n lvname –L 50g vgname lvdisplay mkfs –t ext4 /dev/vgname/lvname
umount /dev/mapper/vgname
e2fsck -f /dev/mapper/vgname
Ici on utilise tout l'espcae libre restant du volume group
lvextend -l +100%FREE /dev/mapper/vgname
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
Si déjà dans la fstab on se contente de :
mount -a
Après augmentation de la taille sur une vm par exemple.
partprobe
cfdisk
df -hT
mkfs.ext4 /dev/sdxn
Le Physical Volume est créé automatiquement.
vgextend <vgname> /dev/sdxn vgdisplay
lvextend –l +100%FREE <lvname> lvdisplay
resize2fs <lvname>
df -hT
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
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 :
lsof | grep deleted bash 363415 ec2-user 254r REG 202,4 103 25488824 /home/ec2-user/UPLOAD.sh (deleted)
cd /proc/<PID>/fd
cat <fd> # soit pour l'exemple ci-dessus : cat /proc/363415/fd/254
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
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é.
sudo apt-get install gpart sudo gpart /dev/sdx
sudo gpart /dev/sdx
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
Message d'erreur vu avec la commande dmesg : EXT4-fs: group descriptors corrupted!
sudo mke2fs -n /dev/sdxn Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
sudo e2fsck -b<block number> /dev/sdxn
sudo apt-get install testdisk
sudo testdisk
[create]
[Proceed]
[Intel]
[Analyse]
[Quick Search]
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
sudo dd if=<input> of=<output> bs=<block size> skip= seek= conv=param1,param2,...
sudo dd if=/dev/sdxn of=/dev/sdym bs=64k conv=notrunc status=progress
sudo dd if=/dev/sdx of=/dev/sdy conv=notrunc status=progress
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
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
sudo dd if=/dev/sdxn of=fichier.img bs=64k
dd if=/dev/dvd of=image.iso bs=2048
dd if=/dev/zero of=/dev/sdx conv=notrunc
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é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
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
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]