Articles

Szczegółowe zrozumienie i-węzłów Linuksa na przykładzie

Linux i inne Uniksopodobne systemy operacyjne zachowują spójność, traktując wszystko jako plik (nawet urządzenia sprzętowe). Klawiatura, mysz, drukarki, monitor, dysk twardy, procesy, a nawet katalogi są traktowane jako pliki w Linuksie. Zwykłe pliki zawierają dane, takie jak tekst (pliki tekstowe), muzyka, filmy (pliki multimedialne) itp.

poza zwykłymi danymi, istnieją inne dane o tych plikach, takie jak ich rozmiar, własność, uprawnienia, znacznik czasu itp. Metadane dotyczące pliku są zarządzane za pomocą struktury danych znanej jako węzeł i-węzeł (index node).

co to jest i-węzeł w Linuksie?

każdy plik lub katalog Linuksa (z technicznego punktu widzenia nie ma między nimi prawdziwej różnicy) ma i-węzeł, a ten i-węzeł zawiera wszystkie metadane pliku (tj. wszystkie dane administracyjne potrzebne do odczytania pliku są przechowywane w I-węźle).

na przykład i-węzeł zawiera listę wszystkich bloków, w których przechowywany jest plik, Informacje o jego właścicielu, uprawnienia i wszystkie inne atrybuty ustawione dla tego pliku.

limity i-węzłów dotyczą systemu plików i są ustalane w czasie tworzenia systemu plików. Maksymalny rozmiar katalogu zależy od systemu plików, a tym samym od dokładnego limitu.

dla lepszej wydajności zmniejsz swoje katalogi, sortując pliki do podkatalogów, zamiast mieć jeden duży katalog.

co to jest numer i-węzła?

numer Inode jest również znany jako numer indeksu. I-węzeł to unikalny numer przypisany do plików i katalogów podczas jego tworzenia. Numer i-węzła będzie unikalny dla całego systemu plików.

i-węzeł jest strukturą danych w tradycyjnym systemie plików typu Unix, takim jak ext3 lub ext4. przechowywanie właściwości pliku i katalogów.

Linux extended filesystems such as ext3 or ext4 present a array of these i-węzły nazywane tabelą i-węzłów. Ta tabela zawiera listę wszystkich plików w tym systemie plików. Poszczególne i-węzły w tabeli i-węzłów mają unikalny numer (unikalny dla tego systemu plików) zwany numerem i-węzła.

następujące informacje są przechowywane w I-węźle:

  • Typ pliku: zwykły plik, katalog, rura itp.
  • uprawnienia do tego pliku: Odczyt, Zapis, wykonanie
  • liczba linków: liczba twardych linków względem i-węzła
  • ID użytkownika: właściciel pliku
  • ID grupy: właściciel grupy
  • Rozmiar pliku: lub numer główny/podrzędny w przypadku niektórych plików specjalnych
  • znacznik czasu: Czas dostępu, czas modyfikacji i (i-węzeł) czas zmiany
  • atrybuty: niezmienny’ na przykład
  • lista kontroli dostępu: uprawnienia dla specjalnych użytkowników/grup
  • link do lokalizacji pliku
  • inne metadane dotyczące pliku

zauważ, że i-węzeł nie przechowuje nazwy pliku, a jedynie jego zawartość.

schemat struktury danych i-węzła

jak sprawdzić i-węzeł w Linuksie

Jeśli chcesz spojrzeć na i-węzły, na dowolnym systemie plików ext możesz użyj poniższych poleceń, aby sprawdzić właściwości systemu plików i plików, które są w nim używane.

A. Wyświetl informacje o danych pliku

możesz wyświetlić dane i-węzła w pliku lub katalogu za pomocą polecenia stat.

musisz podać nazwę pliku w następujący sposób:

wyjście stat mówi o różnych znacznikach czasowych pliku, jego własności i uprawnieniach oraz o tym, gdzie jest przechowywany. Dane Pliku są przechowywane w bloku dysku, co jest pokazane na wyjściu komendy stat i-węzła.

Możesz wybrać listę tylko i-węzłów pliku za pomocą opcji--format jak poniżej:

# stat --format=%i hello530461

b. Drukuj indeks ilość plików

polecenie ls służy do wyświetlania informacji o plikach i katalogach. Opcja-i z ls wyświetla numer i-węzła KAŻDEGO pliku. Możemy połączyć ją z-l opcją szczegółowego wyświetlenia informacji

