{{tag>installation système partitions}}
------
======= Les systèmes de fichiers sous GNU-Linux / macOS / Windows ======
Les **systèmes de fichiers** (il en existe de multiples) gèrent l'organisation des informations mémorisées sur les périphériques de stockage de l'ordinateur. Chacun offre des avantages pour certains types d'utilisation... mais des désavantages pour d'autres utilisations. Connaître leurs principales caractéristiques est nécessaire pour l'utilisation optimale d'un équipement. C'est comme un classeur.
===== Je désire créer une partition d'échange de fichiers entre Ubuntu / Mac / Microsoft(r) Windows(r). Quel système de fichiers devrais-je préférer ? =====
Voir la page [[partition_d_echange_de_fichiers_entre_ubuntu_mac_et_windows|Gérer une partition d'échange de fichiers entre Ubuntu / Mac / Windows]]
===== Qu'est-ce qu'un système de fichiers ? =====
Dans le cœur d'un ordinateur, tout est constitué de 1 et de 0, mais l'organisation de ces données n'est pas aussi simple.
Un **bit** est un 1 ou un 0 ; un **octet** (//byte// en anglais) est composé de huit bits ; un kilo-octet binaire (**kibioctet**, ou //kibibyte//) est un groupe de 1024 octets ; un méga-octet binaire(**mébioctet**, ou //mebibyte//) se constitue de 1024 kilo-octets binaires ; et ainsi de suite.
Un disque dur (//hard drive// ou //hard disk//) stocke vos données : à chaque fois que vous enregistrez un fichier, vous écrivez des milliers de 1 et de 0 sur un disque métallique, le piquant littéralement et créant une indentation qui pourra plus tard être relue en tant que 1 ou 0 par votre ordinateur. En réalité, vous magnétisez des milliers de petits bâtons (que nous appellerons //clusters//) qui seront polarisés dans un sens ou dans un autre (N-S ou S-N) ; cette polarisation différente sera ré-interprétée plus tard par l'ordinateur en tant que 1 ou 0.
Il y a tellement de données sur un disque dur qu'il doit obligatoirement y avoir un moyen de les organiser.
C'est un peu comme les anciens classeurs de cartes d'identification de livres dans une bibliothèque municipale, dans lesquels tous les livres sont recensés : sans ces index, il serait impossible de retrouver facilement les livres que nous recherchons. Les bibliothèques utilisent pour la plupart le système de classement décimal Dewey pour organiser les livres en sujets ; il existe aussi d'autres systèmes de classification arrivant à un résultat similaire, bien qu'aucun d'entre eux n'ait atteint la même popularité que le système de Dewey.
Les systèmes de fichiers jouent exactement le même rôle que ces index : organiser les fichiers de votre ordinateur sur votre disque dur de façon à pouvoir les retrouver lorsque vous en aurez besoin. Les systèmes de fichiers les plus répandus à l'heure actuelle sont sûrement le FAT32 et le NTFS, qui sont les deux seuls systèmes de fichiers que Microsoft(r) Windows(r) peut nativement lire. Mais, tout comme il existe d'autres systèmes pour classer des livres dans une bibliothèque, il existe de nombreux autres systèmes de fichiers : ext2, ext3, ext4, ReiserFS, JFS, XFS, Btrfs, ZFS,....
===== Les qualifications d'un système de fichiers =====
Des attributs différents sont nécessaires afin de définir un système de fichiers. Ils incluent entre autres la **taille maximale que peut avoir un fichier** dans ce système de fichiers, la **taille maximale d'une partition** et la **journalisation ou non** du système de fichiers.
==== La taille maximale d'un fichier ====
Ce critère définit la taille maximale qu'un fichier quelconque enregistré sur un système de fichiers peut avoir. Ainsi, si vous possédez un fichier de 100 mégaoctets et que vous tentez de l'enregistrer sur un système de fichiers n'acceptant pas les fichiers plus grands que 90 mégaoctets, l'opération d'enregistrement ne pourra pas être complétée et vous disposerez d'un fichier corrompu, incomplet.
==== La taille maximale d'une partition ====
Ce critère définit la taille maximale que peut avoir une partition utilisant un système de fichier donné.
De nombreuses caractéristiques techniques causent des limitations plus ou moins grandes quant à la taille d'une partition formatée dans un système de fichiers donné. Vous retrouverez, plus bas dans cette page, un tableau résumé des principaux systèmes de fichiers rencontrés dans le monde linuxien; nous y avons indiqué la taille maximale que peut avoir une partition selon chacun de notre systèmes de fichier.
==== La gestion des droits d'accès aux fichiers et répertoires ====
Ce critère définit s'il est possible ou non d'attribuer la possession d'un fichier ou d'un répertoire à un utilisateur et à un groupe d'utilisateurs, de même que de définir quelles actions les utilisateurs ont le droit d'effectuer sur les fichiers et répertoires, selon qu'ils sont propriétaires du fichier, membre du groupe propriétaire du fichier ou ni l'un ni l'autre.
La possession et la gestion des droits d'accès associés s'effectue individuellement avec chaque fichier et répertoire.
Les [[:permissions|droits d'accès]] que l'on trouve habituellement sont la **lecture** du fichier ou répertoire, l'**écriture** dans celui-ci et son **exécution**. Par exemple, l'utilisateur //toto// dispose des droits de lecture et d'exécution sur le répertoire ''foo'', mais pas d'écriture; //toto// peut donc lancer les programmes présents dans ce répertoire et ouvrir les fichiers qu'il contient, mais ne peut pas les modifier ni en créer de nouveaux.
==== La journalisation ====
Parlons maintenant de la journalisation. Un système de fichiers journalisé est **plus fiable** lorsqu'on entre dans le domaine du stockage des données. Il a été expliqué plus haut ce qui se produit réellement lorsqu'un fichier est enregistré sur un disque dur (une suite de 1 et de 0 est inscrite sur le disque) ; mais que se produit-il si l'écriture de la chaîne est interrompue avant son terme (ce qui se produit, par exemple, lors d'une coupure de courant) ? Votre fichier devient « corrompu », incomplet.
Un système de fichiers journalisé travaille de façon à prévenir une telle corruption : lors de la sauvegarde d'un fichier, au lieu d'écrire immédiatement sur le disque dur les données à l'endroit exact où elles devraient être enregistrées, le système de fichiers écrit les données dans une autre partie du disque dur et note les changements nécessaires dans un journal, et ensuite, en arrière-plan, il repasse chacune des entrées du journal et termine le travail commencé ; lorsque la tâche est accomplie, il raye la tâche de la liste.
Mais comment cela prévient-il la perte de données ? Prenons un exemple : disons que vous cliquez sur le bouton //Enregistrer// de votre logiciel d'édition de texte pour sauvegarder le fichier ''foo.txt''. L'ordinateur écrit d'abord un « brouillon » de ''foo.txt'' dans une partie différente du disque dur et écrit le changement dans le journal du système de fichiers. Une fois cela effectué, l'ordinateur commence à retranscrire le fichier //(la suite de 1 et de 0)// à son endroit définitif sur le disque dur. Soudain, il survient une panne de courant ; alors la transcription du fichier est interrompue. Lorsque le courant revient, même si le « propre », la version finale de votre fichier est incomplète, vous possédez toujours votre brouillon dans le journal du système de fichiers ; l'ordinateur recommence donc la retranscription du fichier, écrasant les données corrompues.
Et si, par hasard, le courant était coupé lorsque l'ordinateur écrivait dans le journal, vous disposeriez toujours d'un brouillon précédemment écrit dans le journal pour récupérer votre travail.
//« Mais,// direz-vous,// il est beaucoup plus avantageux d'utiliser un système de fichiers journalisé ! C'est bien plus sécurisé ! Pourquoi utiliserais-je un système de fichiers non journalisé ? »// L'utilisation d'un journal requiert des capacités de stockage importantes sur vos périphériques ; ces systèmes de fichiers ne sont donc pas adaptés aux médias de faible capacité, telles les cartes mémoires (//memory sticks//) et les disquettes.
==== Particularité des systèmes de fichiers *nix : inode ====
Les utilisateurs habitués de Microsoft Windows savent qu'il n'est normalement pas possible de modifier les propriétés d'un fichier (renommer, déplacer, supprimer...) quand celui-ci est ouvert par un programme ; cette restriction n'existe pas sur les systèmes de fichiers de type Unix (ext2, ext3, ReiserFS...).
La raison est que sur les systèmes de fichiers *nix, les fichiers sont indexés selon un numéro, appelé **inode** ou //i-node//, et que chaque inode possède de nombreux attributs associés à lui, tels **les droits d'accès, l'horodatage, la taille du fichier**, etc. Lorsque vous supprimez un fichier, ce qui se produit réellement est que l'inode est « délié » du système de fichiers (c'est-à-dire qu'il n'est plus indexé), mais si des programmes ont un lien avec l'inode (par exemple, si un document texte est ouvert dans un éditeur de texte, il a un lien avec cet éditeur de texte), le fichier auquel l'inode est associé continue d'exister dans le système d'exploitation et continue d'être mis à jour.
Il est possible de connaître l'utilisation en inodes d'une partition avec : (**sdxx** : nom de votre partition sda, sdb ...)
df -i /dev/sdxx
sudo tune2fs -l /dev/sdxx | grep -i inode
Un fichier n'est réellement effacé que lorsque tous les liens avec son inode ont été coupés //(et encore, les données résident encore sur le disque dur, mais comme elles ne sont plus indexées, il est difficile de les récupérer)//. Ce que tout ceci signifie est que vous pouvez supprimer des programmes alors qu'ils sont en fonctionnement sans faire planter votre système d'exploitation, renommer ou déplacer des fichiers avant qu'ils aient fini d'être téléchargés sans les corrompre et supprimer un fichier alors qu'il est encore ouvert dans un logiciel.
===== Comparaison de systèmes de fichiers =====
Ci-dessous se trouve une très brève comparaison des systèmes de fichiers les plus communs et les plus utilisés dans le monde linuxien (par ordre alphabétique).
Si vous êtes interessé par le partage d'une partition Ubuntu / Mac / Windows, consulter aussi [[partition_d_échange_de_fichiers_entre_ubuntu_mac_et_windows|cette page]]
^ Nom du système de fichiers ^ Taille maximale d'un fichier ^ Taille maximale d'une partition ^ Journalisée ou non ? ^ Gestion des droits d'accès? ^ Notes ^
| **[[BtrFS]]** | 16 EiB | 16 EiB | Non (CoW) | Oui | Fonction de snapshot et de sauvegarde incrémentale |
| **[[exFAT]]** | 16 TiB | 256 TiB | Oui | Oui* | Ce système de fichiers a aussi été développé par Microsoft. L'écriture depuis Linux sur ce système de fichiers est stable à l'aide du pilote **exfat-fuse**. |
| **ext2FS**\\ (Extended File System) | 2 TiB | 4 TiB | Non | Oui | Extended File System est le système de fichiers natif de Linux. En ses versions 1 et 2, on peut le considérer comme désuet, car il ne dispose pas de la journalisation. Ext2 peut tout de même s'avérer utile sur des disquettes 3½ et sur les autres périphériques dont l'espace de stockage est restreint, car aucun espace ne doit être réservé à un journal. |
| **ext3FS** | 2 TiB | 4 TiB | Oui | Oui | ext3 est essentiellement ext2 avec la gestion de la journalisation. Il est possible de [[http://qliu.free.fr/Linux/ext3.html#s4|passer une partition formatée en ext2 vers le système de fichiers ext3]] (et //vice versa//) sans formatage. |
| **[[:ext4|ext4FS]]** | 16 TiB | 1 EiB | Oui | Oui | ext4 est le successeur du système de fichiers ext3. Il est cependant considéré par ses propres concepteurs comme une solution intermédiaire en attendant le vrai système de nouvelle génération que sera BtrFS|
| **FAT**\\ (File Allocation Table) | 2 GiB | 2 GiB | Non | Non* | Développé par Microsoft, ce système de fichiers se rencontre moins fréquemment aujourd'hui. Il reste néanmoins utilisé sur les disquettes 3½ formatées sous Windows et devrait être utilisé sous Linux si une disquette doit aussi être lue sous Windows. Il est aussi utilisé par plusieurs constructeurs comme système de fichiers pour cartes mémoires (//memory sticks//), car, bien documenté, ce système de fichiers reste le plus universellement utilisé et accessible. |
| **FAT32** | 4 GiB | 8 TiB | Non | Non* | Ce système de fichiers, aussi créé par Microsoft, est une évolution du précédent. Depuis ses versions 2000 SP4 et XP, Windows ne peut pas formater (ou bloque volontairement le formatage) une partition en FAT32 d'une taille supérieure à 32 Go. Cette limitation ne s'applique pas sous Linux, de même qu'avec des versions antérieures de Windows. Une partition FAT32 d'une taille supérieure à 32 Go déjà formatée pourra être lue par Windows, peu importe sa version. |
| **NTFS**\\ (New Technology File System) | 16 TiB | 256 TiB | Oui | Oui* | Ce système de fichiers a aussi été développé par Microsoft, et il reste très peu documenté. L'écriture depuis Linux sur ce système de fichiers est stable à l'aide du pilote **[[:tutoriel:ntfs|ntfs-3g]]**. Ce pilote est inclus de base dans Ubuntu, et disponible en paquets dans les [[:dépôts]] pour les versions antérieures. |
| **ReiserFS** | 8 TiB | 16 TiB | Oui | Oui | Développé par Hans Reiser et la société Namesys, ReiserFS est reconnu particulièrement pour bien gérer les fichiers de moins de 4 ko. Un avantage du ReiserFS, par rapport à ext3, est qu'il ne nécessite pas une hiérarchisation aussi poussée: il s'avère intéressant pour le stockage de plusieurs fichiers temporaires provenant d'Internet. Par contre, ReiserFS n'est pas recommandé pour les ordinateurs portables, car le disque dur tourne en permanence, ce qui consomme beaucoup d'énergie. |
| [[https://fr.wikipedia.org/wiki/Universal_Disk_Format|UDF (Universal Disk Format)]] | 16 EiB | 2 To | Non | Oui | Ce format, compatible avec tous les systèmes, est utilisé pour les lecteurs optique (CD, DVD) et peut être utilisé sur n'importe quel autre support de disque. Attention à certaines limites de compatibilité entre Linux / Mac / Windows |
^ EiB = Exbioctets (1024 pébioctets) :: PiB = Pébioctet (1024 tébioctet) :: TiB = Tébioctet (1024 gibioctets) :: GiB = Gibioctet (1024 mibioctets) [ [[wpfr>Octet|Plus d'informations sur la Wikipedia]] ] ^^^^^^
Ci-dessus vous voyez aussi une comparaison de deux autres des principaux attributs d'un système de fichiers, à savoir la taille maximale d'un fichier sur une partition et la taille la plus grande que peut avoir une partition avec un système de fichiers particulier.
==== Systèmes de fichiers FAT32 ====
Caractéristiques :
* Compatible Linux / Mac / Windows
* On ne peut pas installer Linux dessus à cause du manque de gestion des droit d'accès
* Pas compatible posix : on ne peut pas définir un fichier comme exécutable, changer les droits par user/groupe/autres. Ceci est fait pour tous les fichiers de la partition lors du montage.
==== Systèmes de fichiers NTFS ====
Caractéristiques :
* Format fermé Microsoft
* Compatible : Linux (le driver NTFS est du rétro-engineering. Cela fonctionne plutot bien meme si un risque est toujours présent) / Mac ? / Windows
* On ne peut pas installer Linux dessus à cause du manque de gestion des droit d'accès
* Pas compatible posix : on ne peut pas définir un fichier comme exécutable, changer les droits par user/groupe/autres. Ceci est fait pour tous les fichiers de la partition lors du montage.
Sous Microsoft(r) Windows(r), le système de fichiers NTFS gère les droits d'accès basé sur une liste de contrôle (ACL) qui n'est pas prise en compte sous Linux. Linux peut aussi prendre en charge une forme d'ACL, mais celle-ci est différente de celle implantée dans NTFS. Pour cette raison, les ACL des systèmes de fichiers NTFS sont simplement ignorées.
==== Systèmes de fichiers exFAT ====
Pour les problèmes liés à ce type de système de fichier voir la page [[:exfat|dédiée]].
==== Systèmes de fichiers ZFS ====
**Ce système de fichier est maintenant géré de façon standard avec la version 20.04.0**
Il n'y a pas encore une documentation dédiée. En attendant, voila un avis:
En une seule commande on dispose d'un équivalent RAID0 ou RAID1 dans lequel il suffit d'écrire car le montage se fait dès la création.
Préparation: Créer au moins deux partitions de taille identique formatées ou non sur un disque ou deux disques. Ce n'est pas limité à deux disques!
Fabrication en mode sécurisé avec par exemple cette commande:
sudo zpool create -f pool-test mirror /dev/sda16 /dev/sda17
- Il faut laisser l'option **-f** si les partitions avaient été formatées sinon elle est inutile.
- Il faut supprimer l'option **mirror** si on veut du non sécurisé.
Il ne reste plus qu'à l'utiliser par exemple:
sudo mkdir /pool-test/MyDATA
sudo cp -Rv /DATA/R*/* /pool-test/MyDATA
Et suive le taux de remplissage avec la commande standard " **df -h** " ou la commande dédiée.
zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool-test 61G 36,8G 24,2G - - 0% 60% 1.00x ONLINE -
df -h | grep pool
pool-test 60G 37G 23G 63% /pool-test
Si l'ordinateur s'arrête, il faut remonter le pool avec cette commande
sudo zpool import pool-test
Un autre exemple compatible avec les applications en snap
sudo zpool create -f -m /media/ZFS -o feature@lz4_compress=enabled MesDonneesPersonnelles /dev/disk/by-label/ZFS
df -htzfs
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
MesDonneesPersonnelles 4,4G 128K 4,4G 1% /media/ZFS
Pour plus de détails voir un site anglais: https://ubuntu.com/tutorials/setup-zfs-storage-pool#1-overview
===== Quelques commandes utiles =====
Afficher le système de fichier d'une partition
* partition montée
df -h
* partition quelconque (nécessite que le paquet **parted** soit installé et que le disque /dev/sda existe)
sudo parted /dev/sda print all
===== Plus d'informations =====
* [[wp>Comparison_of_file_systems|Wikipedia : Comparison of File Systems]] (en)
* [[wpfr>Système de fichiers]] (fr)
* [[wpfr>Ext2]], [[wpfr>Ext3]], [[wpfr>Ext4]], [[wpfr>ReiserFS]] (fr)
* [[http://linuxgazette.net/122/TWDT.html#piszcz| Comparaison de performance]] (en)
* [[http://plfnicolarius.free.fr/tutoriel_logiciel_linux_verifier_systeme_de_fichiers.php|Vérifier son système de fichiers sous Linux]]
* [[https://www.opendedup.org/|OpenDedup]] (SDFS) : système de fichier supportant la déduplication.
* [[:chemins|Les chemins d'accès sous Linux]]
* [[partition_d_echange_de_fichiers_entre_ubuntu_mac_et_windows|Gérer une partition d'échange de fichier entre Ubuntu / Mac / Windows]]
------
//Contributeurs: [[utilisateurs:AlexandreP]],[[utilisateurs:fnx]] \\
Basé sur [[http://plfnicolarius.free.fr/tutoriel_logiciel_linux_verifier_systeme_de_fichiers.php|Linux Filesystems Explained]]//