1. LinuxFEST 3/2008
GNU/Linux
Súborové systémy
Prednášajúci: Michal Sedlák
Email: michal6103 at gmail dot com
2. Úvod
Vizuálna téma prezentácie je odvodená od
od témy vytvorenej:
Sakari Koivunen and Henrik Omma
Released under the LGPL license.
29.3.2008 LinuxFEST 3 2/48
3. Obsah
●
Súbory
– typy súborov, atribúty, práva, príkazy
●
Čo je to súborový systém
●
Súborové systémy
– ext2, ext3, ext4, ReiserFS, UnionFS....
– prečo ďalšie FS
– rozdiely
29.3.2008 LinuxFEST 3 3/48
4. Úvod
“Na UNIX-ovom systéme je všetko súbor, a
ak niečo nie je súbor, tak je to proces“
V Plan9, Inferno OS je úplne všetko súbor
29.3.2008 LinuxFEST 3 4/48
5. Typy súborov
michal@backup:~/linuxfest$ ls -l
total 172
drwxr-xr-x 2 michal michal 4096 2008-03-28 13:19 adresar
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hl-osnova.odt
-rw-r--r-- 1 michal michal 100462 2008-03-19 19:59 Linuxfest.tar.gz
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 osnova.odt
lrwxrwxrwx 1 michal michal 10 2008-03-28 13:19 sl-osnova.odt ->
osnova.odt
●
d Directory ●
r read list directory
●
l Link ●
w write
●
c Character special file ●
x execute recurse directory
●
s Socket
●
p named Pipe (FIFO)
●
b Block device
29.3.2008 LinuxFEST 3 5/48
6. s,S,t,T
●
t,T - sticky bit
– súbor - Linux ignoruje sticky bit na súboroch
– adresár - súbory môže mazať a
premenovávať len vlastník súborov
●
s,S - Set User ID, Set Group ID
– SUID,SGID súbor – súbor sa spustí s právami
vlastníka, alebo skupiny súboru
– SGID adresár – súbory vytvorené vo vnútri
adresára budu mat nastavenú skupinu ako
tento adresár (zdieľanie súborov)
29.3.2008 LinuxFEST 3 6/48
7. d - Adresár, priečinok,
zložka
/bin programy zdielané užívateľmi a rootom
/boot Inicializačné súbory, kernel, popripade grub a
jeho nastavenia (vmlinuz, initrd.gz).
/dev referencie na hardvér, reprezentovaný súbormy
/etc konfiguračné súbory - Editable Text
Configuration Dennis Ritchie tvrdí, že to je
skratka "et cetera"
/home užívateľské adresáre
/initrd bootovacie skripty (iba v niektorych distrách)
/lib knižnice potrebné na beh programov
/lost+found súbory obnovené diagnostickými nástrojmy
/misc rôzny účel
/media pripojené periférie, cd-rom, usb kľúč, mp3 player
29.3.2008 LinuxFEST 3 7/48
8. d - Adresár, priečinok,
zložka
/opt treťostranný softvér
/proc virtuálny filesystem s informáciami o
systémových zdrojoch
/root domáci adresár užívateľa root
/sbin systémové programy
/tmp dočasné súbory, maže sa pri reboote
/usr užívateľské programy, knižnice, dokumentácia
/var premenlivé súbory, logy, databázy, print spooler,
mail queue
29.3.2008 LinuxFEST 3 8/48
9. c - Špeciálne znakové súbory
●
väčina je v /dev
/dev/null prijme a zruší akekoľvek dáta
/dev/full vždy plné zariadenie
/dev/loop loopback disk device
/dev/zero generuje prúd núl (NUL)
/dev/random generuje pseudonáhodné čísla (blok)
/dev/urandom generuje pseudonáhodné čísla
29.3.2008 LinuxFEST 3 9/48
10. l – symbolická linka
●
Soft link
– obsahuje meno a cestu iného súboru
– ln -s meno1 meno2
●
Hard link
– hard link je pointer na inode vo filesystéme
– nie je možné spraviť hardlink na iný
filesystem
– ln meno1 meno2
29.3.2008 LinuxFEST 3 10/48
11. hard vs. soft
michal@backup:~/linuxfest$ ls -l
total 172
drwxr-xr-x 2 michal michal 4096 2008-03-28 13:19 adresar
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hardlink-osnova.odt
-rw-r--r-- 1 michal michal 100462 2008-03-19 19:59 Linuxfest.tar.gz
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 osnova.odt
lrwxrwxrwx 1 michal michal 10 2008-03-28 13:19 softlink-osnova.odt
-> osnova.odt
michal@backup:~/linuxfest$ ls -lL
total 204
drwxr-xr-x 2 michal michal 4096 2008-03-28 13:19 adresar
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hardlink-osnova.odt
-rw-r--r-- 1 michal michal 100462 2008-03-19 19:59 Linuxfest.tar.gz
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 osnova.odt
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 softlink-osnova.odt
29.3.2008 LinuxFEST 3 11/48
12. hard vs. soft
michal@backup:~/linuxfest$ ls -l
total 172
drwxr-xr-x 2 michal michal 4096 2008-03-28 13:19 adresar
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hl2-osnova.odt
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hl-osnova.odt
-rw-r--r-- 1 michal michal 100462 2008-03-19 19:59 Linuxfest.tar.gz
lrwxrwxrwx 1 michal michal 10 2008-03-28 13:19 sl-osnova.odt ->
osnova.odt
michal@backup:~/linuxfest$ ls -lL
total 172
drwxr-xr-x 2 michal michal 4096 2008-03-28 13:19 adresar
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hl2-osnova.odt
-rw-r--r-- 2 michal michal 32226 2008-03-19 19:59 hl-osnova.odt
-rw-r--r-- 1 michal michal 100462 2008-03-19 19:59 Linuxfest.tar.gz
?--------- ? ? ? ? ? sl-osnova.odt
29.3.2008 LinuxFEST 3 12/48
13. s – domain socket
p - pipe
●
slúžia na medzi-procesovú
komunikáciu(IPC) ponad prístupové práva
súborového systému
#Socket
python> import socket
python> my_scoket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
python> my_socket.bind('/tmp/socket_name')
#pipe
python> import os
python> receive,transmit = os.pipe()
29.3.2008 LinuxFEST 3 13/48
14. Súborový systém
●
popisuje akým spôsobom sú uložené
dáta, HDD, FDD, CD-ROM, sieť (SMB,
NFS), procfs...
●
niekoľko vrstiev abstrakcie umožňujúcich
prístup k údajom
●
virtuálny filesystem môže reprezentovať
akékoľvek dáta (WikipediaFS, procfs)
29.3.2008 LinuxFEST 3 14/48
15. Metadáta
●
okrem mena súboru a jeho obsahu sa
ukladajú aj iné dáta
– čas vytvorenia
– čas posledného prístupu
– vlastník (user, group)
– prístupové práva
– veľkosť
– rozšírené atribúty (autor dokumentu, kódovanie)
29.3.2008 LinuxFEST 3 15/48
17. i-node
●
základná jednotka UNIX FS
●
ukazuje na ďalšie i-nody, alebo bloky dát
29.3.2008 LinuxFEST 3 17/48
18. superblok
●
štruktúra obsahujúca základné informácie
o disku
– geometria
– voľné miesto
– umiestnenie prvého i-nodu
●
nevyhnutný pri boote
●
kópie superbloku v každej skupine blokov
29.3.2008 LinuxFEST 3 18/48
19. superblok
backup:/home/michal/linuxfest# dumpe2fs /dev/hda1 | grep -i
superblock
dumpe2fs 1.40-WIP (14-Nov-2006)
Primary superblock at 1, Group descriptors at 2-2
Backup superblock at 8193, Group descriptors at 8194-8194
Backup superblock at 24577, Group descriptors at 24578-24578
Backup superblock at 40961, Group descriptors at 40962-40962
Backup superblock at 57345, Group descriptors at 57346-57346
Backup superblock at 73729, Group descriptors at 73730-73730
Backup superblock at 204801, Group descriptors at 204802-204802
Backup superblock at 221185, Group descriptors at 221186-221186
29.3.2008 LinuxFEST 3 19/48
20. Žurnál
●
synchronizácia - race condition
– zmazanie súboru
●
uvoľnenie miesta na disku
●
odstránenie súboru zo záznamov v priečinku
●
do žurnálu sa zapisujú budúce operácie
– iba atomické zmeny = veľa údajov
– Reiser4 zhlukuje atomické zmeny do
spojitého bloku a tým optimalizuje žurnál
– v prípade pádu je obnova rýchlejšia ako fsck
29.3.2008 LinuxFEST 3 20/48
21. Žurnál nie
●
niektoré FS sú stále konzistentné, resp.
jedinou nekonzistenciou môže byť
stratené miesto (Unix File System)
– soft updates – obmedzí sa množina
asynchrónnych operácií
– zber smetí je väčšinou na pozadí (garbage
collection)
29.3.2008 LinuxFEST 3 21/48
23. ext2
●
1993 - second extended file system
●
natoľko rýchly, že sa používa na
benchmarky
●
/boot, /tmp
● 5% pre roota tune2fs -m 1 /dev/sdXY
●
clean, not clean parameter
● zapnutie žurnálu tune2fs -j /dev/hdXX
29.3.2008 LinuxFEST 3 23/48
24. ext3
●
2001 - Third extended file system
●
ext2 rozšírený o žurnál
●
3 režimy
– Writeback – žurnáluje iba metadáta, urýchly
kontrolu konzistentnosti
– Ordered – čakanie na zápis dát a potom zmena
metadát (metadáta zodpovedajú dátam)
– Journal – plný žurnál, všetko robíme 2x
●
nemá undelete – nuluje pointery na bloky v
i-node zmazaných LinuxFEST 3
29.3.2008
súborov 24/48
25. ext3
●
bez žurnálu rýchlejší ako ext2
●
štandardný FS v mnohých distrách
●
žiaden nástroj na defragmentáciu
●
žiadne kryptovanie
●
žiadna kompresia
●
žiadne chekcksumy v žurnále
●
podpora ACL a extended attributes
29.3.2008 LinuxFEST 3 25/48
26. ext4
●
nestabilný, 2.6.19
●
veľké disky 1024 pebibytes
●
spätne aj dopredne kompatibilný s ext3
●
možnosť predbežnej alokácie súvislých blokov
●
viac ako 32000 adresárov
●
journal checksum
●
online defragmentácia
●
rozlíšenie timestempu 1ns
29.3.2008 LinuxFEST 3 26/48
27. ext2,3,4
Max file size 2 TiB
Max filename size 255 characters
Max volume size 16 TiB
Allowed characters in filenames Any byte except NUL and '/'
Max file size 16GiB – 2TiB
Max filename size 255 bytes
Max volume size 2TiB – 32TiB
Allowed characters in filenames All bytes except NUL and '/'
Max file size 16 TiB
Max filename size
Max volume size 1024 PiB = 1 EiB
Allowed characters in filenames All bytes except NUL and '/'
29.3.2008 LinuxFEST 3 27/48
28. Ako je to s fragmentáciou
Ext2, Ext3, Ext4
●
Ext2-4 sa fragmentuje
●
hlavne keď je na disku málo miesta
●
priemerná fragmentácia je minimálna
– prejavuje sa na vyťažených serveroch
– médiacentrách s obrovskými dátovými tokmi
●
Ako to funguje?
29.3.2008 LinuxFEST 3 28/48
29. ReiserFS
●
2001 - prvý s podporou žurnálu v kernely
●
vysoký výkon
– efektívne ukladanie malých súborov
●
ukladanie koncov do jedného bloku
●
viac súborov v jednom bloku
– veľké množstvo súborov v adresáry
●
vhodný na http cache, mail cache, db
Max file size 8 TiB
Max number of files 232 (~4 billion)
Max volume size 16 TiB
Allowed characters in filenames All bytes except NUL and '/'
29.3.2008 LinuxFEST 3 29/48
30. JFFS2 - Journalling Flash
File System verzia 2
●
navrhnutý pre flash pamäte
– využívanie celého adresného priestoru
– neprepisovanie tých istých miest
●
routery, CF karty, USB kľúče
●
podporuje hard linky
●
kompresia – zlib, rubin, rtime
●
podpora NAND flash (sekvenčné čítanie)
●
garbage collector na pozadí
29.3.2008 LinuxFEST 3 30/48
31. JFFS2 - Journalling Flash
File System verzia 2
●
nedá sa povedať koľko miesta je free
●
pri pripojení je nutné skontrolovať všetky
inode-i (relatívne pomalé pripojenie)
●
nástupca je LogFS určený pre veľké
flashové pamäte
29.3.2008 LinuxFEST 3 31/48
32. SQUASHFS
●
pre flash disky
●
read only (firmvéry, kiosky, LiveCD...)
●
rýchla kompresia – LZMA, GZIP
●
RW v kombinácií s UnionFS
– Slax, BackTrack
– OpenWRT
●
mksquashfs, unsquashfs
29.3.2008 LinuxFEST 3 32/48
33. UnionFS
●
umožňuje vytvoriť RW filesystem ponad
RO základ, stack-ovací FS
●
CD + HDD = jeden filesystém
●
zapisovateľná vetva ma väčšiu prioritu
●
mazanie z RO média cez .wh. súbory,
alebo vlastný oddiel na RW partícií
>mount -t unionfs -o dirs=/media/cdrom,/tmp none /home/cdrw
29.3.2008 LinuxFEST 3 33/48
34. XFS
●
najstarší žurnálovací FS
●
pre high-end servery
●
podpora pre multiprocesorové počítače
●
žurnál – navrnutý tak aby mal minimálny
dopad na výkon
29.3.2008 LinuxFEST 3 34/48
35. Btrfs v0.1
●
iba vo vývoji, inšpirovaný ZFS
●
efektívna práca s malými aj velkými súbormi
(rozsahy – žiadne zoznamy inodov)
●
snapshotting (aj snímky sú živé a môžu byť
upravené), veľmi rýchle
●
copy-on-write
●
kontrolné súčty všetkého
●
nie je potrebný žurnál
●
rýchla kontrola (online kontrola v pláne)
29.3.2008 LinuxFEST 3 35/48
36. Btrfs v0.1
●
online zmeny veľkosti
●
sub-oddiely – viac oddielov v jedno
filesystéme (konverzia Ext3 -> Btrfs)
●
neskôr:
– storage polls – viac zariadení
– mirroring a stripping
– inkrementálne zálohy
Max file size 16 EiB
Max number of files 264
Max filename size 255 bytes
Max volume size 16 EiB
Allowed characters in filenames All bytes except NUL and '/'
29.3.2008 LinuxFEST 3 36/48
37. tmpfs
●
Pseudo filesystém, ktorý uchováva všetky
súbory v RAM
$mount none /mnt/xyz -t tmpfs -o size=100m
29.3.2008 LinuxFEST 3 37/48
38. /sys
●
pseudo filesystém umožňujúci prístup ku
vnútorným premenným kernelu
●
napríklad zoznam modulov
– ls /sys/module
●
umožnil vznik udev
29.3.2008 LinuxFEST 3 38/48
39. /dev
●
pseudo filesystém s dynamickým
zoznamom zariadení
●
každé zariadenie má súbor v /dev
●
minor, major číslo (2.7 dynamické)
●
udev
– mimo kernel, v userspace
– dynamické vytváranie položiek
29.3.2008 LinuxFEST 3 39/48
40. /proc
●
pseudo filesystem zobrazuje informácie o
procesoch
●
/proc/pid
– /proc/PID/cmdline príkaz ktorý proces spustil
– /proc/PID/cwd symlink na pracovny adresár
– /proc/PID/exe symlink na spustiteľný súbor
– /proc/PID/root cesta ku koreňovému
adresáru
29.3.2008 LinuxFEST 3 40/48
41. /proc
– /proc/PID/status obsahuje aktuálny stav
procesu, stav použitej pamäte...
– /proc/PID/task adresár obsahujúci hardlinky
na akékoľvek úlohy ktoré tento proces spustil
– /proc/PID/maps mapa pamäte ukazujúca
ktoré adresy sú viditeľné
●
/proc/cpuinfo
●
/proc/meminfo
●
........
29.3.2008 LinuxFEST 3 41/48
42. loop
●
súbor ako blokové zariadenie
●
napríklad pripojenie image
29.3.2008 LinuxFEST 3 42/48
43. loop
●
Vytvoríme 10 MB súbor
$ dd if=/dev/zero of=file.img bs=1k count=10000
●
●
Spravíme asociáciu file.img a /dev/loop0
$ losetup /dev/loop0 file.img
●
●
Vytvoríme filesystem
$ mke2fs -c /dev/loop0 10000
●
mke2fs 1.35 (28-Feb-2004)
max_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39
Filesystem label=
●
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2512 inodes, 10000 blocks
500 blocks (5.00%) reserved for the super user
...
29.3.2008 LinuxFEST 3 43/48