# 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

Pierwsza kolumna podaje numer i-węzła. Możesz wyświetlić i-węzeł konkretnego pliku, jak poniżej:

# ls -i continue.sh 519450 continue.sh

C. Wyświetl informacje o przestrzeni inode systemu plików

domyślnie polecenie df podsumowuje dostępne i używane miejsce na dysku. Zamiast tego możesz otrzymać raport o dostępnych i używanych i-węzłach, przekazując opcję-i lub--inodes.

informacje te mogą być pomocne, jeśli partycja ma bardzo wiele małych plików, które mogą wyczerpać dostępne i-węzły szybciej niż wyczerpują dostępne miejsce na dysku.

d. wyświetla zawartość superbloku systemu plików

Możesz użyć poleceniatune2fs -l, aby wyświetlić wszystkie informacje związane z i-węzłem.

# 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. manipulowanie meta danymi systemu plików

możesz zobaczyć zawartość i-węzła, jaka istnieje w systemie plików Ext4 za pomocą polecenia debugfs. Musisz użyć polecenia stat dostępnego w debugerze systemu plików, aby wyświetlić zawartość i-węzła. Po zakończeniu użyj exit, aby zamknąć środowisko debugfs.

upewnij się, że pliki w systemie plików nie mogą być dostępne podczas pracy w debugfs. Powinieneś rozważyć ponowne zamontowanie systemu plików za pomocą mount -o remount /yourfilesystem

możesz użyć debugfs, aby przywrócić plik, używając jego i-węzła i wskazując strukturę i-węzła pliku

dla katalogu

jak wspomniano powyżej, katalogi w Linuksie są również traktowane jako pliki. Katalog jest specjalnym plikiem, który mapuje nazwę pliku na jego numer i-węzła (to mapowanie nazywa się wpisem katalogu lub dentry). Kiedy więc mówimy, że katalog zawiera pliki i inne katalogi, mamy na myśli, że ten katalog mapuje te pliki i Katalogi (Katalogi są plikami specjalnymi, więc muszą również mapować do swoich numerów i-węzłów) na ich numery i-węzłów.

jest to powód, dla którego katalog nie może zawierać dwóch plików o tej samej nazwie, ponieważ nie może mapować jednej nazwy z dwoma różnymi numerami i-węzłów.

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

gdy plik jest mapowany do i-węzła przez jego Katalog nadrzędny, to w jaki sposób top most directory (tj./ directory) jest mapowany do i-węzła? Numer i-węzła katalogu / jest stały i zawsze wynosi 2.

linki i numer indeksu w Linuksie

na wyjściuls -l, kolumna po uprawnieniach i przed właścicielem jest liczbą linków. Liczba dowiązań to liczba twardych dowiązań do pliku. Aby zrozumieć twarde linki, zaczynamy od linków. Łącze jest wskaźnikiem do innego pliku.

w świecie Linuksa istnieją dwa rodzaje linków:

a. dowiązania symboliczne (lub miękkie)

dowiązanie symboliczne jest oddzielnym plikiem, którego zawartość wskazuje na plik połączony. Aby utworzyć dowiązanie symboliczne, użyj polecenia ln z opcją -s. Podczas używania polecenia ln upewnij się, że najpierw odwołujesz się do nazwy oryginalnego pliku, a następnie do nazwy łącza, które chcesz utworzyć.

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

tutaj 'filesync’ jest dowiązaniem symbolicznym do 'sync.sh pomyśl o tym jak o skrócie. Edycja 'filesync’ jest jak bezpośrednia edycja oryginalnego pliku, ale tak naprawdę to się dzieje. Jeśli usuniemy lub przeniesiemy oryginalny plik, łącze zostanie zerwane, a nasz plik 'filesync’ nie będzie już dostępny.

polecenie ls -l pokazuje, że wynikowy plik jest dowiązaniem symbolicznym. Jest to oznaczone literą l na pierwszej pozycji wyjścials -l, a także strzałką na końcu listy, która wskazuje plik, do którego odnosi się nazwa.

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

zawartość dowiązania symbolicznego jest tylko nazwą pliku docelowego. Widać, że uprawnienia dowiązania symbolicznego są całkowicie otwarte. Dzieje się tak, ponieważ uprawnienia nie są zarządzane

porównując dowiązanie symboliczne i oryginalny plik, zauważysz wyraźną różnicę między nimi.

