Système de fichiers

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Système de fichier)
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir FS et SGF.

Un système de fichiers (file system ou filesystem en anglais) ou système de gestion de fichiers (SGF) est une façon de stocker les informations et de les organiser dans des fichiers sur ce que l'on appelle des mémoires secondaires (disque dur, SSD, CD-ROM, clé USB, disquette, etc.). Une telle gestion des fichiers permet de traiter, de conserver des quantités importantes de données ainsi que de les partager entre plusieurs programmes informatiques. Il offre à l'utilisateur une vue abstraite sur ses données et permet de les localiser à partir d'un chemin d'accès.

Il existe d'autres façons d'organiser les données, par exemple les bases de données (notamment base de données relationnelle) et les fichiers indexés.

Histoire[modifier | modifier le code]

Archivage de cartons de cartes perforées archivés au service du NARA en 1959. Chaque carton peut contenir 2 000 cartes (d'une ligne de 80 colonnes chacune)

La carte perforée a progressivement disparu à partir de 1970 lorsque sont apparues les unités d'entrée-sortie à bande magnétique et à disquettes souples de format « 8 pouces » et des mémoires de masse plus performantes.

En 1964, le système DECtape de la société DEC permet d'enregistrer les données sur bandes magnétiques plutôt que sur cartes perforées.

En 1968, George 3 était doté d'un magasin de fichier (file store) enregistrant les fichiers dans une arborescence dans l'idée de Multics. Chaque utilisateur du système disposait d'un dossier utilisateur (home) avec autant de sous-dossiers que nécessaire. Les dossiers utilisateurs pouvaient être accédés directement ou à traver du chemin, comme: :MASTER.USERS.COMPSCI,JOHN. Un système d'Access control lists était utilisé pour la sécurité permettant de configurer l'accès par utilisateur et par groupe. Le système de fichier était organisé sur deux niveaux: l'un sur disque, et l'autre sur bande magnétique.

Une hiérarchie typique de Files-11: tous les fichiers prennent leur racine dans le Master File Directory; Le fichier File2 est accessible depuis deux dossiers

En 1972, ODS-1 est un système de fichier à plat (utilisé par RSX-11 OS). Il sera remplacé par la suite par ODS-2 et ODS-5.

En 1974, le système de fichier CP/M apparaît. Ce système d'exploitation, enregistre les fichiers sur disquettes suivant une organisation logique spécifique (qui n'a pas été reprise par MS-DOS), et peut remplir les disquettes jusqu'à ce qu'elles soient complètement remplies.

CP/M peut aussi gérer des disques durs (en réalité, comme le BIOS est « ouvert » et décrit clairement dans la documentation que Digital Research fournissait avec certains de ses logiciels, il est donc possible d'adapter tout système particulier CP/M à toute mémoire de masse disponible - et aux périphériques dont on dispose).

Chaque fichier a un nom et une extension (plus précisément, la syntaxe est : <nom du fichier (8 octets maximum)>.<extension (3 octets maximum)>).

En 1978 apparaît le premier système de fichier d'Apple.

En 1980, le système FAT 12 apparaît. Le système FAT 16 en 1984.

Le BIOS Parameter Block (BPB) est introduit avec le PC DOS 2.0 . Cette version introduit également les bits attributs lecture seule, archive, étiquette de volume , et dossier pour une hiérarchisation des dossiers.

En 1988, ISO 9660 (une norme de l'ISO) définit le système de fichiers utilisé sur les CD-ROM.

En 1993, apparaît le système NTFS Version 1.0, utilisé par Windows.

En 1994 et 1995, les systèmes de fichiers pour cédéroms sont complétés: Rock Ridge et Joliet ("CDFS").

Système de fichier Inventeur Année
d'introduction
Système d’exploitation initial Licence
DECtape DEC 1964 PDP-6 Monitor
Level-D DEC 1968 TOPS-10
George3 ICT (later ICL) 1968 George 3
ODS-1 DEC 1972 RSX-11
RT-11 file system DEC 1973 RT-11
DOS (GEC) GEC 1973 Core Operating System
CP/M file system Gary Kildall 1974 CP/M
V6FS Bell Labs 1975 Version 6 Unix
OS4000 GEC 1977 OS4000
FAT (8-bit) Marc McDonald, Microsoft 1977 Microsoft Standalone Disk BASIC-80
DOS 3.x Apple Computer 1978 Apple DOS
Pascal Apple Computer 1978 Apple Pascal
CBM DOS Commodore 1978 Microsoft BASIC (for CBM PET)
V7FS Bell Labs 1979 Version 7 Unix
ODS-2 DEC 1979 OpenVMS
FAT12 Tim Paterson, Seattle Computer Products 1980 QDOS, 86-DOS
AFS Carnegie Mellon University 1982 Multiplatform MultoOS
DFS Acorn Computers Ltd 1982 Acorn BBC Micro MOS
ADFS Acorn Computers Ltd 1983 Acorn Electron (later Arthur RISC OS)
FFS Kirk McKusick 1983 4.2BSD
ProDOS Apple Computer 1983 ProDOS 8
MFS Apple Computer 1984 Mac OS
FAT16 Microsoft, IBM 1984 PC DOS 3.0/MS-DOS 3.0
Elektronika BK tape format NPO "Scientific centre" (now Sitronics) 1985 Vilnius Basic, BK monitor program
HFS Apple Computer 1985 Mac OS
Amiga OFS[1] Metacomco for Commodore 1985 Amiga OS
High Sierra Ecma International 1985 MS-DOS, Mac OS
NWFS Novell 1985 NetWare 286
FAT16B Compaq 1987 Compaq MS-DOS 3.31, DR DOS 3.31
MINIX V1 FS Andrew S. Tanenbaum 1987 MINIX 1.0
Amiga FFS Commodore 1988 Amiga OS 1.3
HPFS IBM & Microsoft 1988 OS/2
ISO 9660:1988 Ecma International, Microsoft 1988 MS-DOS, Mac OS, and AmigaOS
JFS1 IBM 1990 AIX[2]
VxFS VERITAS, (now Symantec) 1991 developed for Unix System Laboratories, HP-UX[3]
ext Rémy Card 1992 Linux
WAFL NetApp 1992 Data ONTAP
MINIX V2 FS Andrew S. Tanenbaum 1992 MINIX 1.6 and 2.0
AdvFS DEC 1993[4] Digital Unix
NTFS Version 1.0 Microsoft, Tom Miller, Gary Kimura 1993 Windows NT 3.1 proprietary
LFS Margo Seltzer 1993 Berkeley Sprite
ext2 Rémy Card 1993 Linux, Hurd
UFS1 Kirk McKusick 1994 4.4BSD
XFS SGI 1994 IRIX
HFS (Hierarchical File System) IBM 1994 MVS/ESA (now z/OS)
Rock Ridge Young Minds Inc. 1994 Linux, Mac OS, Amiga OS, and FreeBSD
Joliet ("CDFS") Microsoft 1995 Microsoft Windows, Linux, Mac OS, and FreeBSD
PFS Michiel Pelt 1996 AmigaOS
Romeo Adaptec 1996 Microsoft Windows
UDF ISO/ECMA/OSTA 1995 -
FAT32 Microsoft 1996 Windows 95b[5]
QFS LSC Inc, Sun Microsystems 1996 Solaris
GPFS IBM 1996 AIX, Linux, Windows
Be File System Be Inc., D. Giampaolo, C. Meurillon 1996 BeOS
HFS Plus Apple Computer 1998 Mac OS 8.1
NSS Novell 1998 NetWare 5
PolyServe File System (PSFS) PolyServe 1998 Windows, Linux
ODS-5 DEC 1998 OpenVMS 7.2
SFS John Hendrikx 1998 AmigaOS, AROS, MorphOS
ext3 Stephen Tweedie 1999 Linux
ISO 9660:1999 Ecma International, Microsoft 1999 Microsoft Windows, Linux, Mac OS X, FreeBSD, and AmigaOS
JFS IBM 1999 OS/2 Warp Server for e-business
GFS Sistina (Red Hat) 2000 Linux
Melio FS Sanbolic 2001 Windows
NTFS Version 3.1 Microsoft 2001 Windows XP proprietary
ReiserFS Namesys 2001 Linux
zFS IBM 2001 z/OS (backported to OS/390)
FATX Microsoft 2002 Xbox
UFS2 Kirk McKusick 2002 FreeBSD 5.0
Lustre Cluster File Systems (later Oracle Corporation) 2002 Linux
OCFS Oracle Corporation 2002 Linux
VMFS2 VMware 2002 VMware ESX Server 2.0
ext3cow Zachary Peterson 2003 Linux
Fossil Bell Labs 2003 Plan 9 from Bell Labs 4
Google File System Google 2003 Linux
PramFS MontaVista 2003 Linux
Reliance[6] Datalight 2003 Windows CE, VxWorks, custom ports
VxCFS VERITAS, (now Symantec) 2004 AIX, HP-UX, Solaris, Linux
ZFS Sun Microsystems 2004 Solaris CDDL
Reiser4 Namesys 2004 Linux
Non-Volatile File System Palm, Inc. 2004 Palm OS Garnet
MINIX V3 FS Andrew S. Tanenbaum 2005 MINIX 3
OCFS2 Oracle Corporation 2005 Linux
NILFS NTT 2005 Linux
VMFS3 VMware 2005 VMware ESX Server 3.0
GFS2 Red Hat 2006 Linux
ext4 Various 2006 Linux
exFAT Microsoft 2006, 2009 Windows CE 6.0, Windows XP SP3, Windows Vista SP1 proprietary
TexFAT/TFAT Microsoft 2006 Windows CE 6.0
Btrfs Oracle Corporation 2007 Linux GPL
Ceph Sage Weil, Inktank Storage, Red Hat 2007, 2012 Linux
WBFS kwiirk and Waninkoko (Wii homebrew) 2008 Nintendo WII
HAMMER Matthew Dillon 2008 DragonFly BSD
Tux3 Various 2008 Linux
UBIFS Nokia with help of University of Szeged 2008 Linux
Oracle ACFS Oracle Corporation 2009 Linux - Red Hat Enterprise Linux 5 and Oracle Enterprise Linux 5 only
Reliance Nitro[6] Datalight 2009 Windows CE, Windows Mobile, VxWorks, Linux, custom ports
LTFS IBM 2010 Linux, Mac OS X, planned Microsoft Windows, LGPL
IlesfayFS Ilesfay Technology Group 2011 Microsoft Windows, planned Red Hat Enterprise Linux
VMFS5 VMware 2011 VMware ESXi 5.0tux 3 stats
ReFS Microsoft 2012, 2013 Windows 2012 Server
Lanyard Filesystem Dan Luedtke 2012 Linux
F2FS Samsung 2012 Linux GPLv2
File system Creator Year
introduced
Original operating system License

Généralités[modifier | modifier le code]

Le volume des données traitées par les applications informatiques atteint couramment plusieurs centaines de gigaoctets et va jusqu'à plusieurs téraoctets pour certaines applications industrielles. De tels volumes de données ne peuvent pas être stockées dans la mémoire centrale. De plus, un stockage persistant à long terme, permettant de sauvegarder les données traitées ou à traiter pour une utilisation future, est également nécessaire. Le principe employé pour répondre à ce problème consiste à stocker ces données dans des mémoires secondaires sous forme de fichiers, c'est-à-dire de suites de blocs (la plus petite unité que le périphérique de stockage est capable de gérer). Le contenu de ces blocs, simple suite de données binaires, peut être interprété selon le format de fichier comme des caractères, des nombres entiers ou flottants, des codes d'opérations machines, des adresses mémoires, etc. L’échange entre les deux types de mémoire se fait ensuite par transfert de blocs.

L'objectif du système de fichiers est de permettre l'accès au contenu des fichiers stockés (l'ouverture du fichier, son enregistrement sa copie ou son déplacement dans un second emplacement, ou sa suppression) à partir de leur chemin d'accès, formé d'un nom précédé d'une liste de répertoires imbriqués.

Représentation pour l'utilisateur[modifier | modifier le code]

Pour l'utilisateur, un système de fichiers est vu comme une arborescence : les fichiers sont regroupés dans des répertoires (concept utilisé par la plupart des systèmes d’exploitation). Ces répertoires contiennent soit des fichiers, soit récursivement d'autres répertoires. Il y a donc un répertoire racine et des sous-répertoires. Une telle organisation génère une hiérarchie de répertoires et de fichiers organisés en arbre.

Principe de stockage[modifier | modifier le code]

Différentes méthodes permettent d'associer un nom de fichier à son contenu. Dans le cas du système de fichiers FAT, ancien système de fichiers de MS-DOS et de Windows encore largement utilisé sur les supports amovibles comme les clés USB, chaque répertoire contient une table associant les noms de fichiers à leur taille et un index pointant vers la table d'allocation de fichiers, une zone réservée du disque indiquant pour chaque bloc de données l'index du bloc suivant du même fichier.

Dans le cas des systèmes de fichier d'Unix (ou de Linux/Minix), les fichiers et les répertoires sont identifiés par un numéro unique, le numéro d'inode. Ce numéro permet d'accéder à une structure de données (inode) regroupant toutes les informations sur un fichier à l'exception du nom, notamment la protection d'accès en lecture, en écriture ou des listes de dates, ainsi que le moyen d'en retrouver le contenu. Le nom est stocké dans le répertoire associé à un numéro d'inode. Cette organisation présente l'avantage qu'un fichier unique sur disque peut être connu du système sous plusieurs noms.

L'organisation du système de fichiers NTFS est encore plus complexe, fonctionnant un peu à la façon d'une base de données.

Nom de fichier[modifier | modifier le code]

Le nom d'un fichier est une chaîne de caractères sous Windows, souvent de taille limitée. Aujourd'hui, quasiment l'ensemble des caractères du répertoire Unicode est généralement utilisable, mais certains caractères spécifiques ayant un sens pour le système d'exploitation peuvent être interdits ou déconseillés. C'est le cas par exemple pour les caractères « : », « / » ou « \ » sous Windows.

Les systèmes de fichier Unix utilisent des noms de fichiers basés sur une suite d'octets. Les couches basses des logiciels (noyau, systèmes de fichier) manipulent les noms de fichiers sans connaître le jeu de caractère utilisé. Au niveau utilisateur, le jeu de caractère utilisé n'est généralement pas fourni par le système de fichiers, mais dépendant des paramètres régionaux de l'utilisateur. Dans un contexte où l'interopérabilité à un niveau mondial est souhaité, une compatibilité Unicode est désirée et alors, l'UTF-8 est de plus en plus utilisé notamment dans les distributions Linux. Les systèmes plus anciens utilisaient des systèmes de codage régionaux pouvant altérer les noms de fichiers lorsque des utilisateurs ont des paramètres régionaux différents. Dans les systèmes modernes, l'utilisation de noms de fichiers nommés autrement qu'en Unicode est évité afin de réduire les problèmes d'interopérabilité avec les systèmes unicode.

NTFS, Virtual FAT et Joliet (système de fichiers), ReFS utilisent le jeu de caractères UTF-16 pour les noms de fichiers.

Sous Windows et dans les environnement graphiques, le nom d'un fichier possède en général un suffixe (extension) séparé par un point qui est fonction du contenu du fichier : .txt pour du texte par exemple. De cette extension va dépendre le choix des applications prenant en charge ce fichier. Toutefois, sous Linux/Unix, dans les systèmes en ligne de commande et dans les langages de programmation, l'extension fait simplement partie du nom de fichier, son format est détecté par le type MIME inscrit de façon transparente dans l'en-tête des fichiers.

Métadonnées[modifier | modifier le code]

Chaque fichier est décrit par des métadonnées (conservées dans l'inode sous Unix), alors que le contenu du fichier est écrit dans un ou plusieurs blocs du support de stockage, selon la taille du fichier.

Les métadonnées les plus courantes sous UNIX sont :

  • droits d'accès en lecture, écriture et exécution selon l'utilisateur, le groupe, ou les autres ;
  • dates de dernier accès, de modification des métadonnées (inode), de modification des données (block)[7] ;
  • propriétaire et groupe propriétaire du fichier ;
  • taille du fichier ;
  • nombre d'autres inodes (liens) pointant vers le fichier ;
  • nombre de blocs utilisés par le fichier[8] ;
  • type de fichier : fichier simple, lien symbolique, répertoire, périphérique, etc.

Sur la plupart des systèmes Unix, la commande stat permet d'afficher l'intégralité du contenu de l'inode.

Fonctions du SGF[modifier | modifier le code]

Le système de gestion des fichiers assure plusieurs fonctions :

  • Manipulation des fichiers : des opérations sont définies pour permettre la manipulation des fichiers par les programmes d’application, à savoir : créer/détruire des fichiers, insérer, supprimer et modifier un article dans un fichier.
  • Allocation de la place sur mémoires secondaires : les fichiers étant de taille différente et cette taille pouvant être dynamique, le SGF alloue à chaque fichier un nombre variable de granules de mémoire secondaire de taille fixe (blocs).
  • Localisation des fichiers : il est nécessaire de pouvoir identifier et retrouver les données ; pour cela, chaque fichier possède un ensemble d’informations descriptives (nom, adresse…) regroupées dans un inode.
  • Sécurité et contrôle des fichiers : le SGF permet le partage des fichiers par différents programmes d’applications tout en assurant la sécurité et la confidentialité des données. En effet, un nom et une clé de protection sont associés à chaque fichier afin de le protéger contre tout accès non autorisé ou mal intentionné lors du partage des fichiers. Le SGF se doit aussi de garantir la conservation des fichiers en cas de panne du matériel ou du logiciel.

Organisation des fichiers[modifier | modifier le code]

L'organisation physique sous-jacente du médium utilisé (blocs, linéaire) et les mécanismes d'entrée/sortie de bas-niveau sont masqués. L'utilisateur peut donc organiser ses données permanentes en les distribuant dans différents fichiers. Le contenu des fichiers est déterminé par leur format, qui dépend de l'application utilisée.

En plus de cette organisation abstraite, les systèmes de fichiers peuvent inclure la compression ou le chiffrement automatique des données, une gestion plus ou moins fine des droits d'accès aux fichiers, et une journalisation des écritures (pour la robustesse, en cas de défaillance du système). De plus, certains systèmes de fichiers peuvent s'étendre sur un réseau entier, comme NFS. Certains de ces systèmes de fichiers en réseau peuvent être distribués ou répartis, comme PVFS2.

Systèmes de fichiers et systèmes d'exploitation associés ou compatibles[modifier | modifier le code]

Le choix du système de gestion des fichiers se fait principalement en fonction du système d’exploitation. Généralement, les systèmes d’exploitation les plus récents supportent un grand nombre de systèmes de fichiers.

MS-DOS (et compatibles) et les premières versions de Windows 95 utilisaient les systèmes de fichiers FAT16 et FAT12 (pour les supports de moins de 16 Mio). À partir de Windows 95 OSR2, le choix entre les systèmes de fichiers a commencé à s'élargir. FAT16 et FAT32 pouvaient tous les deux être utilisés, et à partir d'une certaine taille de partition, le choix du système FAT32 était alors plus judicieux.

Sous les premières versions de Windows NT (NT3.x et NT4), il y a le choix entre le système FAT16 et NTFS. Ce système d'exploitation ne supporte pas le FAT32. Généralement, le système NTFS est conseillé, car il procure une sécurité plus grande ainsi que des performances accrues par rapport au FAT. Contrairement aux précédentes versions de Windows NT, Windows NT5 (Windows 2000) accepte des partitions de type FAT16, FAT32 et NTFS. Ainsi, le système de fichiers le plus récent (NTFS 5) est conseillé puisqu’il offre de plus nombreuses fonctionnalités que les systèmes FAT.

Le SP1 de Vista propose de formater en exFAT qui est une grosse évolution de la FAT, proposant une meilleure fiabilité, une « vraie » gestion des noms longs, et l'ACL. Windows CE 6 (le futur Windows Mobile 7) gère aussi ce nouveau FS. Le but de Microsoft est de remplacer la FAT, principalement utilisée sur les supports amovibles comme les cartes mémoires.

Le monde des Unix (Unix, Linux, BSD, Mac OS X) supporte un très grand nombre de systèmes de fichiers. Cela est dû au fait que malgré leur nombre, les systèmes supportés suivent généralement des standards et notamment POSIX.

Non journalisés[modifier | modifier le code]

Journalisés[modifier | modifier le code]

à Snapshot[modifier | modifier le code]

Les systèmes de fichiers à snapshot, ou, en français, instantanés, offrent la possibilité d'enregistrer l'état du système de fichiers à un instant donné.

Réseau (NFS : network file system en anglais)[modifier | modifier le code]

Cluster[modifier | modifier le code]

Spécialisés[modifier | modifier le code]

  • CFS Cryptographic File System : FS chiffré (BSD, Linux)
  • cramfs : FS compressé (Linux en lecture seule)
  • EFS Encrypting File System : FS chiffré au-dessus de NTFS (Windows[10])
  • ISO 9660 : en lecture seule sur tous les systèmes lisant les CDROM/DVDROM de données
  • JFFS et JFFS2 : FS pour support physique sans block, typiquement des cartes flash. Il est compressé et journalisé (Linux)
  • UBIFS : FS journalisé pour support physique sans block, typiquement des cartes flash (Linux)
  • F2FS (Flash-Friendly File System) : FS Open Source développé par Samsung et intégré au noyau Linux il est destiné aux supports de stockage de type flash.
  • QNX4fs : FS utilisé pour le temps réel (QNX, Linux en lecture seule)
  • UDF : le format de disque universel (système de fichiers des DVD-ROM et des disques optiques réinscriptibles tels les CD-RW, DVD±RW, etc.)
  • VMFS : FS dédié à la virtualisation (VMware)

Temporaires[modifier | modifier le code]

Méta systèmes de fichiers[modifier | modifier le code]

  • unionfs, une implémentation d’union mount dans le noyau Linux, consistant à merger (fusionner) différents systèmes de fichiers en un unique point de montage
  • aufs, une autre implémentation de unionfs

Pseudo systèmes de fichiers[modifier | modifier le code]

Ces systèmes de fichiers n'ont pas pour but de permettre l'accès à des fichiers réels. Ils présentent en fait, sous l'apparence d'une hiérarchie classique de fichiers et de répertoires, des informations de nature variées (sur l'état de l'ordinateur, des périphériques, ou permettant l'accès à des bases de données). Il s'agit donc d'interfaces particulières pour certains logiciels, généralement le système d'exploitation.

  • Devfs, Device file system (linux 2.4)
  • udev remplace Devfs (linux 2.6)
  • Procfs, Process Filesystem (systèmes de type UNIX)
  • Sysfs, permettant d'accéder aux informations sur le matériel et de configurer certaines fonctionnalités du noyau Linux 2.6.
  • CDfs : système de fichiers virtuel pour Linux qui permet d'accéder aux données et aux pistes audio d'un disque compact.
  • ZODB: système de fichiers du serveur zope

À classer…[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. 54
  2. IBM introduced JFS with the initial release of AIX Version 3.1 in 1990. This file system now called JFS1. The new JFS, ported from OS/2 to AIX and Linux, was first shipped in OS/2 Warp Server for e-Business in 1999. It was released as JFS2 on AIX 5L.
  3. through OEM agreement
  4. Tru64 Unix managers, ORNL (lire en ligne), « Polycenter File System — HELP »
  5. Microsoft first introduced FAT32 in Windows 95 OSR2 (OEM Service Release 2) and then later in Windows 98. NT-based Windows did not have any support for FAT32 up to Windows NT4; Windows 2000 was the first NT-based Windows OS that received the ability to work with it.
  6. a et b Specifications for the Reliance file systems are available here [1].
  7. et donc de l'inode car la modification des données implique le changement de la date de modification des données dans l'inode et donc implique un changement de l'inode elle-même !
  8. différent de la taille du fichier car les blocs sont de taille fixe, ainsi un fichier de 5 Kio sur un système utilisant des blocs de 4 Kio prendra 2 blocs complets. Pour les fichiers de grande taille, cela se complique encore car les premiers blocs servent à l'adressage des suivants.
  9. http://allmydata.org/trac/tahoe
  10. http://technet.microsoft.com/fr-fr/library/cc721923%28v=ws.10%29.aspx

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]