FS : File System

Mémoire de masse:

Les disques durs (ssd ou mécanique) , les clé usb sont des supports de mémoire de masse.

On doit faire un partitionnement ou non , les formater avec un file system (système de fichier) selon le système d’exploitation utilisé.

il existe un logiciel graphique du nom gparted ,

très facile à prendre en mains et qui peut faire gagner beaucoup de temps, mais cependant il faut connaitre l’envers du décor donc nous allons voir comment faire tout cela en ligne de commande avec fdisk .

File Sytem (FS):

Les systèmes de fichiers permettent de gérer les données d’un support de masse.

les plus connus sont :

dans le monde microsoft:

  • ntfs 
      • taille maximale d’un fichier  :16 Tio
      • nombre maximal de fichiers :4 milliards
      • 255 caractères UTF-16 pour un nom de fichier
      • tout caractères UTF-16 à l’exception « / »
      • permissions ACL 
      • chiffrement intégré.
  • fat 

ancêtre du fat32

  • fat32
      • taille maximale d’un fichier  :4 Go
      • nombre maximal de fichiers :250 millions
      • 255 caractères UTF-16 pour un nom de fichier

Dans le monde unix/linux:

  • taille maximale d’un fichier  :16 Tio
  • nombre maximal de fichiers :4 milliards
  • 255 octets pour un nom de fichier
  • chiffrement possible depuis 2015

Pour unix/linux  par Oracle 

Ce qu’il faut connaitre sur les « File System »:

Le format fat32 est souvent le format utilisé sur une mémoire  USB (microsoft est ok)  pas de permission donc facile pour échanger des données.

ntfs sous vos systèmes windows car il permet de gérer les permission , (lecture/ ecriture etc…)

le format ext4 est celui le plus répandu dans le monde linux actuellement.

Partition

C’est un espace de stockage.

il existe 3 types de partitions:

  1. partition primaire
  2. partition primaire étendue
  3. partition logique

Partitionnement de son disque permet de séparer les DATA , du système d’exploitation par exemple.

Il n’est pas obligatoire de faire un  partitionnement d’un disque.

Partition primaire et partition active :

Quelle est la partition primaire ? Une partition primaire consiste à installer un système d’exploitation. Un disque dur MBR peut contenir au maximum 4 partitions principales. Une partition active est basée sur la partition primaire. L’une des 4 partitions primaires peut être définie comme partition active. Puisqu’il peut y avoir 4 partitions principales avec 4 systèmes d’exploitation différents installés, La partition active contient le chargeur de démarrage (tel que ntldr et bootmgr) pour charger les systèmes d’exploitation à partir d’un disque.

Partition étendue et partition logique :

Étant donné qu’un disque a les partitions primaires au plus, il faut utiliser une partition étendue pour résoudre la limitation de 4 partitions. Dans une partition étendue, vous pouvez créer des unités logiques illimitées. Vous pouvez stocker des données dans les partitions logiques similaires avec la partition primaire, mais la partition étendue n’est pas utilisée pour stocker des données, car la partition étendue est utilisée pour contenir des partitions logiques, en même temps, il ne peut y avoir qu’une partition étendue sur un seul disque.

Les règles de partitionnement d’un disque dur ou ssd

Un disque dur doit être partitionné avant de l’utiliser. Il existe quelques règles comme suit :

  • ● Un maximum de quatre partitions primaires peut être créé sur n’importe quel disque dur MBR. La limitation de quatre partitions primaires est qu’une partition primaire est appliquée au système, l’enregistrement de démarrage principal est structuré. Une seule partition primaire peut être désignée comme partition active et cette partition est utilisée pour démarrer le système.
  • ● Seulement une partition primaire peut être désignée comme partition active et cette partition est utilisée pour démarrer le système.
  • ● Le BIOS reconnaîtra uniquement la partition active pour le chargement du système d’exploitation. D’autres partitions ne peuvent pas être reconnues.
  • ● Pour briser la limitation d’au plus 4 partitions primaires, vous devez créer 3 partitions primaires ou moins plus une partition étendue et il n’y a qu’une seule partition étendue.

On peut faire cohabiter plusieurs systèmes d’exploitations en faisant un  partitionnement du disque DUR.