oryginalny plik to tylko nazwa, która jest połączona bezpośrednio z i-węzłem, a dowiązanie symboliczne odnosi się do nazwy. Rozmiar dowiązania symbolicznego jest liczbą bajtów w nazwie pliku, do którego się odnosi, ponieważ żadne inne informacje nie są dostępne w dowiązaniu symbolicznym.

b. dowiązania twarde

aby zorientować się, czym jest dowiązanie twarde, ważne jest, aby zrozumieć, że tożsamością pliku jest jego numer i-węzła, a nie jego nazwa. Łącze twarde to nazwa odwołująca się do i-węzła. Oznacza to, że jeśli 'file1′ ma dowiązanie twarde o nazwie 'file2′, to oba te pliki odnoszą się do tego samego i-węzła. Tak więc, gdy tworzysz dowiązanie twarde do pliku, wszystko, co tak naprawdę robisz, to dodajesz nową nazwę do i-węzła.

aby to zrobić, użyj polecenia LN bez opcji.

# 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

teraz porównajmy te dwa pliki

interesujące w przypadku linków twardych jest to, że nie ma różnicy między oryginalnym plikiem a linkiem: są to tylko dwie nazwy połączone z tym samym i-węzłem.

jak trzeba zauważyć, w przeciwieństwie do miękkich linków, twarde linki nie są specjalnymi plikami. Teraz liczba linków to liczba, z którą plik został ciężko połączony. Tak więc liczba linków wzrasta po utworzeniu twardego łącza, jak widać na powyższym rysunku. Te twarde linki mają dwa ograniczenia:

  • katalogi nie mogą być ciężko połączone. Linux nie pozwala na utrzymanie acyklicznej struktury drzewa katalogów.
  • dowiązanie twarde nie może zostać utworzone przez system plików. Oba pliki muszą znajdować się na tych samych systemach plików, ponieważ różne systemy plików mają różne niezależne tabele i-węzłów (dwa pliki na różnych systemach plików, ale o tym samym numerze i-węzłów będą różne).

jak znaleźć twardy link w Linuksie

możesz pobrać wszystkie nazwy plików, które wskazują na numer i-węzła. Oznacza to, że możesz pobrać dowiązania twarde, ponieważ jest to jedyny rodzaj dowiązania, w którym możemy mieć niektóre nazwy plików, które wskazują na tę samą zawartość (i-węzeł). Możesz to zrobić za pomocą -inum opcji Znajdź polecenie jak poniżej

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

dzięki temu możesz wiedzieć, które nazwy plików wskazują na informacje o danych, więc pobierz wszystkie twarde łącza względem określonego numeru i-węzła

operacje Linuksa z plikami i jego związek z i-węzłami

większość operacji (takich jak kopiowanie plików) wykonywane na miękkich łączach wpłynie na rzeczywisty połączony plik (z wyjątkiem poleceń RM lub MV, które usuwają (lub przenoszą) miękkie łącze)

oto niektóre operacje na plikach, w których i-węzły odgrywają istotną rolę:

a. Kopiuj pliki

Kiedy kopiujemy plik, tworzony jest nowy plik z nowym i-węzłem.

# 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. przenoszenie plików

podczas przenoszenia między systemami plików polecenie MV przebiega jako polecenie CP powyżej, z wyjątkiem, że oryginalny plik zostanie usunięty z jego lokalizacji. Ale podczas poruszania się w systemie plików, i-węzeł nie zmienia się, zmienia się tylko mapowanie katalogu i-węzła, rzeczywiste dane na dysku twardym (zawartość pliku) nie przemieszczają się.

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

teraz przenieśmy plik i sprawdźmy wynik

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

C. Usuń pliki

Po wydaniu polecenia rm, najpierw sprawdza liczbę linków pliku. Jeśli liczba linków jest większa niż 1, usuwa ten wpis w katalogu i zmniejsza liczbę linków. Mimo to, dane są obecne, ani nie ma wpływu na i-węzeł. A gdy liczba linków wynosi 1, I-węzeł jest usuwany z tabeli i-węzłów, numer i-węzłów staje się wolny, a bloki danych, które zajmował ten plik, są dodawane do listy wolnych bloków danych.

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

usuń plik i sprawdź wynik

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

możesz zobaczyć, że liczba i-węzłów jest zmniejszona.

wnioski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *