Le unità disco e i dispositivi simili a unità disco sono "stupidi". Lo chiedi per un LBA, ti restituisce i 512, 2048 o 4096 byte che contiene; viceversa per la scrittura.
Un livello di filesystem ti permette di dire "Voglio c: \ utenti \ pubblici \ documenti \ whatever.doc" ed eseguire operazioni di streaming su quello (apri, leggi, scrivi, cerca, chiudi) - si traduce da posizioni indirizzabili in una serie di richieste per leggere / scrivere LBA.
Quindi il livello del filesystem ha due lati, uno che comunica con il dispositivo simile a un'unità disco (o blocco) e l'altro che comunica con il sistema operativo. È qui che entra in gioco la specificità del sistema operativo. Di solito il lato dispositivo a blocchi del filesystem è un driver di dispositivo e il lato del sistema operativo è un'API utilizzabile dalle applicazioni. Ma queste sono solo interfacce e non devono davvero influire sul funzionamento sottostante del livello del filesystem.
Tutti i filesystem causano la scrittura e la lettura di dati aggiuntivi al di fuori dei dati dei file, al fine di tenere traccia delle informazioni sui file, ad esempio per registrare autorizzazioni, attributi, ecc.
Vi è un po 'di problemi con l'uovo e la gallina all'avvio: i file del sistema operativo sono archiviati nel filesystem, ma come vengono caricati se il layer del filesystem non è ancora attivo? Linux risolve questo problema con un ram disk iniziale o inserendo il codice del filesystem come parte del kernel. Windows risolve questo problema dando al bootloader di Windows la possibilità di leggere le partizioni FAT e NTFS. I bootloader possono essere stupidi, come la maggior parte dei bootloader BIOS classici che caricano solo LBA 0 e lo eseguono e si aspettano che il codice venga prelevato in seguito, o abbastanza intelligente e con piccoli livelli di file system propri, come UEFI, U-boot, ecc.
LVM non è un filesystem. Prende uno o più dispositivi a blocchi e lo estrae in un altro dispositivo a blocchi "virtuale" (in /dev/mapper
- qualsiasi cosa in /dev/mapper
è un dispositivo a blocchi virtuale). Metti un filesystem "sopra" un LVM nello stesso modo in cui metti un filesystem "sopra" una partizione. LVM è un altro livello tra uno o più driver di dispositivo e il filesystem, che converte letture e scritture in LBA sul dispositivo a blocchi virtuale in uno o più altri dispositivi a blocchi. Sì, un LVM può essere un dispositivo a blocchi virtuali e puoi avere una cascata di essi.