Articles

Gedetailleerd begrip van Linux-Inodes met voorbeeld

Linux en andere Unix-achtige besturingssystemen behouden consistentie door alles als een bestand te behandelen (zelfs de hardware-apparaten). Het toetsenbord, muis, printers, monitor, harde schijf, processen, zelfs de mappen worden behandeld als bestanden in Linux. De reguliere bestanden bevatten gegevens zoals tekst (tekstbestanden), muziek, video ‘ s (multimediabestanden), enz.

anders dan reguliere gegevens, zijn er enkele andere gegevens over deze bestanden, zoals hun grootte, eigendom, rechten, tijdstempel etc. Deze metadata over een bestand wordt beheerd met een gegevensstructuur die bekend staat als een inode (index node).

Wat is een Inode in Linux?

elk Linux bestand of map (vanuit een technisch oogpunt is er geen echt verschil tussen hen) heeft een inode, en deze inode bevat alle metadata van het bestand (dat wil zeggen alle administratieve gegevens die nodig zijn om een bestand te lezen worden opgeslagen in de inode).

bijvoorbeeld, de inode bevat een lijst van alle blokken waarin een bestand is opgeslagen, de eigenaar informatie voor dat bestand, machtigingen en alle andere attributen die zijn ingesteld voor het bestand.

Inodelimieten zijn per bestandssysteem en worden bepaald tijdens het aanmaken van het bestandssysteem. De maximale mapgrootte is afhankelijk van het bestandssysteem en dus de exacte limiet verschilt.

voor betere prestaties maak uw mappen kleiner door bestanden in submappen te sorteren in plaats van één grote map te hebben.

Wat is een inode-getal?

Inode nummer is ook bekend als index nummer. Een inode is een uniek nummer toegewezen aan bestanden en mappen terwijl het wordt gemaakt. Het inode nummer zal uniek zijn voor het gehele bestandssysteem.

een inode is een datastructuur op een traditioneel UNIX-stijl bestandssysteem zoals ext3 of ext4. opslaan van de eigenschappen van een bestand en mappen.

Linux extended bestandssystemen zoals ext3 of ext4 onderhouden een array van deze inodes genaamd de inodetabel. Deze tabel bevat een lijst van alle bestanden in dat bestandssysteem. De individuele inodes in de inodetabel hebben een uniek getal (uniek voor dat bestandssysteem) dat het inodenummer wordt genoemd.

de volgende informatie wordt opgeslagen in inode:

  • bestandstype: regular file, directory, pipe etc.
  • rechten voor dat bestand: read, write, execute
  • link count: the number of hard link relative to an inode
  • User ID: owner of file
  • Group ID: group owner
  • Grootte van bestand: or major/minor number in case of some special files
  • Time stamp: access time, modification time and (inode) change time
  • attributen: onveranderbaar’ bijvoorbeeld
  • Access control list: permissions for special users/groups
  • link naar locatie van bestand
  • andere metagegevens over het bestand

merk op dat de inode niet de naam van het bestand maar alleen de inhoud ervan opslaat.

Diagram van inode-gegevensstructuur

hoe inode in Linux te controleren

Als u inodes wilt bekijken, op elk ext-bestandssysteem kunt u onderstaande commando ‘ s gebruiken om controleer de eigenschappen van het bestandssysteem en de bestanden die worden gebruikt in het.

A. bestandsgegevens tonen

u kunt de inode-gegevens op een bestand of map weergeven met het commando stat.

u moet de naam van het bestand als volgt aangeven::

De Stat-uitvoer vertelt u de verschillende tijdstempels van het bestand, zijn eigendom en rechten, en waar het is opgeslagen. De gegevens van het bestand worden bewaard in het schijfblok, dat wordt weergegeven in de uitvoer van het stat-commando van de inode.

u kunt ervoor kiezen om alleen het inode-nummer van een bestand weer te geven met de --format optie zoals hieronder:

# stat --format=%i hello530461

b. Indexaantal bestanden afdrukken

het commando ls wordt gebruikt om informatie over bestanden en mappen weer te geven. De -i optie met ls toont het inode nummer van elk bestand. We kunnen het combineren met -l optie om informatie in detail weer te geven

# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 drwxr-xr-x 3 root root 4096 Apr 29 00:29 environments

