Un système de fichiers "voit-il" le périphérique de stockage comme un (très grand) tableau d'octets?

12

Je veux savoir comment un système de fichiers écrit et lit sur un périphérique de stockage.

Je pense que c'est comme ça que ça marche:

Un système de fichiers n'accède pas directement au périphérique de stockage, mais le périphérique de stockage est plutôt présenté (par le pilote de périphérique du périphérique de stockage) au système de fichiers sous la forme d'un (très grand) tableau d'octets.

Par exemple, si le système de fichiers veut accéder à un disque dur, il accédera simplement au tableau d'octets représentant le disque dur.

De cette façon, un système de fichiers peut fonctionner avec tout type de périphérique de stockage (disque dur traditionnel, SSD, clé USB, etc.) et seul le pilote de périphérique du périphérique de stockage est modifié.

Cette image montre ce que je viens d'expliquer:

entrez la description de l'image ici

Ai-je raison de comprendre?

joseph_m
la source

Réponses:

15

Sous Linux (et les Unix des années 1980), un périphérique de stockage (assez souvent une partition de disque sur un disque dur ou sur un SSD ) est un périphérique de bloc (voir ceci ) tout comme une [sous-] séquence de blocs (qui est le unité de base des E / S physiques ). La taille du bloc physique dépend du matériel (les anciens disques IDE avaient une taille de bloc de 512 octets, les nouveaux grands disques SATA ont une taille de bloc de 4 Ko, lisez la page wikipage au format avancé ), et lorsque vous créez un système de fichiers (avec, par exemple mkfs, voir mke2fs (8)), vous pouvez spécifier une taille de bloc logique qui est un multiple (souvent une petite puissance de deux, dont 1) de cette taille de bloc physique. Lisez également à propos de l'adressage de bloc logique .

Dans le passé (pensez aux postes de travail Sun3 des années 1990), le disque était constitué de cylindres à têtes organisées en secteurs (lire la page de démarrage CHS ), avec un secteur contenant un bloc. Aujourd'hui, ces derniers subsistent mais sont un artefact artificiel fourni par le contrôleur de disque dur (le circuit sur le disque lui-même). Dans certains systèmes d'exploitation, le pilote de périphérique de bloc a replanifié et réorganisé les demandes d'E / S pour minimiser le mouvement de la tête de disque et la latence de rotation .

De cette façon, un système de fichiers peut fonctionner avec tout type de périphérique de stockage (disque dur traditionnel, SSD, clé USB, etc.) et seul le pilote de périphérique du périphérique de stockage est modifié.

Oui, mais le mal est dans les détails (par exemple, lisez sur TRIM et Write Amplification , spécifique aux SSD). Et les détails sont importants, donc la mise en œuvre réelle est moins simple que votre figure. En savoir plus sur les systèmes de fichiers (et penser aux systèmes de fichiers en cluster et distants, y compris SMB et NFS ; lire également sur Logical Volume Manager ).

Lire Systèmes d'exploitation: trois pièces faciles (et sa partie persistance ).

Notez que les périphériques de bloc ont disparu dans FreeBSD (fournissant en fait une abstraction commune pour les périphériques de caractères et de bloc). Je soupçonne que même sous Windows, le système d'exploitation connaît les partitions, la taille des blocs, etc. (mais vous devriez vérifier).

Basile Starynkevitch
la source
Windows gère également les partitions sur les disques, et chaque partition peut utiliser un système de fichiers différent (peut-être FAT-32 sur un et NTFS sur un autre). Le système de fichiers peut accéder aux partitions au niveau du bloc ou les blocs peuvent être combinés en "clusters". Sur une partition donnée, la taille du cluster serait fixe.
Simon B
Je le savais en quelque sorte, parce que MSDOS le savait surtout.
Basile Starynkevitch
En fait, FreeBSD utilise toujours ce que vous appelez des "périphériques bloqués". Il n'y a aucun moyen d'accéder à un disque dur autrement qu'en tant que grand tableau de blocs. Ils sont simplement appelés périphériques caractère / brut sur FreeBSD. Ils accèdent toujours à l'appareil sous la forme d'un large éventail de blocs. La seule chose qui manque dans FreeBSD est la mise en cache au niveau du périphérique, ce qui n'est pas nécessaire car le système de fichiers fournit déjà la mise en cache.
juhist
3

Tout ce que Basile Starynkevitch dit est correct. J'ajouterai un peu plus. En effet, les lecteurs de disque étaient des lecteurs "en bloc", mais les périphériques en bloc (et de nombreux autres périphériques) étaient présentés sous deux formes: "bruts" et "cuits". Les périphériques bruts ne pouvaient être traités que par blocs qui étaient des multiples de leur taille de bloc de stockage natif. Ainsi, un périphérique de disque brut ne peut être lu ou écrit qu'un ou plusieurs blocs à la fois, pas seulement un ou deux octets. Les appareils cuits ont ajouté une couche qui permettrait de telles opérations plus petites, ainsi que diverses autres fonctionnalités.

Les systèmes de fichiers fonctionnaient avec des périphériques bruts et ne les considéraient donc pas comme un grand tableau d'octets, mais plutôt comme un grand tableau de blocs, comme BS l'a expliqué.

Topher
la source