File system vs partizioni vs directory


30

Sono nuovo di Linux, quindi scusatemi per l'eventuale confusione che potreste incontrare in questa domanda.

Da quello che ho capito, il filesystem specifica come una partizione archivia / gestisce i file, con standard come ext2, ext3, reiserfs, xfs, ecc. Occasionalmente vedo che le persone sembrano riferirsi a ciascuno " directory" come

    /boot filesystem
    /usr/bin filesystem
    /root filesystem
    /bin filesystem

Perché dovremmo fare riferimento a questi come filesystems?

Se ognuna di esse è una partizione, ciò mi confonde perché, per quanto ne so, /usre /usr/bintende ad essere nella stessa partizione, ma ho visto che la gente si riferisce a entrambi /usr filesysteme /usr/bin filesystem.

Se filesystemqui è equivalente a quello di Window directory, non mi è chiaro poiché apparentemente il filesystem è qualcosa di più di una semplice directory. Inoltre, per quanto ne so, Linux non ha un directoryconcetto; tutti sono file.


Non ho mai visto un'istanza del "filesystem / root". Qualunque sia il filesystem montato su "/" è "il filesystem di root". Alcuni altri probabili punti di montaggio su una moderna distribuzione Linux sarebbero "/ boot", "/ home" e "/ mnt / xx" o "/ media / xx" per vari valori di "xx". Le distribuzioni del kernel 2.x + (?) Avranno "/ proc" e "/ sys", Systemd ha mountpoint "/ var / run / nnnn" per vari UID numerici nnnn. Le installazioni Unix precedenti potrebbero montare "/ usr" tramite NFS, ma è improbabile su una distribuzione Linux personale. "/ bin" e "/ usr / bin" normalmente non sarebbero mountpoint separati.
David,

C'è un / root , non è vero? Vuoi dire che nevers rimane in un filesystem separato?
Kenny,

Destra. "/ root" è la home directory standard per l'utente "root", ma in genere è solo un'altra directory sul filesystem di root.
David,

Questo argomento è stato ampiamente discusso su Ask Ubuntu , che, IMNSHO, è sciocco, dal momento che, AFAIK, i concetti non sono diversi su Ubuntu rispetto a qualsiasi altra forma di Unix o Linux. Ad esempio, che cos'è "mount"? è stato chiesto solo pochi giorni fa.
Scott,

Sono abbastanza colpito dalle domande. Provenendo da poche conoscenze, potresti già comprendere molto in questo momento e che hai perso la conclusione che "/ filesystem di root" potrebbe riferirsi al filesystem su cui è montata la partizione /root, penso che sia ignorabile considerando la complessità del situazione.
erikbwork,

Risposte:


14

Come ho scritto in https://superuser.com/a/293160/38062 :

Il problema qui è la parola "filesystem". Nei mondi POSIX / Unix / Linux, è usato per significare diverse cose.

  1. Il "filesystem" è talvolta l'intero sistema di file, radicato /e presentato alle applicazioni software dal kernel del sistema operativo. Con questo significato, ad esempio, le persone parlano di sistemi operativi POSIX che hanno un "singolo albero di filesystem ".
  2. Un "filesystem" è talvolta una (o più) fetta (e) di uno (o più) DASD (s) - una o più raccolte di settori del disco contigui formattati come un singolo volume con un determinato formato - come delimitato da un partizionamento del disco schema. Con questo significato, la gente parla, per esempio, di "formattazione del mio /usrfilesystem ". " /usr" qui è il punto di montaggio (previsto) del volume o (in alcuni schemi di partizionamento) la sua etichetta identificativa.
  3. Un "filesystem" è talvolta un albero unificabile astratto di file e directory, presentato da un driver di filesystem (cioè il livello VFS) al resto del sistema. Con questo significato, la gente parla di, diciamo, "montare il filesystem proc su /proc" o "usando un tmpfs file system per /tmp".

Stai vedendo il significato numero 1 quando vedi " /usr/binfilesystem". È un albero di filesystem radicato nella directory /usr/bin. Sì, Linux molto ha avere il concetto di directory.

Significato # 2 e significato # 3 sono ciò che stai leggendo male come. Le persone non parlano di /usr/binun set di dati su disco, delimitato da suddivisione / suddivisione del disco. Né stanno parlando di /usr/binun tipo particolare di driver del filesystem o di un particolare formato di volume del disco.

Ulteriori letture

  • Ramesh Bangia (2010). "file system". Dizionario di tecnologia dell'informazione . Laxmi Publications, Ltd. ISBN 9789380298153. p. 224.
  • File System . "Definizioni di base". Le specifiche di base del gruppo aperto . Numero 7 IEEE 1003.1. The Open Group. 2013.
  • Binh Nguyen (16-08-2004). "filesystem". Il dizionario Linux . Versione 0.16. p. 616.

8

Ovviamente Linux usa il concetto di directory. Il concetto di directory è lo stesso di Windows.

Il concetto di filesystem è anche molto simile a quello utilizzato in Windows. Windows di solito usa NTFS o FAT - Linux di solito usa ext2, ext3, ext4 e così via, questa è la differenza.

Ciò che è diverso, è che in Linux i file / directory di tutte le parti disponibili sono organizzati in un singolo albero. In Windows ti riferisci a diverse partizioni usando una lettera, fe "a:", "c:", in Linux il percorso completo di qualsiasi file disponibile inizia con "/" - la directory principale. Ad esempio, sul tuo hdd è presente una partizione separata con i file necessari per avviare il sistema: esegui il comando 'mount' con argomenti appropriati e il contenuto di questa partizione diventa disponibile nel percorso "/ boot /". Quindi, i percorsi "/ boot" e "/ home" possono riferirsi a dati su partizioni diverse, queste partizioni possono avere filesystem diversi. Probabilmente ha causato il tuo malinteso.

Le directory che si trovano fisicamente sulla stessa partizione "avrebbero sempre lo stesso filesystem". Quando qualcuno parla del filesystem di una directory, in realtà si tratta del filesystem della partizione in cui si trova questa directory.

(Correzione minore e probabilmente non importante: a volte il filesystem è virtuale e non esiste alcuna partizione corrispondente. Ad esempio "/ proc" contiene qualcosa, che assomiglia molto ai file, ma questi "file" sono virtuali, su cui non risiedono qualsiasi disco rigido e contiene informazioni sui processi in esecuzione. Esiste uno speciale filesystem "procfs" che fornisce a questi dati un'interfaccia simile a quella di un file)


Hai citato "filesystem di una directory", si collega a tutte le sue sottodirectory. È possibile che una directory e le sue sottodirectory abbiano un filesystem diverso? Ad esempio / a e / a / b , con / b è un'altra partizione con il proprio filesystem F2 montata su un filesystem F1?
Kenny,

Per quanto riguarda il fatto che le directory situate sulla stessa partizione facciano effettivamente parte dello stesso filesystem possono diventare un po 'confuse per alcuni filesystem molto moderni come ZFS o btrfs; puoi avere un volume ZFS con diversi filesystem che lo condividono, con i loro mountpoint completamente distinti.
Charles Duffy,

@Kenny Sì, hai ragione. Esempio live: inserisco un compact disc nell'unità cd. Il mio Linux monta il CD su "/ mount / cdrom". La directory "/ mount" (e tutti i file che creo in essa) si trova sul mio disco rigido. Ma i contenuti "/ mount / cdrom" sono già su CD.
Lesnik,

6

Un disco è diviso in una o più partizioni . Per Windows, di solito ce n'è solo uno, forse con una partizione di ripristino nascosta da qualche parte. Una partizione è un'area logicamente contigua del disco, ad esempio "settori da 1 a 10.000.000".

Su una partizione può essere creato un filesystem. Per Windows, si tratta di NTFS o FAT; per Linux questa è una delle extversioni o varie altre opzioni.

All'interno di un filesystem ci sono file e directory. Linux ha directory, non ho idea di come tu abbia avuto l'idea che non lo fosse.

In che modo un sistema operativo presenta all'utente più partizioni su più dischi? Su Windows, questo viene fatto con lettere di unità : C:, D:ecc Su Linux, non ci sono le lettere di unità e tutto è fatto con punti di montaggio : in una particolare directory, l'accesso reindirizzare ad un filesystem differente (+) Spesso, se si inserisce un CD. o chiavetta USB apparirà da qualche parte sotto /mediao /mnt.

/usre /usr/binsarà di solito sullo stesso filesystem ma non è necessario che lo sia. Le persone possono indicare "il filesystem che contiene la /usr/bindirectory" quando usano quel fraseggio.

(+) Puoi farlo anche con i punti di giunzione NTFS, ma le persone raramente lo fanno. Fino a quando non finiscono le lettere di unità.


Correggimi se sbaglio: su Linux, 1 disco fisico può essere diviso in più partizioni, ognuna con il proprio filesystem? Analogamente al modo in cui un disco rigido su Windows contiene diverse partizioni, una può essere FAT e l'altra NTFS?
Kenny,

1
Sì, hai ragione: ma non è analogo, è esattamente lo stesso meccanismo sottostante. Le macchine a doppio avvio potrebbero avere partizioni NTFS ed ext3 sullo stesso disco e il gestore disco di ciascun sistema operativo vede lo stesso set di partizioni. È solo che Windows non riesce a vedere montare le partizioni ext3 per vedere i file.
pjc50,

3

È possibile mantenere un intero sistema Linux su una partizione, con tutte le sottodirectory su un unico filesystem.

È anche possibile distribuirlo su più partizioni, con alcuni sottotitoli di directory che si trovano su file system diversi. Per esempio, è comune a mettere /home, /tmp, /usr, e /varil filesystem separati. Per rispondere a una delle tue domande, a volte /usr/binsarà anche sul suo file system.

Ci sono vantaggi in questo schema. Ad esempio, se si /varriempie di molte e-mail, il resto del sistema non è interessato. Allo stesso modo, se un filesystem è danneggiato a causa di un arresto anomalo o qualcosa del genere, gli altri filesystem sono comunque validi ed è più facile ripristinare il sistema.

All'avvio del sistema, inizialmente è disponibile solo il filesystem di root. I programmi mantenuti lì vengono eseguiti durante il processo di avvio. Uno di questi programmi, mountviene eseguito più volte, utilizzando i dati del file /etc/fstab, la tabella del filesystem. Per fare un esempio: originariamente, /homeè solo una normale directory nel filesystem di root. Quindi eseguiamo questo comando come root:

mount /dev/sda7 /home

Questo dice al sistema che il filesystem sulla partizione /dev/sda7 dovrebbe essere montato sulla directory /home. Quindi ora tutto in quel filesystem è considerato sotto /home.

Puoi vedere cosa è attualmente montato eseguendo df.


3

A volte ci riferiamo a quelli come filesystems, perché a volte quelle directory sono punti di montaggio. Questo per l'unica domanda che hai posto ...

filesystem può riferirsi a due cose diverse ... o in realtà a due aspetti molto diversi della stessa cosa:

  1. La struttura logica utilizzata per organizzare i dati su un supporto di archiviazione.
  2. La metodologia utilizzata dal sistema operativo per offrire ai processi l'accesso unificato ai dati.

Il concetto di file e directory è una metafora. Su un computer ci sono solo dati e tutti i media non sono altro che dispositivi che possono contenere dati. Alcuni dispositivi consentono la lettura e la scrittura di dati (ad es. HDD), altri dispositivi consentono solo la lettura di dati (ad es. CD-ROM) e ci sono anche dispositivi che consentono solo la scrittura di dati (ad es. Stampante). Usiamo la metafora di file e directory per strutturare i dati, in modo da poter accedere a piccoli blocchi di dati, piuttosto che a tutto allo stesso tempo.

I filesystem che mettiamo su supporti di memorizzazione, ad esempio ext4, xfs, fat fanno la parte strutturante. Li usiamo per mettere etichette su blocchi di dati (file) e per avere un elenco strutturato coerente di tutte le etichette (directory). L'elenco strutturato è in realtà un albero. L'aspetto più importante è che un albero ha esattamente un inizio, la sua radice. Mantenere questa struttura e garantire che i dati siano e rimangano accessibili è piuttosto il compito, motivo per cui non esiste un solo tipo di filesystem.

L'altro aspetto dei filesystem è che è compito del sistema operativo rendere i dati memorizzati su dispositivi di archiviazione accessibili a tutti i programmi. Ciò è ottenuto da due cose:

  1. Il sistema operativo offre esattamente una (programmazione) interfaccia per l'accesso e l'interazione con file e directory. Per programmi / processi non importa se il filesystem sul dispositivo di archiviazione è ext2, xfs, fat o altro. I programmi / processi accedono a file e directory in modo uniforme.

  2. Il sistema operativo organizza tutti i supporti di archiviazione, vale a dire i loro file system, in un'unica struttura principale. I programmi accedono a file e directory attraverso questa struttura straordinaria e non devono interagire direttamente con i dispositivi di archiviazione. In questo modo i programmi non devono preoccuparsi del dispositivo su cui risiedono effettivamente i dati. Questa struttura straordinaria viene spesso definita "file system virtuale" del kernel.

L'aggiunta del filesystem di un dispositivo di archiviazione al filesystem virtuale si chiama "montaggio" di un filesystem. All'avvio di Linux, il kernel crea il filesystem virtuale (VFS). Subito dopo la creazione è vuoto e consiste solo del suo punto di ingresso, noto anche come radice, trascritto /. Quindi il kernel monta un filesystem alla radice del VFS. Questo è un ramdisk o immediatamente un filesystem su una partizione su un disco rigido. Poiché viene aggiunto alla radice di VFS, questa partizione viene spesso definita come filesystem di root.

Ora ecco la parte in cui le linee si confondono e vediamo che i filesystem sui dispositivi di archiviazione e il VFS del kernel sono in realtà due aspetti della stessa attività del sistema operativo: Con il montaggio di un filesystem di root, il VFS contiene molti file e directory, tutti i quali esiste sulla partizione di root. Tuttavia, ogni directory può diventare un "punto di montaggio". Un punto di montaggio è dove VFS inserisce il punto di ingresso in un filesystem su un dispositivo di archiviazione. Ciò significa che ogni volta che montiamo un filesystem su una directory, diciamo al VFS che invece di accedere ai dati memorizzati in quella directory, preferiremmo accedere ai dati su un dispositivo di archiviazione diverso. I punti di mount sono generalmente directory vuote, quindi non rendiamo inaccessibili i dati montando altri filesystem in cima.

Quando installi il tuo SO dipende da te se vuoi mettere tutti i dati su un filesystem che diventa il tuo filesystem di root, o se vuoi dividere i tuoi dati tra più filesystem. Quest'ultimo richiede che il tuo sistema operativo monti tutti i singoli filesystem, per rendere accessibili tutti i dati. Come dividere le cose è una questione di come si progetta il sistema. Questo è il motivo per cui a volte le directory che conosci dalla tua installazione vengono chiamate filesystem.

Per i computer di solito a casa non è più necessario suddividere la propria installazione in più filesystem. Tuttavia, ci possono essere buoni motivi per farlo, ma questo non rientra nell'ambito di questa pubblicazione.

Per mantenere il resto di questo invio breve: le partizioni sono un altro mezzo per strutturare i dati sui dispositivi di archiviazione. Con le partizioni si ricava uno spazio di archiviazione contiguo da un dispositivo di archiviazione fisico e li offre come singoli dispositivi di archiviazione al sistema operativo (su cui è possibile inserire i filesystem da montare nel VFS). Una ragione per fare ciò può essere che si ha un solo disco rigido, ma si desidera utilizzare molti filesystem diversi. La partizione su cui vive il filesystem di root viene spesso definita partizione di root.


1

Stai facendo un po 'di confusione. Filesystemindica un meccanismo tramite il quale i file sono posizionati e organizzati su un dispositivo di archiviazione o su una memoria di massa, come un disco rigido o un CD-ROM e, in alcuni casi, anche sulla RAM.

Anche le finestre usi filesystem come NTFSo, in precedenza, FAT.

Il tuo esempio mostra una pratica comune per i sistemi linux e unix, per avere il proprio sistema composto da diversi filesystem montati su directory chiamate mount point. Ciò consente, in caso di problemi, di limitare il danno a uno o più ma non a tutti i filesystem.

Quindi, FS non è equivalente a directory, e anche in Linux ci sono directory, che sono un tipo speciale di file

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.