Aide mémoire : partition et système de fichiers

Mise à jour : Debian / buster

Commandes principales pour identifier, partitionner, formater, sauvegarder, ... les partitions et systèmes de fichiers

Sommaire

1 - Préalable

1.1 - Précautions

Le risque de perte des données ne pouvant être écarté lorsque les partitions et systèmes de fichiers sont manipulés, il est important avant de démarrer l'opération

1.2 - Unités de mesure pour les tailles mémoires

L'utilisation des unités puissance de 2 est recommandée pour le comptage des octets

Le tableau ci-dessous résume pour quelques commandes la notation des unités puissance de 2 en saisie et en affichage

Commande             Saisie unité ^^2        Affichage unité ^^2
Notation Notation et option

parted KiB,MiB,GiB KiB,MiB,GiB avec option unit, par ex unit MiB
df - - - - - - KB, MB, GB avec option -B, par exemple -BMB
fdisk * K,M,G K, M, G par défaut
gdisk * K,M,G KiB,MiB,GiB par défaut
resizepart ** K, M, G **

* Certaines données sont affichées en secteur (512 octets)
** Les données sont affichées en block 4k = 4 x 1024

2 - Identification

2.1 - Liste et caractéristiques des périphériques de stockage

$ lsscsi -tss
[2:0:0:0] disk sata:50026b767a012c69 /dev/sda 447GiB
[3:0:0:0] disk usb:1-1.4:1.0 /dev/sdb 119GiB
[N:0:4:1] disk pcie 0x144d:0xa801 /dev/nvme0n1 232GiB
$ sudo parted /dev/sdb unit MiB print
$ sudo fdisk /dev/sdb -l
$ sudo blkid 
$ lsblk -f
$ findmnt
$ findmnt /dev/sdb1 
$ findmnt /mnt
$ df -BMB -T /dev/sdb1       # Affichage en Millions d'octets (puissance de deux)
$ df -BM -T /home # Affichage en Millions d'octets (puissance de 10)

2.2 - Identifiants

2.2.1 Affichage

$ sudo blkid /dev/sda -s PTTYPE      # Type de partitionnement : dos, gpt, ...
$ sudo blkid /dev/sda -s PTUUID # Identifiant unique du système de partitionnement

ou bien

$ lsblk -l -o NAME,PTTYPE
$ lsblk -f -o NAME,PTUUID
$ sudo blkid -s PARTUUID     # Identifiant unique de partition (GPT seulement)
$ sudo blkid -s PARTLABEL # Etiquette de partition (GPT seulement)

ou bien

$ lsblk -l -o NAME,PARTUUID
$ lsblk -l -o NAME,PARTLABEL
$ sudo blkid -s TYPE         # Type de système de fichier : ext4,vfat,swap,crypto_LUKS,...
$ sudo blikd -s UUID # Identifiant unique de système de fichier
$ sudo blkid -s LABEL # Étiquette du système de fichier

ou bien

$ lsblk -l -o NAME,FSTYPE
$ lsblk -l -o NAME,UUID $ lsblk -l -o NAME,LABEL
$ lsblk -l -o NAME,PARTTYPE

La correspondance entre le code et le type de partition est indiquée dans le tableau ci-dessous

L Linux              0x83 for MBR    0FC63DAF-8483-4772-8E79-3D69D8477DE4 for GPT

S swap area 0x82 for MBR 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F for GPT

E extended partition 0x05 for MBR ------------------------------------

H home partition ----- 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 for GPT

X linux extended part 0x85 for MBR ------------------------------------

U EFI System partition 0xEF for MBR C12A7328-F81F-11D2-BA4B-00A0C93EC93B for GPT

R Linux RAID 0xFD for MBR A19D880F-05FC-4D3B-A006-743F0F84911E for GPT

V LVM 0x8E for MBR E6D6D379-F507-44C2-A23C-238F2A3DF928 for GPT

2.2.2 Affichage et mise à jour

Les commandes de modification de sfdisk ci-dessous, sans paramètres de modification, permettent d'afficher la valeur courante

