Qual è la differenza tra "dimensione dell'inode" e "Byte per inode"


18

Di seguito le informazioni sono tratte dalla pagina man, vorrei sapere la differenza tra byte per inode e dimensione di un nodo?

-i bytes-per-inode

Specifica il rapporto byte / inode. mke2fs crea un inode per ogni byte per inode byte di spazio sul disco. Maggiore è il rapporto byte per inode, meno inode verranno creati. Questo valore generalmente non dovrebbe essere inferiore alla dimensione del blocco del filesystem, poiché verranno quindi creati troppi inode. Si avvisa che non è possibile espandere il numero di inode su un filesystem dopo che è stato creato, quindi fare attenzione a decidere il corretto valore per questo parametro.

-I inode-size

Specificare la dimensione di ciascun inode in bytes.mke2fs per impostazione predefinita crea inode a 256 byte. Nei kernel successivi alla 2.6.10 e in alcuni kernel precedenti del fornitore è possibile utilizzare inode superiori a 128 byte per memorizzare attributi estesi per migliorare le prestazioni. Il valore delle dimensioni dell'inode deve essere una potenza di 2 maggiore o uguale a 128. -size più spazio consumerà la tabella degli inode e questo riduce lo spazio utilizzabile nel filesystem e può anche avere un impatto negativo sulle prestazioni.Gli attributi estesi memorizzati in inode di grandi dimensioni non sono visibili con kernel più vecchi e tali filesystem non saranno montabili con 2.4 kernel non è possibile modificare questo valore dopo la creazione del filesystem.

Risposte:


13

Bene, innanzitutto, cos'è un inode? Nel mondo Unix, un inode è una specie di voce di file. Un nome file in una directory è solo un'etichetta (un collegamento!) A un inode. Un inode può essere referenziato in più posizioni (hardlink!).

-i byte per inode (aka inode_ratio)

Per qualche ragione sconosciuta questo parametro è talvolta documentato come byte per inode e talvolta come inode_ratio . Secondo la documentazione, questo è il rapporto byte / inode . La maggior parte degli umani avrà una migliore comprensione se dichiarato come uno (scusate il mio inglese):

  • 1 inode per ogni X byte di memoria (dove X è byte per inode).
  • dimensione media minima del file che puoi adattare.

La formula (presa dal mke2fs codice sorgente ):

inode_count = (blocks_count * blocksize) / inode_ratio

O anche semplificato (supponendo che la "dimensione della partizione" sia approssimativamente equivalente a blocks_count * blocksize, non ho verificato l'allocazione):

inode_count = (partition_size_in_bytes) / inode_ratio

Nota 1: anche se si fornisce un numero fisso di inode al momento della creazione di FS ( mkfs -N ...), il valore viene convertito in un rapporto, quindi è possibile adattare più inode mentre si estende la dimensione del filesystem.

Nota 2: se ottimizzi questo rapporto, assicurati di allocare significativamente più inode rispetto a quello che prevedi di usare ... non vuoi davvero riformattare il tuo filesystem.

-I dimensioni dell'inode

Questo è il numero di byte che il filesystem assegnerà / riserverà per ciascun inode che il filesystem può avere. Lo spazio viene utilizzato per memorizzare gli attributi dell'inode (leggi Introduzione agli Inodi ). In Ext3, la dimensione predefinita era 128. In Ext4, la dimensione predefinita è 256 (per memorizzare extra_isizee fornire spazio per gli attributi estesi incorporati). leggi Linux: Perché cambiare la dimensione dell'inode?

Nota: X byte di disjkspace sono allocati per ogni inode allocato, sia libero che usato, dove X = dimensione dell'inode.


5

byte per inode determina il numero di inode creati per quel file system; inode-size determina quanto è grande ciascuno di questi inode.

Hai bisogno di molti inode se intendi mettere molti file piccoli (e / o molte directory) sul filesystem.

AFAIK, hai davvero bisogno di inode più grandi della dimensione predefinita di 256 byte se vuoi memorizzare attributi estesi per i tuoi file. psusi dice nei commenti che ciò non è corretto.


4
Gli attributi effettivamente estesi sono memorizzati nel proprio blocco anziché nell'inode, quindi non è necessario un inode più grande per essi. C'erano alcune patch fluttuanti nelle mailing list piuttosto recentemente per aggiungere finalmente la possibilità di memorizzare gli attributi estesi nell'inode se fossero abbastanza piccoli da adattarsi, ma se avessero ancora colpito la linea principale, sarebbe stato molto di recente.
psusi,

1

Schema del filesystem estremamente approssimativo:

|_|__inodes__|_______________________DATA_________________________________|
  • inode-ratio / bytes-per-inode = quantità di inode per l' area DATA
  • inode-size = dimensione di ciascun inode nella inode zona

0

Mi è piaciuta molto la risposta di sjas, dà l'essenza della differenza.

Questa è solo la mia espansione (poiché non posso commentare o votare, solo a partire da questo stackexchange) e volevo una risposta per me dichiarata in modo equilibrato in termini non tecnici comprensibili all'utente che deve prendere la decisione durante il volume di dati installazione ma non necessariamente conoscere tutti i dettagli dietro l'implementazione.

Personas / Objects: - volume (i) di dati nei dispositivi di archiviazione - file nel volume (i) - dispositivi di memorizzazione, sono formattati e forniscono blocchi di byte e i loro indirizzi - posizioni dei file nella memoria

Azioni: creazione / eliminazione / ridenominazione di file e cartelle dal sistema operativo nella memoria, lettura / scrittura / spostamento dei file, modifica delle autorizzazioni, ecc.

Il file di dimensioni di N byte deve essere creato in "blocchi" (blocchi). Sebbene teoricamente si possa pensare che i file possano essere gestiti come sequenze di singoli byte (logicamente possono) tutto ciò di cui avremmo bisogno per gestire i file nello spazio sarebbe un indice designato che indichi alcune proprietà dei file (nome ecc.) E da dove inizia ogni file la memoria. Tuttavia, a causa del modo in cui l'hardware è progettato con i "bus" e i "blocchi" e le considerazioni sulle prestazioni, questi "blocchi" hanno dimensioni particolari e un multiplo della dimensione dei blocchi del supporto (ad es. 512 byte, 4096 byte) e sono gestito dal livello di inode che dice al livello successivo le posizioni dei file e come i blocchi vengono uniti quando devono essere trovati, caricati in memoria ecc.

Se uno aveva un grande rotolo di carta (volume) e doveva progettare un archivio di informazioni per documenti costituiti da pagine (di caratteri o frammenti di informazioni) per l'archiviazione di documenti multipagina, è necessario un indice (per trovare documenti), spazio di archiviazione per le pagine (con alcune semplici posizioni delle pagine). Nel meccanismo di fascicolazione Unix (inode) e effettivo taglio in pagine. dimensione inode è la dimensione della voce di indice (più o meno) byte per inode è la dimensione della pagina

Effetti della modifica delle due impostazioni in questione:

changin inode-size - di solito non è necessario cambiare, attenersi al valore predefinito (come per il link pubblicato nella precedente risposta a una discussione)

byte per inode: influisce sul numero massimo di file che è possibile creare nel volume (eventualmente prestazioni e "spreco" di byte non utilizzati)

Tornando all'analogia del rotolo di carta: immagina di dover scrivere e archiviare un documento di dimensioni particolari (un file) in un tale sistema (o molti documenti di varie dimensioni) - se le dimensioni della pagina, che sono presunte durante il "sistema di scrittura e archiviazione "definizione e non flessibile, è lo stesso documento che potrebbe richiedere molte pagine, se le dimensioni della pagina" di sistema "sono molto grandi e le dimensioni del documento sono ridotte, allora si potrebbe potenzialmente sprecare molta carta avendo spazi vuoti e adattando piccoli file in una pagina. Se la dimensione della pagina è grande - ci sono meno pagine che devono essere utilizzate per il documento ma potrebbero esserci molti "spazi vuoti sprecati" nell'ultima pagina utilizzata. Quindi tutto dipende ... dalla dimensione dei file che verranno utilizzati e da quanti. L'altra considerazione è la velocità di trovare e portare il documento di molte pagine.

Spero abbia senso (lo fa per me) e per favore commenta se ho seriamente abusato di qualsiasi parte del design ext o delle opzioni mkfs.

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.