Sistemi Operativi Modulo I - Il File System PDF
Document Details
Uploaded by EasierHamster828
Sapienza Università di Roma
Fabio De Gaspari
Tags
Summary
This document provides an overview of file systems, including their components, operations, and key concepts. It covers topics such as file creation, deletion, access permissions, and directory organization. The notes highlight the core components of file systems from an informatics/computer science perspective.
Full Transcript
Sistemi Operativi Modulo I Secondo canale Corso di Laurea in Informatica Il File System Fabio De Gaspari Sapienza Università di Roma Dipartimento di Informatica slides by: Igor Melatti Roadmap Visione d’insieme Le directory Gestione della...
Sistemi Operativi Modulo I Secondo canale Corso di Laurea in Informatica Il File System Fabio De Gaspari Sapienza Università di Roma Dipartimento di Informatica slides by: Igor Melatti Roadmap Visione d’insieme Le directory Gestione della memoria secondaria Gestione dei file in UNIX Gestione dei file su Windows I File(s) Sono l’elemento principale per la maggior parte delle applicazioni molto spesso, l’input di un’applicazione è un file; quasi altrettanto spesso, l’output è un file i file “sopravvivono” ai processi Il file system è una delle parti del sistema operativo che sono più importanti per l’utente Proprietà desiderabili: esistenza a lungo termine condivisibilità con altri processi (tramite nome simbolici) strutturabilità (directory gerarchiche) Gestione dei File I file sono gestiti da un insieme di programmi e librerie di utilità Tali programmi costituiscono il File (Management) System, e vengono eseguiti come processi privilegiati (kernel mode) Le librerie, invece, vengono invocate come system call (sempre kernel mode) Hanno a che fare con la memoria secondaria (dischi, chiavi USB,...) in Linux, anche in RAM Forniscono un’astrazione sotto forma di operazioni tipiche Per ogni file vengono mantenuti degli attributi (o metadati), come proprietario, data di creazione, etc Operazioni Tipiche sui File Creazione (con annessa scelta del nome) al momento della creazione, il file è tipicamente vuoto Cancellazione Apertura: necessaria per poter leggere e scrivere Lettura: solo su file aperti (e non chiusi nel frattempo) Scrittura: idem Chiusura: necessaria per le performance Terminologia Campo (field) Record File Database Campi e Record Campi: dati di base contengono valori singoli caratterizzati da lunghezza e tipo di dato (o con demarcazioni) esempio tipico: carattere ASCII Record insiemi di campi correlati ognuno trattato come un’unità esempio tipico: un impiegato è caratterizzato dal record nome, cognome, matricola, stipendio File e Database File: hanno un nome insiemi di record correlati nei SO generici moderni, ogni record è un solo campo con un byte... ognuno trattato come un’unità con nome proprio possono implementare meccanismi di controllo dell’accesso (alcuni utenti possono accedere ad alcuni file, altri ad altri) Database collezioni di dati correlati mantengono anche relazioni tra gli elementi memorizzati realizzati con uno o più file ci sono i DBMS, che sono tipicamente processi di un SO Sistemi per la Gestione di File File Management Systems Forniscono servizi agli utenti e alle applicazioni per l’uso di file e definiscono anche il modo in cui i file sono usati Sollevano i programmatori dal dover scrivere codice per gestire i file Obiettivi per i File Management Systems Rispondere alle necessità degli utenti riguardo alla gestione dei dati (creazione etc) Garantire che i dati nei file sono validi Ottimizzare le prestazioni sia dal punto di vista del SO (throughput) che dell’utente (tempo di risposta) Fornire supporto per diversi tipi di memoria secondaria dischi magnetici, chiavi USB, CD, DVD... Minimizzare i dati persi o distrutti Fornire un insieme di interfacce standard per i processi utente Fornire supporto per l’I/O effettuato da più utenti in contemporanea Requisiti per i File Management Systems 1 Ogni utente dev’essere in grado di creare, cancellare, leggere, scrivere e modificare un file 2 Ogni utente deve poter accedere, in modo controllato, ai file di un altro utente 3 Ogni utente deve poter leggere e modificare i permessi di accesso ai propri file 4 Ogni utente deve poter ristrutturare i propri file in modo attinente al problema affrontato 5 Ogni utente deve poter muovere dati da un file ad un altro 6 Ogni utente deve poter mantenere una copia di backup dei propri file (in caso di danno) 7 Ogni utente deve poter accedere ai propri file tramite nomi simbolici File System: Organizzazione del codice Directory Management: da nomi di file a identificatori di file; tutte le operazioni utente che hanno a che fare con i file (crearli, cancellarli, spostarli,...) File System: struttura logica ed operazioni (apri, chiudi, leggi, scrivi,...) Organizzazione fisica: da identificatori di file a indirizzi fisici su disco; allocazione/deallocazione Scheduling & Control: ovviamente è qui che ci sono i vari SCAN e compagnia bella Roadmap Visione d’insieme Le directory Gestione della memoria secondaria Gestione dei file in UNIX Gestione dei file su Windows Cosa Contengono Informazioni sui file attributi posizione (dove sono i dati) proprietario Una directory è essa stessa un file (speciale) Fornisce il mapping tra nomi dei file e file stessi Operazioni su una Directory Ricerca Creazione file Cancellazione file Lista del contenuto della directory Modifica della directory Elementi delle Directory: Informazioni di Base Nome del file nome scelto dal creatore (utente o processo) unico in una directory data Tipo del file eseguibile, testo, binario,... Organizzazione del file per sistemi che supportano diverse possibili organizzazioni Elementi delle Directory: Informazioni sull’Indirizzo Volume indica il dispositivo su cui il file è memorizzato Indirizzo di partenza ad es.: da quale settore o traccia di disco Dimensione attuale in byte, word o blocchi Dimensione allocata dimensione massima del file Elementi delle Directory: Controllo di Accesso Proprietario può concedere/negare i permessi ad altri utenti, e può anche cambiare tali impostazioni Informazioni sull’accesso potrebbe contenere username e password per ogni utente autorizzato Azioni permesse per controllare lettura, scrittura, esecuzione, spedizione tramite rete Elementi delle Directory: Informazioni sull’Uso Data di creazione Identità del creatore Data dell’ultimo accesso in lettura Data dell’ultimo accesso in scrittura Identità dell’ultimo lettore Identità dell’ultimo scrittore Data dell’ultimo backup Uso attuale lock, azione corrente,... Una Semplice Struttura per le Directory Il metodo usato per memorizzare le informazioni di cui sopra varia molto da sistema a sistema Quello più semplice è fare una lista di entry, una per ogni file file sequenziale con il nome del file a far da chiave non aiuta nell’organizzare i file non si può dare lo stesso nome a due file diversi Schema a Due Livelli per le Directory Una directory per ogni utente, più una (master) che le contiene la master contiene anche l’indirizzo e le informazioni per il controllo dell’accesso Ogni directory utente è solo una lista dei file di quell’utente non offre struttura per insiemi di files Schema Gerarchico ad Albero per le Directory Una directory master che contiene le directory utente Ogni directory utente può contenere file oppure altre directory utente Ci sono anche sottodirectory di sistema, sempre dentro la directory master Nomi Gli utenti devono potersi riferire ad un file usando solo il suo nome i nomi devono essere unici, ma un utente può non aver accesso a tutti i file dell’intero sistema La struttura ad albero permette agli utenti di trovare un file seguendo un percorso nell’albero (directory path) nomi duplicati sono possibili purché con path diversi ovvero, in directory diverse Directory ad Albero, Esempio Directory di Lavoro Dover dare ogni volta il path completo prima del nome del file può essere lungo e noioso Solitamente, gli utenti o i processi interattivi hanno associata una directory di lavoro o corrente tutti i nomi di file sono dati relativamente a questa directory è sempre possibile dare esplicitamente l’intero percorso, se necessario Roadmap Visione d’insieme Le directory Gestione della memoria secondaria Gestione dei file in UNIX Gestione dei file su Windows Gestione della Memoria Secondaria Il SO è responsabile dell’assegnamento di blocchi a file Due problemi correlati occorre allocare spazio per i file, e mantenerne traccia una volta allocato occorre tener traccia dello spazio allocabile l’un problema influenza l’altro I file si allocano in “porzioni” o “blocchi” l’unità minima è il settore del disco ogni porzione o blocco è una sequenza contigua di settori Allocazione di Spazio per i File Vari problemi da affrontare: preallocazione vs. allocazione dinamica porzioni di dimensione fissa o dinamica, e quanto grandi si usa “porzioni” per quelle di dimensione dinamica, “blocco” per quelle di dimensione fissa metodo di allocazione: contiguo, concatenato o indicizzato gestione della file allocation table per ogni file, mantiene le informazioni su dove sono, sul disco, le porzioni che lo compongono Preallocazione vs. Allocazione Dinamica Preallocazione: occorre che la massima dimensione sia dichiarata a tempo di creazione La dimensione è facilmente stimabile in alcune applicazioni es.: risultato di compilazioni, file che forniscono sommari su dati Difficile in molte altre: utenti ed applicazioni sovrastimano la dimensione cosı̀ da poter effettivamente memorizzare le informazioni desiderate nel file Risultato: spreco di spazio su disco, a fronte di un modesto risparmio di computazione Allocazione dinamica quasi sempre preferita dimensione aggiustata in base alle append o alle truncate Dimensione delle Porzioni Due possibilità agli estremi: si alloca una porzione larga a sufficienza per l’intero file efficiente per il processo che vuole creare il file: l’accesso sequenziale è il più veloce si alloca un blocco alla volta efficiente per il SO, che deve gestire tanti file ciascun blocco è una sequenza di n settori contigui, con n fisso e piccolo (spesso n = 1) Si cerca un punto d’incontro (trade-off) tra efficienza del singolo file ed efficienza del sistema sarebbe ottimo, per le prestazioni di accesso al file, fare porzioni contigue porzioni piccole vuol dire grandi tabelle di allocazione, e quindi grande overhead ma vuol anche dire maggior facilità di riuso dei blocchi da evitare porzioni fisse grandi: frammentazione interna frammentazione esterna sempre possibile: i file possono venire cancellati... Dimensione delle Porzioni Alla fine, 2 possibilità (valide sia per preallocazione che per allocazione dinamica): Porzioni grandi e di dimensione variabile ogni singola allocazione è contigua tabella di allocazione abbastanza contenuta complicata la gestione dello spazio libero: servono algoritmi ad hoc Porzioni fisse e piccole tipicamente, 1 blocco per 1 porzione molto meno contiguo del precedente spazio libero: basta guardare una tabella di bit... Dimensione delle Porzioni Preallocazione + porzioni grandi e di dimensione variabile se si usa questa combinazione, niente tabella di allocazione: per ogni file basta l’inizio e la lunghezza ogni file è un’unica porzione come per il porzionamento della RAM: best fit, first fit, next fit ma qui non c’è un vincitore, troppe variabili inefficiente per lo spazio libero: necessita periodica compattazione e compattare il disco è moooooolto più oneroso che compattare la RAM è un I/O... Come Allocare Spazio per i File Tre metodi: contiguo concatenato indicizzato Serve comunque una tabella di allocazione dei file Allocazione Contigua Un insieme di blocchi viene allocato per il file quando quest’ultimo viene creato preallocazione necessaria, occorre sapere quanto lungo, al massimo, sarà il file altrimenti, se un file può crescere oltre il limite massimo, potrebbe incontrare blocchi già occupati, e niente contiguità È necessaria una sola entry nella tabella di allocazione dei file blocco di partenza e lunghezza del file Ci sarà frammentazione esterna con conseguente necessità di compattazione Allocazione Contigua Compattazione Allocazione Concatenata Allocazione di un blocco alla volta Ogni blocco ha un puntatore al prossimo blocco la prima parte del blocco sono dati del file, l’ultima (piccola) parte del blocco è il puntatore È necessaria una sola entry nella tabella di allocazione dei file blocco di partenza e lunghezza del file lunghezza del file anche calcolabile, ma è comodo avere già il valore calcolato... Niente frammentazione esterna frammentazione interna trascurabile Ok per file da accedere sequenzialmente ma se serve un certo blocco che si trova b blocchi dopo quello iniziale, occorre scorrere tutta la lista Consolidamento: analogo alla compattazione, per mettere i blocchi di un file contigui e migliorare l’accesso non sequenziale Allocazione Concatenata Allocazione Concatenata: Consolidamento Allocazione Indicizzata Via di mezzo tra i due precedenti, ne risolve quasi tutti i problemi La tabella di allocazione dei file contiene, apparentemente, una sola entry, con l’indirizzo di un blocco Questo blocco, in realtà, ha una entry per ogni porzione allocata al file quindi fa parte della tabella a tutti gli effetti pur trovandosi in un blocco apparentemente indistinguibile da quelli usati per i dati del file E se il file è troppo grande? si fanno più livelli esempio tipico: i-node di Unix-Linux Ovviamente ci dev’essere un bit che dica se un blocco è composto da dati o è un indice Allocazione Indicizzata L’allocazione può essere con: blocchi di lunghezza fissa: niente frammentazione esterna blocchi di lunghezza variabile: migliora la località A volte occorre il consolidamento blocchi di lunghezza fissa: migliora la località blocchi di lunghezza variabile: riduce la dimensione dell’indice Allocazione Indicizzata (Porzioni di Lunghezza Fissa) Allocazione Indicizzata (Porzioni di Lunghezza Variabile) Gestione dello Spazio Libero La gestione dello spazio libero è altrettanto importante di quello occupato Per allocare spazio per i file, occorre sapere dov’è lo spazio libero non è realistico guardare la tabella di allocazione di tutti i file per determinare quali blocchi/porzioni sono liberi! Serve una tabella di allocazione di disco, oltre che a quella di allocazione per i file Ogni volta che si alloca o si cancella un file, lo spazio libero va aggiornato Tabelle di Bit Vettore con un bit per ogni blocco su disco 0: libero; 1: occupato Va bene per tutti gli schemi visti finora Minimizza lo spazio richiesto alla tabella di allocazione del disco Se il disco è quasi pieno, la ricerca di uno spazio libero può richiedere molto tempo risolvibile con delle tabelle riassuntive di porzioni della tabella di bit es.: numero di blocchi liberi in totale e numero di blocchi liberi contigui Porzioni Libere Concatenate Le porzioni libere possono essere concatenate le une alle altre usando, per ogni blocco libero, un puntatore ed un intero per la dimensione Praticamente senza overhead di spazio Va bene per tutti gli schemi visti finora Problemi: se c’è frammentazione, le porzioni sono tutte da un blocco e la lista diventa lunga occorre leggere un blocco libero per sapere qual è il prossimo: se occorre allocarne molti, diventa time consuming è lungo anche cancellare file molto frammentati Indicizzazione Tratta lo spazio libero come un file, e quindi usa un indice come si farebbe per un file Per efficienza, l’indice gestisce le porzioni come se fossero di lunghezza variabile quindi c’è una entry per ogni porzione libera nel disco È un approccio che fornisce un supporto efficiente a tutti i metodi di allocazione visti finora Lista dei Blocchi Liberi Ad ogni blocco viene assegnato un numero sequenziale La lista di questi numeri viene memorizzata in una parte dedicata del disco Se per ogni blocco servono 4 bytes e i blocchi sono da 512 bytes, richiede meno dell’1% di spazio su disco Per avere parti della lista in memoria principale, si può: organizzare la lista come pila, e tenere solo la parte alta pop per allocare spazio libero, push per deallocare spazio occupato quando la parte in memoria principale finisce, si prende una nuova parte da disco anche come coda Volumi Essenzialmente, è un disco “logico” partizione di un disco più dischi messi insieme e visti come un disco solo (LVM) Un insieme di settori in memoria secondaria, che possono essere usati dal SO o dalle applicazioni I settori di un volume non devono necessariamente essere contigui, ma appariranno come tali al SO e alle applicazioni Un volume potrebbe essere il risultato dell’unione di volumi più piccoli Dati e Metadati: Consistenza Dati: contenuto dei file Metadati: lista blocchi liberi, lista blocchi all’interno dei file, data di ultima modifica,... I metadati devono essere su disco, perché devono essere persistenti Per efficienza, vengono anche tenuti in memoria principale Mantenere sempre consistenti metadati in memoria principale e su disco è inefficiente Quindi, si fa solo di tanto in tanto, quando il disco è poco usato, e con più aggiornamenti insieme Journaling: anziché scrivere le informazioni nelle opportune porzioni di disco, le si scrive in una zona di disco dedicata (log) in caso di reboot dopo un crash, basta leggere il log Dati e Metadati: Consistenza E se c’è un evento imprevisto? il computer viene spento all’improvviso, senza una procedura di chiusura (ad es.: per mancanza di corrente) il disco viene rimosso senza dare un appropriato comando (unmount; ad es.: chiavetta USB) Basta scrivere un bit all’inizio del disco, che dice se il sistema è stato spento correttamente Al reboot, se il bit è 0, occorre eseguire un programma di ripristino del disco blocco in uso ma non appartenente a nessun file? lo si dichiara libero blocco libero ma appartenente ad un file? lo si dichiara appartenente a quel file con il journaling è più facile, basta consultare il log Journaling Zona dedicata del disco in cui scrivere le operazioni, prima di farne il commit nel file system Generalmente implementato come log circolare Evita di avere file system corrotti se la scrittura nel journal è completa, in caso di crash durante la scrittura nel file system è possibile recuperare l’errore se c’è un crash durante la scrittura nel journal, il file system rimane integro Journaling: Recupero dati Se al reboot il bit di shutdown è 0: 1 Confronta il journal allo stato corrente del file system 2 Correggi inconsistenze nel file system basandosi nelle operazioni salvate nel journal se la scrittura nel journal è completa, in caso di crash durante la scrittura nel file system è possibile recuperare l’errore se c’è un crash durante la scrittura nel journal, il file system rimane integro Tipi di Journaling: Fisico Logico Journaling: Tipi Journaling fisico Copia nel journal tutti i blocchi che dovranno poi essere scritti nel file system, inclusi metadati Se c’è un crash durante la scrittura nel file system, è sufficiente copiare il contenuto dal journal al file system al reboot successivo Journaling logico Copia nel journal soltanto i metadati delle operazioni effettuate (es., modifica blocchi liberi dopo cancellazione file) Se c’è un crash, si copiano i metadati dal journal al file system, ma questo può causare corruzione dei dati append a file modifica la lunghezza, ma il contenuto è perso perchè non salvato nel journal Journaling: Alternative Soft Updates File Systems Riordina scritture su file system in modo da non avere mai inconsistenze O meglio, consentono solo alcuni tipi di inconsistenze che non portano a perdita di dati (storage leaks) Log-Structured File Systems L’intero file system è strutturato come un buffer circolare, detto log Dati e metadati sono scritti in modo sequenziale, sempre alla fine del log Ci possono essere diverse versioni dello stesso file, corrispondenti a diversi istanti temporali Copy-on-Write File Systems Evitano sovrascritture dei contenuti dei file Scrivono nuovi contenuti in blocchi vuoti, poi aggiornano i metadati per puntare ad i nuovi contenuti Roadmap Visione d’insieme Le directory Gestione della memoria secondaria Gestione dei file in UNIX Gestione dei file su Windows Gestione dei File in UNIX Sei tipi di file: normale directory speciale (mappano su nomi di file i dispositivi di I/O) named pipe (per far comunicare processi tra loro) hard link (collegamenti, nome di file alternativo) link simbolico (il suo contenuto è il nome del file cui si riferisce) Inode Sta per “index node” ispirato al metodo di allocazione indicizzato, con dimensione fissa dei blocchi Struttura dati che contiene le informazioni essenziali per un dato file Un dato inode potrebbe essere associato a più nomi di file hard link ma un inode attivo è associato ad un solo file ogni file è controllato da un solo inode Viene mantenuta dal SO una tabella di tutti gli inode corrispondenti a file aperti (in memoria principale) Tutti gli altri i-node sono in una zona di disco dedicata (i-list) Inode in Free BSD Tipo e modo di accesso del file Identificatore dell’utente proprietario e del gruppo cui tale utente appartiene Tempo di creazione e di ultimo accesso (lettura o scrittura) Flag utente e flag per il kernel Numero sequenziale di generazione del file Dimensione delle informazioni aggiuntive Altri attributi (controllo di accesso e altro) Dimensione Numero di blocchi, o numero di file (per le directory) Dimensione dei blocchi Sequenze di puntatori a blocchi Inode in Free BSD Allocazione di File Fatta a blocchi Allocazione dinamica quindi, blocchi potenzialmente non contigui L’indicizzazione tiene traccia dei blocchi dei file parte dell’indice è memorizzata nell’inode L’inode ha anche alcuni puntatori diretti e 3 puntatori indiretti Inode e Directory Le directory sono file che contengono: una lista di coppie (nome di file, puntatore ad inode) alcuni di questi file potrebbero essere a loro volta directory, quindi è una struttura gerarchica una directory può essere modificata solo dal sistema operativo, ma letta da ogni utente Accesso ai File Per ogni file, ci sono 3 terne di permessi lettura, scrittura, esecuzione per il proprietario, per il suo gruppo e per tutti gli altri Gestione file condivisi Come gestire i file che devono essere condivisi in più directory? Fare una copia del file è inutilmente costoso Soluzione: Symbolik links esiste un solo descrittore (es., i-node) del file originale. symlink contengono il cammino completo sul file system verso il file possono esistere symlink a file non più esistenti Soluzione: Hard links puntatore diretto al descrittore del file originale (all’ i-node) il file condiviso non può essere cancellato finché esiste un link remoto ad esso l’i-node contiene un contatore dei file che lo referenziano Roadmap Visione d’insieme Le directory Gestione della memoria secondaria Gestione dei file in UNIX Gestione dei file su Windows Gestione dei File su Windows File system vecchio (da MS-DOS): FAT allocazione concatenata, con blocchi (cluster) di dimensione fissa File system nuovo: NTFS allocazione con bitmap (!), con blocchi (cluster) di dimensione fissa Caratteristiche Principali di FAT File Allocation Table, è una tabella ordinata di puntatori Molto limitato, andava bene per i vecchi dischi (soprattutto per i floppy) Ancora usato per le chiavette USB Approccio non scalabile: la FAT stessa può occupare molto spazio File Allocation Table FAT usa un puntatore (riga nella tabella) per ogni cluster del disco ogni cluster ha dimensione variabile tra 2 e 32 KB, ed è costituito da settori di disco contigui variabile nel senso che può cambiare da partizione a partizione, ma resta fisso all’interno di una partizione di conseguenza, la tabella cresce con la grandezza della partizione i puntatori sono di valori di 12, 16 o 32 bit (FAT-12, FAT-16 o FAT-32) File Allocation Table La parte della FAT relativa ai file aperti deve essere sempre mantenuta interamente in memoria principale Consente di identificare i blocchi di un file e accedervi seguendo sequenzialmente i collegamenti nella FAT un file è semplicemente una catena di indici Poca scalabilità: un puntatore (32 bit) per riga, tante righe quanti cluster con un disco da 100GB, cluster da 1KB, FAT ha 100M di righe 4B x 100M = 400MB per la FAT File Allocation Table: Regioni del Volume Regione Boot Sector Contiene informazioni necessarie per l’accesso al volume tipo e puntatore alle altre sezioni del volume bootloader del sistema operativo in BIOS/MBR Regione FAT Due copie della file allocation table ridondanza utile in caso la tabella principale sia corrotta sincornizzate ad ogni scrittura su disco Mappa il contenuto della regione dati, inidcando a quali directory/file i diversi cluster appartengono File Allocation Table: Funzionamento Data la tabella FAT di puntatori, il puntatore i-esimo: se è zero, indica che l’i-esimo cluster del disco è libero se è tutti 1: valore speciale, vuol dire ultimo blocco del file se non è zero e non è un valore speciale, indica il cluster dove trovare il prossimo pezzo del file, oltre che la prossima entry della FAT per questo file File Allocation Table: Funzionamento Regione Root Directory È una directory table che contiene tutti i file entry per la directory root del sistema dimensione fissa e limitata in FAT12 e FAT16 (256 entries) In FAT32, è inclusa nella regione dati, insieme a file e directory normali, e non ha limitazioni sulla dimensione Regione Dati È la regione del volume in cui sono effettivamente contenuti i dati dei file e directory le directory, chiaramente, seguono la struttura FAT vista prima i files sono semplicemente i dati contenuti nei vari cluster FAT: Limitazioni Supporta file di dimensione massima 4GB (32 bit nel campo dimensione file nelle directory) Non implementa Journaling Non consente alcun meccanismo di controllo di accesso ai file/directory Limite dimensione partizioni: 2TB (232 settori da 512B) NTFS: New Technology File System FS adottato a partire da Windows NT in poi Usa UNICODE per l’encoding dei nomi dei file, 255 caratteri limite massimo I file sono definiti da un insieme di attributi attributi rappresentati come un byte stream supporta hard e soft link implementa journaling NTFS: Formato del Volume NTFS: Regione Boot Sector Basata sull’equivalente FAT Alcuni campi sono in posizioni diverse Per il resto, valgono le stesse considerazioni di FAT MFT: Master File Table Principale struttura dati del file system Unica per ciascun volume, differentemente da FAT implementata come un file sequenza lineare di record (massimo 24 8), da 1 a 4KB ogni record descrive un file identificato da un puntatore di 48bit i rimanenti 16bit sono usati come numero di sequenza MFT: Records Ogni record contiene una lista di attributi: (attributo, valore) attributo è un intero, che indica il tipo di attributo valore è definito come una sequenza di byte il contenuto di un file è anch’esso un attributo ($DATA)! Il valore dell’attributo può essere incluso direttamente nel record (attributo residente) Oppure può essere un puntatore ad un record remoto (attributo non residente) ad esempio, se il valore dell’attributo è troppo grande e non sta nel record (es, $DATA) MFT: Records I primi 27 record sono riservati per metadati del file system Il record 0 descrive l’MFT stesso (in particolare, tutti i file nel volume) Il record 1 contiene una copia dei primi record dell’MFT, in modo non residente Il record 2 contiene le informazioni di journaling (metadata-only!) Il record 3 ha le informazioni sul volume: id, label, versione FS, ecc Il record 4 è una tabella degli attributi usati nell’MFT (definisce un intero per ciascun tipo di attributo) Il record 6 definisce la lista dei blocchi liberi, usando una bitmap Dal record 28 in poi, ci sono i descrittori dei file normali (sempre in forma di record!) MFT MFT: Files NTFS cerca sempre di assegnare ad un file sequenze contigue di blocchi per file piccoli (< 1KB), i dati sono salvati direttamente nell’MFT per file grandi, il valore dell’attributo indica la sequenza ordinata dei blocchi sul disco dove risiede il file Per ogni file, esiste un record base nell’MFT file con zone interne non usate (impostate a 0): file sparsi il sistema mantiene una lista dei blocchi a 0, ma non sono veramente salvati sul disco! MFT: Record Base File di 9 blocchi, divisi in 3 run Descrittore singolo sufficiente per l’intera lista di run Consente di descrivere file di dimensione potenzialmente illimitata, dipende tutto dalla contiguità dei blocchi Blocchi da 1KB; 1 file da 20GB, 20 sequenze di 1M di blocchi. Ognuna richiede 20+1 coppie di 64 bit: 21x2x8B = 336B Blocchi da 1KB; 1 file da 64KB, 64 sequenze di 1 blocco. Ognuna richiede 65x2x8B = 1040B MFT: Record con Estensioni File di larghe dimensioni possono necessitare di più record NTFS usa una tecnica simle agli i-node UNIX/Linux: Il record base è un puntatore a N record secondari Eventuale spazio rimanente nel record base contiene le prime sequenze del file Se i record estesi non rientrano in MFT per mancaza di spazio, vengono trattati come attributo non residente e quindi salvati in un file dedicato, con un apposito record salvato nell’MFT MFT: Record con Estensioni File di k sequenze di blocchi, con due recrod di estensione Unix: Regioni del Volume Regione Boot Sector Simile a blocco di boot per FAT Contiene informazioni e dati necessari per il bootstrap Regione Superblock Contiene informazioni sui metadati del filesystem Dimensioni della partizione, dimensione dei blocchi, puntatore alla lista dei blocchi liberi, ecc Copie ridondanti multiple in caso di corruzione Le copie di backup sono salvate in gruppi di blocchi sparsi nel file system La prima copia è sempre in una parte prefissata della partizione, in modo da consentire recovery in modo semplice Regione Lista degli I-node (i-list) È una tabella di descrittori dei file (i-node) Lista numerata di i-node Un i-node per ogni file salvato nel sistma ciascun i-node nella lista punta ai blocchi dei file nella sezione dati del volume Il Kernel e gli I-node Il kernel Unix usa due strutture di controllo separate per gestire file aperti e descrittori i-node: Puntatore a descrittori dei file attualmente in uso, salvato nel process control block Una tabella globale di descrittori di file aperti, mantenuto in un apposita struttura dati E Linux? Nativamente, supporta ext2/ext3/ext4 ext2: direttamente dai file system Unix originari ext3: ext2+journaling ext4: ext3 in grado di memorizzare singoli file più grandi di 2TB e filesystem più grandi di 16TB Pieno supporto per gli i-node, memorizzati nella parte iniziale del file system Linux permette anche di leggere e scrivere altri file system, come per esempio quelli di Windows con FAT, non è possibile memorizzare gli i-node sul dispositivo vengono creati on-the-fly su una cache quando vengono aperti i file