$ sudo sfdisk /dev/sdb1 --part-type  <Type : voir ci-dessus>
$ sudo sfdisk /dev/sdb --part-label 1 <Etiquette>
$ sudo sfdisk /dev/sdb --part-uuid 1 $(uuidgen)
$ sudo e2fsck -f /dev/sdb1
$ sudo tune2fs /dev/sdb1 -U $(uuidgen)
$ sudo e2label /dev/sdb1 <étiquette>           # cas d'un système de fichier ext4
$ sudo dosfslabel /dev/sdb1 <étiquette> # cas d'un système de fichier fat32
$ sudo ntfslabel /dev/sdb1 <étiquette> # cas d'un système de fichier NTFS
$ sudo sfdisk /dev/sdb -r

3 - Disque mono-partition - partitionnement msdos

3.1 - Exemple 1 - Disque mono-partition fat32

3.1.1 Partitionnement et formatage

$ sudo parted /dev/sdb mktable msdos
$ sudo parted /dev/sdb mkpart primary fat32 1MiB 100%
$ sudo mkfs.vfat -F32 -n MA_CLE-FAT /dev/sdb1 

3.1.2 Montage en ligne de commande

$ sudo mount /dev/sdb1 /mnt
$ sudo mount -o uid=1000,gid=1000 /dev/sdb1 /mnt

3.1.3 Montage avec table de montage

$ mkdir /home/<user>/MA_CLE-FAT
$ cat /etc/fstab |grep MA_CLE-FAT
# Partition MA_CLE-FAT
LABEL=MA_CLE_FAT /home<user>MA_CLE-FAT vfat user 0 2
$ mount MA_CLE_FAT

3.2 - Exemple 2 - Disque mono-partition ext4

3.2.1 Partitionnement, formatage et propriété du système de fichier

$ sudo parted /dev/sdb mktable msdos
$ sudo parted /dev/sdb mkpart primary ext2 1MiB 100%
$ sudo mkfs.ext4 -L MA_CLE-EXT /dev/sdb1

3.2.2 Utilisation en commande manuelle

$ sudo mount /dev/sdb1 /mnt
$ sudo chown <nom_utilisateur>:<nom_utilisateur> /mnt

3.2.3 Utilisation avec table de montage

$ mkdir /home/<user>/MA_CLE-EXT
$ cat /etc/fstab |grep MA_CLE-EXT
# Partition MA_CLE-EXT
LABEL=MA_CLE-EXT /home<user>MA_CLE-EXT ext4 user 0 2
$ mount MA_CLE-EXT

3.3 - Exemple 3 - Disque mono-partition ext4 chiffrée luks

3.3.1 Partitionnement et formatage

$ sudo parted /dev/sdb mktable msdos
$ sudo parted /dev/sdb mkpart primary ext2 1MiB 100%
$ sudo shred -n1 -v /dev/sdb1
$ sudo cryptsetup luksFormat /dev/sdb1
$ sudo cryptsetup open /dev/sdb1 SECRET
$ sudo mkfs.ext4 /dev/mapper/SECRET -L secret

3.3.2 Utilisation en ligne de commande

$ sudo cryptsetup open /dev/sdb1 SECRET
$ sudo mount /dev/mapper/SECRET /mnt
$ sudo chown <nom_utilisateur>:<nom_utilisateur> /mnt
$ sudo umount /mnt
$ sudo crypstetup close SECRET

3.3.3 Utilisation avec table de chiffrage et table de partition

$ cat /etc/crypttab |grep SECRET
# SECRET
SECRET /dev/sdb1 none luks discard
$ mkdir /home/<user>/SECRET
$ cat /etc/fstab |grep SECRET
/dev/mapper/SECRET /home/<user>/SECRET ext4 user 0 2

Note : à la place de l'identifiant /dev/mapper/xxx, on peut utiliser l'étiquette ou l'identifiant unique LABEL= ou UUID= , fourni par

$ sudo blkid /dev/mapper/SECRET
$ sudo umount SECRET
S sudo cryptsetup close SECRET
$ sudo cryptdisks_start SECRET
$ sudo mount SECRET

4 - Disque "système" - partitionnement GPT

4.1 - Exemple 1 - Disque système, amorçage UEFI

4.1.1 Partitionnement et formatage

$ sudo parted /dev/sdb mktable gpt
$ sudo parted /dev/sdb mkpart primary fat32 1MiB 512MiB set 1 esp on
$ sudo mkfs.vfat -F32 /dev/sdb1 -n ESP 
$ sudo parted /dev/sdb mkpart primary linux-swap 512MiB 4GiB 
$ sudo mkswap /dev/sdb2 -L SWAP
$ sudo parted /dev/sdb mkpart primary ext2 4GiB 6GiB
$ sudo mkfs.ext4 -L ROOT /dev/sdb3
$ sudo parted /dev/sdb mkpart primary ext2 6GiB 100%
$ sudo mkfs.ext4 -L HOME /dev/sdb4

4.1.2 Utilisation

$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>

# Partition ESP
LABEL=ESP /boot/efi vfat umask=0077 0 2

# Partition SWAP
LABEL=SWAP none swap sw,discard 0 0

# Partition système
LABEL=ROOT / ext4 defaults 0 1

# Partition HOME
LABEL=HOME /home ext4 defaults 0 2
# Lecteur - Graveur CD/DVD
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

Note : à la place de l'identification par LABEL (LABEL="xxxxxx", on peut également utiliser) du système de fichier

et dans le cas d'un partitionnement GPT

$ sudo mount -a
$ sudo umount -a

4.2 - Exemple 2 - Disque système, amorçage UEFI, root, home et swap chiffrés

4.2.1 Partitionnement et formatage

$ sudo parted /dev/sdb mktable gpt
$ sudo parted /dev/sdb mkpart ESP fat32 1MiB 512MiB set 1 esp on
$ sudo mkfs.vfat -F32 /dev/sdb1 -n ESP
$ cat /etc/fstab |grep ESP
# Partition ESP
LABEL=ESP /boot/efi vfat umask=0077 0 2
$ sudo parted /dev/sdb mkpart BOOT ext4 512MiB 1GiB
$ sudo mkfs.ext4 -L BOOT /dev/sdb2
$ cat /etc/fstab |grep BOOT
# Partition BOOT
LABEL=BOOT /boot ext4 defaults 0 2
$ sudo mkdir /etc/keys
$ sudo dd if=/dev/urandom of=/etc/keys/swapkey bs=512 count=4
$ sudo chmod 600 /etc/keys/swapkey
$ sudo parted /dev/sdb mkpart SWAP linux-swap 512MiB 4GiB
$ sudo shred -n1 -v /dev/sdb3
$ sudo cryptsetup luksFormat /dev/sdb3 /etc/keys/swapkey
$ sudo cryptsetup open /dev/sdb3 SWAP --key-file /etc/keys/swapfile
$ sudo mkswap /dev/mapper/SWAP -L SWAP
$ cat /etc/crypttab |grep SWAP
SWAP /dev/sdb3 /etc/keys/swapkey luks,discard

Note : A la place de /dev/sdb3, on peut utiliser, pour la partition correspondante UUID= ou PARTUUID=, ou PARTLABEL= , obtenus avec

$ sudo blkid /dev/sdb3 -s UUID
$ sudo blkid /dev/sdb3 -s PARTUUID
$ sudo blkid /dev/sdb3 -s PARTLABEL
$ cat /etc/fstab |grep SWAP
/dev/mapper/SWAP none swap sw,discard 0 0
$ sudo parted /dev/sdb mkpart ROOT ext2 4GiB 6GiB
$ sudo shred -n1 -v /dev/sdb4
$ sudo cryptsetup luksFormat /dev/sdb4
$ sudo cryptsetup open /dev/sdb4 ROOT
$ sudo mkfs.ext4 /dev/mapper/ROOT -L ROOT
$ cat /etc/crypttab |grep ROOT
ROOT /dev/sdb4 none luks,discard

Note : A la place de /dev/sdb4, on peut utiliser, pour la partition correspondante UUID= ou PARTUUID=, ou PARTLABEL= , obtenus avec

$ sudo blkid /dev/sdb4 -s UUID
$ sudo blkid /dev/sdb4 -s PARTUUID
$ sudo blkid /dev/sdb4 -s PARTLABEL
$ cat /etc/fstab |grep ROOT
/dev/mapper/ROOT / ext4 errors=remount-ro 0 1
$ sudo mkdir /etc/keys
$ sudo dd if=/dev/urandom of=/etc/keys/keyhome bs=512 count=4
$ sudo chmod 600 /etc/keys/keyhome
$ sudo parted /dev/sdb mkpart HOME ext2 6GiB 100%
$ sudo shred -n1 -v /dev/sdb5
$ sudo cryptsetup luksFormat /dev/sdb5 /etc/keys/keyhome
$ sudo cryptsetup open /dev/sdb5 HOME --key-file /etc/keys/keyhome
$ sudo mkfs.ext4 /dev/mapper/HOME -L HOME
$ cat /etc/crypttab |grep HOME
HOME /dev/sdb5 /etc/keys/keyhome luks,discard
$ cat /etc/fstab |grep HOME
/dev/mapper/HOME / ext4 defaults 0 2

4.2.2 Test

$ sudo cryptdisks_start {ROOT,SWAP,HOME}
$ sudo cryptdisks_start {ROOT,SWAP,HOME}

Note : le verrouillage ne peut avoir lieu que pour les systèmes de fichier non occupés (utiliser swapoff -a pour le swap)

$ sudo mount -a
$ sudo umount -a

Note : le montage ne peut avoir lieu que si les partitions chiffrées sont déverrouillées

5 - Performances

$ sudo hdparm -t /dev/sdb
$ dd if=/dev/zero of=test bs=1M count=4000 conv=fdatasync
$ rm test

6 - Effacement

$ sudo wipefs -af /dev/sdb
$ sudo dd if=/dev/zero of=/dev/sdb status=progress conv=fsync
$ sudo dd if=/dev/unrandom of=/dev/sdb status=progress conv=fsync
$ sudo shred -vz /dev/sdb

7 - Réparation

$ sudo fsck -f /dev/sdb1
$ sudo testdisk /dev/sdb
$ sudo photorec /dev/sdb1

8 - Sauvegarde contenus avec rsync

8.1 - Introduction

$ sudo mount /dev/sdb1 /mnt

8.2 - Recopie répertoires

$ sudo rsync -av test /mnt

$ ls /mnt
test
$ sudo rsync -av test/ /mnt/

$ ls /mnt
randoma randomc randome randomg randomi randomk randomm randomo randomq randoms randomu randomw randomy
randomb randomd randomf randomh randomj randoml randomn randomp randomr randomt randomv randomx randomz

8.3 - Synchronisation "système"

Synchronisation de la racine avec exclusion et suppression des répertoires présents dans --exclude

$ sudo rsync -aAXv --delete-excluded \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"} \
/ /mnt/

8.4 - Synchronisation "home"

Synchronisation du répertoire home, avec exclusion et suppression des répertoires et fichiers présents dans --filter

$ sudo rsync -av --delete-excluded \
--filter={"- Trash/","- lost+found/","- *.tmp","- .thumbnails/"} \
/home/ /mnt/

8.5 - Options

--dry-run
--progress

9 - Sauvegarde partitions avec partclone

Recopie de la partition ext4 /dev/sdb1 dans la partition /dev/sdb2 (taille au moins égale à la partition /dev/sdb1), les deux partition doivent être démontées

$ sudo partclone.ext4 -b -d -s /dev/sdb1 -o /dev/sdb2
$ sudo partclone.ext4 -c -d -s /dev/sdb1 -o clone.img

La partition /dev/sdb2 doit-être disponible, non montée et de taille égale ou supérieure à la partition d'origine ayant servi à créer l'image

$ sudo partclone.ext4 -r -d -s clone.img -o /dev/sdb2

Annexe 1 - Dépannage

$ sudo lsof +D /mnt
$ sudo fuser -v -m /mnt
$ sudo fuser -k -i /mnt