Certaines distribution linux (comme ubuntu va vous proposer cette solution avant d’enlever windows)

Les commandes linux

lsblk

exemple de commande lsblk   (list BLocK devices)

lsblk -f 

man lsblk

etudiant@debian112:~$ lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0    8G  0 disk 
├─sda1   8:1    0    3G  0 part /
├─sda2   8:2    0    1K  0 part 
├─sda5   8:5    0  976M  0 part [SWAP]
└─sda6   8:6    0  4,1G  0 part /home
sdb      8:16   0    8G  0 disk 
├─sdb1   8:17   0  400M  0 part 
└─sdb2   8:18   0  400M  0 part 
sr0     11:0    1 1024M  0 rom 

df

version plus lisible avec l’option -h (human)

df -h   

man df

etudiant@debian112:~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               473M       0  473M   0% /dev
tmpfs               98M    548K   98M   1% /run
/dev/sda1          2,9G    1,6G  1,2G  58% /
tmpfs              489M       0  489M   0% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
/dev/sda6          4,0G     44K  3,8G   1% /home
tmpfs               98M       0   98M   0% /run/user/0
tmpfs               98M       0   98M   0% /run/user/1000

fdisk  (pour root)

fdisk -l 

va lister vos différentes unités de disque dure

man fdisk

quand on va créer une partion (n) 

+4G  ou +40M est reconnu pour donner la quantité de la partition .

root@debian112:~# fdisk -l
Disque /dev/sda : 8 GiB, 8589934592 octets, 16777216 secteurs
Modèle de disque : VBOX HARDDISK   
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x097da589

Périphérique Amorçage   Début      Fin Secteurs Taille Id Type
/dev/sda1    *           2048  6225919  6223872     3G 83 Linux
/dev/sda2             6227966 16775167 10547202     5G  5 Étendue
/dev/sda5             6227968  8226815  1998848   976M 82 partition d'échange Linux / Solaris
/dev/sda6             8228864 16775167  8546304   4,1G 83 Linux


Disque /dev/sdb : 8 GiB, 8589934592 octets, 16777216 secteurs
Modèle de disque : VBOX HARDDISK   
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
root@debian112:~# 

on voit ici que nous avons 2 disques dures 

un de 8GiB  /dev/sda

un de 8GiB /dev/sdb

le sda est celui ou nous sommes actuellement (on voir l’amorçage avec *)

il a 4 partitions : sda1 / sda2 / sda5 / sda6

exemple d’usage de la fonction mount:

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=483652k,nr_inodes=120913,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=99992k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
none on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=10674)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
/dev/sda6 on /home type ext4 (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=99988k,nr_inodes=24997,mode=700)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=99988k,nr_inodes=24997,mode=700,uid=1000,gid=1000)
root@debian112:~# 

ici la commande mount va nous décrire comment sont montées les partitions. (on va la retrouver plus tard)

ici ce qui va  nous intéresser :

/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)

sda1 est la racine (/) de notre machine, donc notre système va s’y trouver.

/dev/sda6 on /home type ext4 (rw,relatime)

on voit que la partition sda6  est aussi notre partition /home  de type ext4 pour gérer  nos comptes.

sda5 est une partition d’échange en règle générale elle est de la même quantité que la ram de notre machine. (swap)

Bienvenue dans fdisk (util-linux 2.34).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.