de eerste kolom geeft het inode nummer. U kunt de inode van een bepaald bestand weergeven zoals hieronder:

# ls -i continue.sh 519450 continue.sh

c. Inode-informatie van het bestandssysteem weergeven

standaard vat het DF-commando de beschikbare en gebruikte schijfruimte samen. U kunt in plaats daarvan een rapport ontvangen over beschikbare en gebruikte inodes door de optie -i of --inodes aan te geven.

deze informatie kan nuttig zijn als een partitie heel veel kleine bestanden heeft, die de beschikbare inodes sneller kunnen uitputten dan de beschikbare schijfruimte.

d. Toon de inhoud van het bestandssysteem superblok

u kunt tune2fs -l commando gebruiken om alle informatie met betrekking tot inode weer te geven.

# tune2fs -l /dev/sda6 | grep inodeFilesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks

e. Manipuleer de metagegevens van het bestandssysteem

u kunt de inhoud van een inode zien zoals deze bestaat op een Ext4-bestandssysteem met het debugfs-Commando. Je moet het stat commando gebruiken dat beschikbaar is in de file system debugger om de inhoud van de inode te tonen. Als u klaar bent, gebruikt u exit om de debugfs-omgeving te sluiten.

zorg ervoor dat bestanden op het bestandssysteem niet toegankelijk zijn tijdens het werken in debugfs. U zou moeten overwegen het bestandssysteem opnieuw aan te passen met mount -o remount /yourfilesystem

u kunt debugfs gebruiken om een bestand ongedaan te maken door de inode te gebruiken en een bestand

Inode structuur aan te geven voor map

zoals hierboven vermeld, worden de mappen in Linux ook behandeld als bestanden. Directory is een speciaal bestand dat een bestandsnaam toewijst aan het inode-nummer (deze toewijzing wordt directory entry of dentry genoemd). Dus als we zeggen dat een directory bestanden en andere directory ’s bevat, bedoelen we dat deze directory die bestanden en directory’ s in kaart brengt (directory ‘ s zijn speciale bestanden, dus ze moeten ook in kaart brengen naar hun inode-nummers) naar hun inode-nummers.

Dit is de reden waarom een map GEEN twee bestanden met dezelfde naam kan bevatten, omdat het geen naam kan toewijzen met twee verschillende inodenummers.

# ls -ld test/drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/

als een bestand wordt toegewezen aan zijn inode door zijn bovenliggende map, hoe wordt dan de hoogste map, (dwz / directory) toegewezen aan zijn inode? Het inode nummer van / map is vast, en is altijd 2.

koppelingen en indexnummer in Linux

In de uitvoer vanls -l, is de kolom na de machtigingen en vóór eigenaar het aantal koppelingen. Link count is het aantal harde links naar een bestand. Om harde links te begrijpen, beginnen we met links. Een link is een verwijzing naar een ander bestand.

in de Linux wereld bestaan twee soorten links:

A. symbolische links (of soft links)

de symbolische link is een apart bestand waarvan de inhoud verwijst naar het gelinkte bestand. Om een symbolische link te maken, gebruik je het ln commando met de optie -s. Als je het ln commando gebruikt, zorg er dan voor dat je eerst refereert naar de naam van het originele bestand en vervolgens naar de naam van de link die je wilt maken.

# ln -s /home/bobbin/sync.sh filesync

Hier is ‘ filesync ‘een symbolische link naar’ sync.sh zie het als een kortere weg. Het bewerken van’ filesync ‘ is als direct het originele bestand bewerken, maar het is echt wat er gebeurt. Als we het originele bestand verwijderen of verplaatsen, wordt de link verbroken en is ons bestand ‘filesync’ niet langer beschikbaar.

het ls -l commando laat zien dat het resulterende bestand een symbolische link is. Dit wordt aangegeven door de letter l in de eerste positie van de ls -l uitvoer en ook door de pijl aan het einde van de lijst, die het bestand aangeeft waarnaar de naam verwijst.

# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh

de inhoud van een symbolische link is alleen de naam van het doelbestand. U kunt zien dat de rechten op de symbolische link volledig open zijn. Dit komt omdat de rechten niet worden beheerd

wanneer u de symbolische link met het oorspronkelijke bestand vergelijkt, zult u een duidelijk verschil tussen hen opmerken.

