Shrnutí:
Vysvětlení tabulky shrnutí: https://fit-wiki.cz/_media/%C5%A1kola/p%C5%99edm%C4%9Bty/bi-osy/inodes.pdf
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 |
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
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é)
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.
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 =
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:
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
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í:
Kolik datových bloků se musí zapsat?
Víme,že soubor zabere 151265 bloků (games.
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:# 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
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.
Kolik i-nodů se musí zapsat?
-> 2.
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.
-> Potřebujeme načíst 2068260 bloků
Kolik datových bloků se musí zapsat?
-> Musíme zapsat 2068250 dat. bloků.
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:# 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
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.
Kolik i-nodů se musí zapsat?
Změní se adresář src a home (hodnota mtime)
-> 2.
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.
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.
Kolik operací alokování/uvolňování bloků a i-nodů musí být provedeno?
MV: 0.
LN -s příkaz:# 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
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)
Kolik i-nodů se musí zapsat?
Vytvoření i-node + upravení mtime ve složce pavel.
-> 2.
Kolik datových bloků se musí načíst?
Načítáme jenom druhý adrešář:
/
/home
/home/pavel/
-> 3
Kolik datových bloků se musí zapsat?
zapíše se /home/pavel + /home/pavel/f.link (link to ...)
Musí se zapsat 2 datové bloky.
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.