Commande (m pour l'aide) : m

Aide :

  GPT
   M   entrer dans le secteur d’amorçage (MBR) de protection ou hybride

  Générique
   d   supprimer la partition
   F   afficher l’espace libre non partitionné
   l   afficher les types de partitions connues
   n   ajouter une nouvelle partition
   p   afficher la table de partitions
   t   modifier le type d'une partition
   v   vérifier la table de partitions
   i   Afficher des renseignements sur la partition

  Autre
   m   afficher ce menu
   x   fonctions avancées (réservées aux spécialistes)

  Script
   I   chargement de l’agencement à partir du fichier de script sfdisk
   O   sauvegarde de l’agencement vers le fichier de script sfdisk

  Sauvegarder et quitter
   w   écrire la table sur le disque et quitter
   q   quitter sans enregistrer les modifications

  Créer une nouvelle étiquette
   g   créer une nouvelle table vide de partitions GPT
   G   créer une nouvelle table vide de partitions SGI (IRIX)
   o   créer une nouvelle table vide de partitions DOS
   s   créer une nouvelle table vide de partitions Sun


Commande (m pour l'aide) : 

mkfs

pour pouvoir traiter les FS de dos (windows)

apt install dosfstools
root@debian112:~# mkfs.  <tabulation>
mkfs.bfs     mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    
mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos

exemple pour formater le disque b au format fat32

mkfs.vfat  /dev/sdb

exemple pour formater le disque b au format ext4

mkfs.ext4 /dev/sdb

mount / umount

man mount 

mount -t type périphérique rép

On va monter une partition par exemple ici /dev/sdb  dans le système de fichier de notre machine.

mount /dev/sdb /mnt 

le point de montage peut être n’importe ou dans l’arbre de la machine, c’est juste un répertoire. (mkdir point_de_montage)

on va monter le périphérique « block » dans le répertoire de montage (point de montage du périphérique) ou on pourra accéder au périphérique.

/media par exemple permet de monter les périphérique amovible (mémoire usb) branchée sur la machine.

umount /dev/sdb ou umount /mnt 

permet de détacher le périphérique de l’arborescence de notre système.

la fonction mount seul permet de lister les périphérique monté dans l’arborescence de notre système.

un exemple est déjà montré lors de la présentation de fdisk .

pour tester une fichier /etc/fstab la commande mount -a  sera apprécié avant de rebooter la machine. 

fsck

vérifier et réparer un système de fichier.

man fsck

exemple d’usage sur une carte sd

bruno@bruno-MS-7851:/media/bruno$ sudo fsck /dev/sdd2
fsck de util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
rootfs : récupération du journal
Erreur de lecture du bloc 133517 (Erreur d'entrée/sortie).  Ignorer l'erreur<o>? non
rootfs: Erreur d'entrée/sortie while reading block 133517



JBD2: Failed to read block at offset 2445

fsck.ext4: Erreur d'entrée/sortie lors de la récupération du journal de rootfs

rootfs n'a pas été démonté proprement, vérification forcée.

Passe 1 : vérification des i-noeuds, des blocs et des tailles

Dans l'i-noeud 1447, la fin de l'extent dépasse la valeur autorisée

	(bloc logique 8338, bloc physique 901266, longueur 1682)

Effacer<o>? oui

I-noeud 1447, i_blocs est 76184, devrait être 66712.  Corriger<o>? oui

Dans l'i-noeud 1453, la fin de l'extent dépasse la valeur autorisée

	(bloc logique 10240, bloc physique 1675264, longueur 1222)

Effacer<o>? oui

I-noeud 1453, i_blocs est 87080, devrait être 81928.  Corriger<o>? oui

Dans l'i-noeud 1454, la fin de l'extent dépasse la valeur autorisée

	(bloc logique 6, bloc physique 599572, longueur 1)

Effacer<o>? oui

Dans l'i-noeud 1455, la fin de l'extent dépasse la valeur autorisée

	(bloc logique 8192, bloc physique 2134016, longueur 3145)

Effacer<o>? oui

I-noeud 1455, i_blocs est 86088, devrait être 65544.  Corriger<o>? oui

dd

si sdb1 est de même capacité que sdb2 

dd if=/dev/sdb1  of=/dev/sdb2  –status=progress

il sont après cette commande identique.

man dd

blkid  (package util-linux)

permet d’obtenir le UUID et des infos sur les disques.

Universally unique identifier (UUID)

UUID est un identifiant  unique (obtenu par hasard .. mais permettant de garantir qu’il sera bien unique)

root@debian112:~# blkid
/dev/sdb2: UUID="679bf370-388b-4bd7-8fac-97c7626b316f" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="9bf3b727-02"
/dev/sdb1: UUID="eae0aff6-0080-4ff9-b72e-a9652dca0914" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="9bf3b727-01"
/dev/sda1: UUID="1f15fe02-4e0b-4f6b-b904-cd492011ec56" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="097da589-01"
/dev/sda5: UUID="86298fdb-94b8-4732-af6d-031493e7c38e" TYPE="swap" PARTUUID="097da589-05"
/dev/sda6: UUID="5fd14ecd-bb87-49f7-9586-73b21d76a898" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="097da589-06"
root@debian112:~# 
ls -l /dev/disk/by-uuid

permet aussi d’avoir les informations

e2label

pour placer un label au disque ext2 à ext4

permet de mettre un label au lieu de devoir utiliser le UUID approche plus humaine.

e2label /dev/sdb2 data

e2label /dev/sdb2 #renvoi le label de la partition si il existe 

data

FATLABEL

pour partition Fat32 et Fat16

fichier de gestion des bloques(blk) /etc/fstab

file system table  (man fstab)

Quand on touche a ce genre fichier , ne pas oublier d’en faire une sauvegarde(backup) en fstab.bak par exemple .. pour ne pas mettre la stabilité de votre système en danger. (cp /etc/fstab   /etc/fstab.bak ) .

on pourra tester la configuration sans rebooter la machine avec la commande mount -a

6 champs:

 1er           2eme          3eme   4eme      5eme   6eme
<file system> <mount point> <type> <options> <dump> <pass>

détail des champs: 

chaque champ doit être séparé d’un espace ou une tabulation au moins, et veuillez tabuler(pour lire un tableau) pour nous les humains!

file system: s pour spécification dans le man, 3 façons de faire

doit contenir le nom de la partition à monter /dev/sdb1  par exemple

ou avec un mot clé comme LABEL , ou UUID   , LABEL=ROOT ou UUID=….  voir la commande blkid 

mount point:  point de montage du ‘block’

Cela consiste  à réaliser un répertoire (mkdir) qui sera le  point de montage dans l’arborescence de notre système.

rque : le point de montage d’un swap n’existe pas ! on mettra none

type:

swap , ext4 , ntfs ,vfat ..etc cela le type de partition utilisée.

options:

defaults : utilisations des options par défaut , le man nous dit : rw,suid,dev,exec,auto,nouser,async

il est plus facile d’utiliser cette option quand on ne sait pas trop 🙂

noauto: ne pas monter lorsqu’un appel « mount -a »  a  lieu,  par exemple au démarrage 

rw, ro etc .. voir le man

l’option discard pour les ssd , permet de mieux gérer les écritures.

dump:

0 ou 1 , autorise ou non dump à décharger ou non le bloque, on mettra 0 pour ne pas s’ennuyer.

pass:

0 ou 1 ou 2 (pareil on va préférer 0)

0 pas de fschk au démarrage , 1 et 2 permet de donner un niveau de « check » 

Exemple de fichier fstab

root@debian112:~# more /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=1f15fe02-4e0b-4f6b-b904-cd492011ec56 /               ext4    errors=remount-ro 0       1
# /home was on /dev/sda6 during installation
UUID=5fd14ecd-bb87-49f7-9586-73b21d76a898 /home           ext4    defaults        0       2
# swap was on /dev/sda5 during installation
UUID=86298fdb-94b8-4732-af6d-031493e7c38e none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

exemple pour ajouter le montage d’une partition automatiquement

#ajouter a bruno le disque /dev/sdb2  monté /home/bruno/Data  data étant le label de ce disque.

LABEL=data  /home/bruno/Data  ext4 defaults 0  0

ou on peut utiliser UUID comme dans le fstab de base

partition SWAP 

swap Linux ubuntu  en 2022

attention avec les ssd le swap n’est pas conseillé à cause  du vieillissement prématuré des SSD, du fait d’ écritures excessives sur le disque

Fragmentation des fichiers.

https://www.gladir.com/LEXIQUE/ARTICLES/pourquoi-linux-n-a-pas-besoin-de-defragmentation.htm

GUID Partition Table / UEFI

wikipedia 

Pour dépasser la limite des 2.2 To , ce qui devient courant en 2023

Uefi développé par intel

Exemple d’une machine debian en EFI

Détection des OS 

 sudo os-prober

Mise à jour dde grub 

Le grub sur la partition principale

 sudo update-grub

Installation du de Grub mis a jour

 sudo grub-install

MBR / GPT

https://papy-tux.legtux.org/doc1064/index.html