I-node


Příklad zadání:

Bod připojení Disk Typ systému souborů Parametry připojení
/ /dev/sda1 UFS read/write, noatime
/home /dev/sda2 UFS read/write, noatime
/fat1 /dev/sdb1 FAT32 read/write
/fat2 /dev/sdc1 FAT32 read/write
  • Parametr atime znamená, že se u souborů/adresářů aktualizuje čas přístupu při každém přístupu.
  • Parametr noatime znamená, že se u souborů/adresářů neaktualizuje čas přístupu.
  • Systém souborů FAT32 nepoužívá informaci o přístupu, tedy atribut atime/noatime není použit.
  • Při výpočtu používáme jednotky KiB, MiB, ..., platí: 1 KiB = 1024 B, 1MiB = 1024 KiB, ...

Systém souborů UFS1 pracuje s i-nody, které mají 12 odkazů přímých a po
jednom jednonásobném, dvojnásobném a trojnásobném nepřímém odkazu na
datové bloky. Velikost datového bloku je 2 KiB, odkazy na datový blok jsou 32-
bitové. Atributy i-nodu jsou: typ souboru, velikost souboru, čítač pevných linků,
přístupová práva, vlastník a skupina, čas modifikace, čas přístupu, symbolický
link se vždy zapisuje do datového bloku. Informace o volných objektech UFS
(i-nodech a blocích) jsou uložené v bitové mapě na disku, která se při připojení
systému souborů načetla do paměti.
Systém souborů FAT32 pracuje s datovými bloky (clustery) o velikosti 2 KiB a
odkazy na clustery jsou 32-bitové.
Předpokládejte, že obsah adresáře nepřesáhne velikost bloku 2 KiB. Dále předpokládejte, že v paměti jsou načtené pouze superbloky/boot sektory jednotlivých připojených disků. Dále pro jednoduchost předpokládáme, že operace
uspějí (cesty existují, soubory lze číst/zapisovat, je dostatek místa, všimněte si,
že operace provádíme pod uživatelem root, tedy nemáme omezená na přístupová
práva). Pro zpracovávaný soubor víte, že zobrazení by vypadalo takto:

CP příkaz:

# ll /var/include/dev/share/boot/boot
-rw-rw-rw- 1 root root 309788851 Feb 4 12:57 ntpd.conf
# cp /var/include/dev/share/boot/boot/ntpd.conf /home/log/boot/games/ld.so.conf

  1. Kolik i-nodů se musí načíst?

    /
    /var
    /var/include
    /var/include/dev
    /var/include/dev/share
    /var/include/dev/share/boot
    /var/include/dev/share/boot/boot
    /var/include/dev/share/boot/boot/ntpd.conf
    /home
    /home/log
    /home/log/boot
    /home/log/boot/games

    Potřebujeme načíst 12 i-nodů (načítáme všechny adresáře plus kopírovaný soubor, zde pozor na to, že se to chová jako množina - nebudeme načítat znovu "/" protože už je to načtené)

  2. Kolik i-nodů se musí zapsat?
    Jeden i-node se přepíše kvůli aktualizaci hodnoty adresáře games a jeden se vytvoří za nový soubor (ten který byl zkopírován) - ld.so.conf
    Zapíšou se 2 i-nody.

  3. Kolik datových bloků se musí načíst?
    Za první složku musíme načíst 7 datových bloků:

    /
    /var
    /var/include
    /var/include/dev
    /var/include/dev/share
    /var/include/dev/share/boot
    /var/include/dev/share/boot/boot
    /var/include/dev/share/boot/boot/ntpd.conf

    Za druhou načteme 4 bloky (zase si dáváme pozor, aby tam nebyly duplikáty):

    /home,
    /home/log,
    /home/log/boot,
    /home/log/boot/games


    Převedeme 2 KiB na b:
    2 KiB = B = B = b = b.

    Odkazy na clustery mají 32 b, do jednoho bloku se nám jich tedy vejde:
    .

    Víme, že velikost souboru je 309788851 B a z toho si spočítáme: bloků o velikosti 2KiB.

    Nyní potřebujeme spočítat počet nepřímých bloků. I-node obsahuje 12 přímých odkazů na datové bloky, ty použijeme jako první. Zbývá nám teda datových bloků. Jak jsme již spočítali, jeden nepřímý odkaz (prní úrovně) dokáže pojmout přímých odkazů. Použijeme jej tedy a nyní nám zbývá zapsat datových bloků. Na jejich zapsání použijeme jeden nepřímý odkaz druhé úrovně, analogicky jako v předchozím případě tento odkaz může adresovat . Potřebujeme zjistit, kolik z nich reálně potřebujeme využít: datových bloků. Prvních 294 zaplníme úplně, takže nám zbývá = 213 datových blok, které se nám vejdou do posledního (295.) nepřímého odkazu první úrovně.

    Pro zjištění celkového počtu dat. bloků je potřeba sečíst samotná data souboru, datové bloky pro nepřímou adresaci a datové bloky načtené při procházení adresářů.

    Počet datových bloků k načtení: íářýář

  4. Kolik datových bloků se musí zapsat?
    Víme,že soubor zabere 151265 bloků (). Také víme, že za nepřímou adresaci musíme zapsat 1+1+295 = 297 bloků. Další zápis potřebujeme na aktualizaci oobsahu složky games.

  5. Kolik operací alokování/uvolňování bloků a i-nodů musí být provedeno?
    Hodnota bude totožná jako v 4.


CP příkaz:

  • velikost dat. bloku = 16KiB
  • odkazy = 64b

# ll /var/share/etc/doc/share/local
-rw-rw-rw- 1 root root 33869614059 Jul 28 05:21 run.sh

# cp /var/share/etc/doc/share/local/run.sh /home/share/log/doc/libxml2.so.6

  1. Kolik i-nodů se musí načíst?

    /
    /var
    /var/share
    /var/share/etc
    /var/share/etc/doc
    /var/share/etc/doc/share
    /var/share/etc/doc/share/local
    /var/share/etc/doc/share/local/run.sh

    /home/
    /home/share
    /home/share/log
    /home/share/log/doc

    -> 12.

  2. Kolik i-nodů se musí zapsat?
    -> 2.

  3. Kolik datových bloků se musí načíst?
    -> První složka: 7 bloků, Druhá složka: 4 bloky.

    Velikost bloku:

    Odkaz má 64b, tím pádem do jednoho bloku se nám jich vejde .

    Celková velikost souboru je 33869614059 B.
    bloků

    bloků

    -> Potřebujeme načíst 2068260 bloků

  4. Kolik datových bloků se musí zapsat?
    bloků

    -> Musíme zapsat 2068250 dat. bloků.

  5. Kolik operací alokování/uvolňování bloků a i-nodů musí být provedeno?
    Hodnota bude totožná jako v 4.


MV příkaz:

  • velikost dat. bloku = 2KiB
  • odkazy = 64b

# ll /usr/log/games/dev/src
-rw-rw-rw- 1 root root 3395426 Jun 15 04:49 index.ph

# mv /usr/log/games/dev/src/index.php /var/local/games/home/index.html

  1. Kolik i-nodů se musí načíst?

    /
    /usr
    /usr/log
    /usr/log/games
    /usr/log/games/dev
    /usr/log/games/dev/src

    /var
    /var/local
    /var/local/games
    /var/local/games/home

    -> 10.

  2. Kolik i-nodů se musí zapsat?
    Změní se adresář src a home (hodnota mtime)
    -> 2.

  3. Kolik datových bloků se musí načíst?
    První adresář: 6 bloků, druhý adresář 4 bloky.

    Na rozdíl od cp zde jenom načteme tyto datové bloky a máme klid.

  4. Kolik datových bloků se musí zapsat?
    Stačí zapsat 2 datové bloky, které drží informaci o obsahu adresáře. V prvním adresáři /home soubor odebereme, v /src ho přidáme.

    Musí se zapsat 2 datové bloky.

  5. Kolik operací alokování/uvolňování bloků a i-nodů musí být provedeno?
    MV: 0.

LN -s příkaz:

  • velikost dat. bloku = 2KiB
  • odkazy = 64b

# ll /home/pavel/2018/osy/cl
-rw-rw-rw- 1 root root 56375076079 Aug 12 03:31 f.pdf

# ln -s /home/pavel/2018/osy/cl/f.pdf /home/pavel/f.link

  1. Kolik i-nodů se musí načíst?

    /
    /home/
    /home/pavel/

    -> 3.
    (Na rozdíl od hard linku se vůbec nemusí číst cíl odkazu)

  2. Kolik i-nodů se musí zapsat?
    Vytvoření i-node + upravení mtime ve složce pavel.
    -> 2.

  3. Kolik datových bloků se musí načíst?
    Načítáme jenom druhý adrešář:

    /
    /home
    /home/pavel/

    -> 3

  4. Kolik datových bloků se musí zapsat?
    zapíše se /home/pavel + /home/pavel/f.link (link to ...)

    Musí se zapsat 2 datové bloky.

  5. Kolik operací alokování/uvolňování bloků a i-nodů musí být provedeno?
    -> 2, 1 pro i-node a 1 pro f.link.