het originele bestand is slechts een naam die direct verbonden is met de inode, en de symbolische link verwijst naar de naam. De grootte van de symbolische link is het aantal bytes in de naam van het bestand waarnaar het verwijst, omdat er geen andere informatie beschikbaar is in de symbolische link.

B. harde koppelingen

om een idee te krijgen van wat een harde koppeling is, is het belangrijk om te begrijpen dat de identiteit van een bestand zijn inode nummer is, niet zijn naam. Een harde link is een naam die verwijst naar een inode. Het betekent dat als ‘ file1 ‘een harde link heeft met de naam’ file2′, dan verwijzen beide bestanden naar dezelfde inode. Dus, wanneer je een harde link voor een bestand maakt, alles wat je echt doet is een nieuwe naam toevoegen aan een inode.

om dit te doen, gebruik je het ln commando zonder optie.

# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro

laten we nu de twee bestanden vergelijken

Het interessante aan harde links is dat er geen verschil is tussen het originele bestand en de link: het zijn slechts twee Namen die verbonden zijn met dezelfde inode.

zoals u moet hebben opgemerkt, zijn harde koppelingen geen speciale bestanden, in tegenstelling tot soft links. Nu, link count is het nummer een bestand is hard gekoppeld. Dus een link telling toeneemt na het maken van een harde link zoals je kunt zien in de bovenstaande figuur. Deze harde links hebben twee beperkingen:

  • de mappen kunnen niet hard gekoppeld worden. Linux staat dit niet toe om de acyclische boomstructuur van directory ‘ s te behouden.
  • een harde koppeling kan niet gemaakt worden tussen bestandssystemen. Beide bestanden moeten op dezelfde bestandssystemen staan, omdat verschillende bestandssystemen verschillende onafhankelijke inode tabellen hebben (twee bestanden op verschillende bestandssystemen, maar met hetzelfde inode nummer zullen verschillend zijn).

hoe vind je een harde link in Linux

je kunt alle bestandsnaam ophalen die naar een inode-nummer verwijst. Het betekent dat je harde links kunt ophalen omdat het het enige type link is waar we een aantal bestandsnamen kunnen hebben die naar dezelfde inhoud verwijzen (inode). U kunt dit doen met de -inum optie van het commando vinden, zoals hieronder

# find / -inum 517333/home/bobbin/sync.sh/root/synchro

Met deze, kunt u weten welke bestandsnamen punt om de gegevens zo is, haalt u alle hard link in vergelijking met een specifieke inode nummer

Linux bewerkingen met bestanden en de relatie met inodes

de Meeste van de activiteiten (zoals kopie) uitgevoerd op zachte banden zullen van invloed zijn op de werkelijke gekoppelde bestand (met uitzondering van rm of mv commando ‘ s, die verwijderen (of verplaatsen) zachte koppeling zelf)

Hier zijn een aantal bestanden in die inodes spelen een belangrijke rol:

een. bestanden kopiëren

wanneer we een bestand kopiëren, wordt een nieuw bestand met een nieuwe inode aangemaakt.

# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile

b. bestanden verplaatsen

bij het verplaatsen tussen bestandssystemen gaat het MV-Commando verder als het CP-commando hierboven, met uitzondering dat het oorspronkelijke bestand van de locatie wordt verwijderd. Maar bij het verplaatsen binnen een bestandssysteem, verandert de inode niet, alleen de directory mapping van de inode wordt gewijzigd, de werkelijke gegevens op de harde schijf (inhoud van het bestand) beweegt niet.

# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt

laten we nu het bestand verplaatsen en het resultaat controleren

# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt

c. bestanden verwijderen

wanneer het rm-commando wordt gegeven, controleert het eerst het aantal koppelingen van het bestand. Als het aantal koppelingen groter is dan 1, dan verwijdert het die directory ingang en vermindert het aantal koppelingen. Toch zijn er gegevens aanwezig, noch is de inode beïnvloed. En als het aantal koppelingen 1 is, wordt de inode verwijderd uit de inodetabel, wordt het inode-nummer vrij en worden de gegevensblokken die dit bestand bevatte toegevoegd aan de lijst met vrije gegevensblokken.

# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink

laten we het bestand verwijderen en het resultaat controleren

# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile

u kunt zien dat het aantal inode is verminderd.

conclusie

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *