710 likes | 995 Views
Datotečni sistem LINUX. Datotečni sistem. Ap likacije. Sistemske knjižnice (libc). Vmesnik sistemskih klicev. Vhod-izhod. Vezano na procese. Datotečni sistemi. razvrščevalnik. M oduli. Omreženje. Upravljanje s pomnilnikom. Gonilniki naprav. Medprocesna komunikacija.
E N D
Datotečni sistem Aplikacije Sistemske knjižnice (libc) Vmesnik sistemskih klicev Vhod-izhod Vezano na procese Datotečni sistemi razvrščevalnik Moduli Omreženje Upravljanje s pomnilnikom Gonilniki naprav Medprocesna komunikacija Arhitekturno odvisna koda Aparaturna oprema
Sistemski klici za delo z dat. sistemom • sje koda napake • diridentificira tok direktorija • direntje element direktorija (directory entry)
Datotečni sistemi • S stališča uporabnika izgleda datotečni sistem LINUX kot hierarhično organizirano drevo direktorijev. • Interno skriva jedro podrobnosti in upravlja z različnimi datotečnimi sistemi preko abstraktne plasti, ki ji pravimo virtual file system (VFS). • Pri načrtovanju sistema VFS so se zgledovali po principih objektne usmerjenosti in ga sestavljata dve komponenti: • Skupina definicij, kako naj izgleda objekt file • Struktureinode-objectin the file-objectpredstavljajo posamezne datoteke • file systemobjectpredstavlja celoten datotečni sistem • Plast programske opreme za rokovanje s temi objekti.
Upravljanje z datotekami • V sistemu LINUX je datoteka preprosto stvar, ki predstavlja zaporedje bytov • Zato so vse datoteke • Navadna datoteka je datoteka; direktorij je datoteka, omrežna kartica, trdi disk, katerakoli naprava so datoteke, saj posredujejo zaporedja bytov • Linux podpira 5 tipov datotek • Navadne datoteke (text file, c++ file, etc) • direktoriji • simbolični(mehki) linki • Posebne datoteke (naprave) • Imenovane cevi(FIFO)
Pojem datotek in direktorijev Koncept preproste datoteke in direktorija je podoben, kot v DOS Modra so imena direktorijev, označena tudi s črko d na začetku vrstice
Linki in posebne datoteke • Simbolični (mehek) link • To v resnici ni datoteka, je le povezava na drugo datoteko • Omogoča, da damo datoteki še drugo ime, ne da bi jo podvojili • Posebna datoteka (naprava) • Vsaka aparaturna naprava, tipkovnica, trdi disk, CD-ROM, itdima asociacijo z eno posebno datoteko • Posebne datoteke običajno pomnimo v direktoriju /dev • Aplikacije lahko berejo ali zapisujejo v naprave tako, da berejo oziroma pišejo v njim ustrezne posebne datoteke. Tako je metoda dostopa neodvisna od tipa naprave • Razlikujemo dva tipa: znakovne posebne datoteke (tipkovnica, tiskalnik,...) in blokovne posebne datoteke (trdi disk, ..)
Še o linkih Ukaz, ki postavi simbolični link z imenom anotherCUI na datoteko z imenom CUI Velikost datoteke le 6 bytov Simbolični link začenja s črko l
Posebne datoteke Nekatere od posebnih datotek v /dev fd0 – floppy disk md0 – CD-Rom Obe sta blokovni napravi, zato črka b Nekatere so znakovne naprave, zato črka c
Struktura datotečnega sistema V skladu s standardom (FSSTND) mora imeti vsak sistem LINUX množico standardnih datotek in direktorijev root / direktoriji bin lib lost+found mnt opt root sbin var boot dev etc proc home tmp usr file … dlun guest bin lib local fd hd hd group passwd
Pomen direktorijev (1) • Root Directory ( / ) • Vrh datotečnega sistema. Podobno kot \ v DOS • /bin • Vsebuje binarno (izvršljivo) kodo večine ukazov Linux, na primer: bash, cat, cp, ln, ls, itd. • /boot • Vsebuje datoteke, potrebne za zagon sistema Linux, vključno datoteko z jedrom Linux (Linux kernel). Primer vmlinuz-2.6.22-14 • /dev • Vsebuje posebne datoteke za naprave, na primer: fd0, hd0, itd.
Pomen direktorijev (2) • /etc • Vsebuje datoteke in direktorije, specifične za računalnik, na primer o konfiguraciji sistema • /etc/passwd • Ta datoteka vsebuje “login” podatke o uporabnikih sistema • Za vsakega uporabnika pomnimo eno vrstico v naslednjem formatu: login_name : dummy_or_encrypted_password : user_ID : group_ID : user_info : home_directory : login_shell
Pomen direktorijev (3) • /home • Vsebuje domače direktorije posameznih uporabnikov sistema, na primer janez, metka, guest ipd. • /lib • Pomni pomembne knjižnice za prevajalnike različnih jezikov • /lost+found • Vsebuje datoteke sistema, ki niso navezane na noben direktorij. • Sistemski administrator mora odločiti, kaj s temi datotekami
Pomen direktorijev (4) • /mnt • To uporablja sistemski administrator za začasno montiranje datotečnih sistemov z ukazom mount • Pred uporabo katerekoli naprave, mora biti ta montirana na sistem zaradi registracije • Primer, po montiranju CD-ROM, bo datotečni sistem z njega preslikan v direktorij /mnt/cdrom • Nato lahko uporabnik bere in piše datoteke na CD ROM z dostopom preko tega direktorija • Podobno preslikavi črke pogona na CD ROM pri OS Windows • To ni isto kot posebne datoteke v /dev. Posebna datoteka je le mesto kamor prenašamo ali pomnimo podatke. Nima koncepta datotečnega sistema
Pomen direktorijev (5) • /opt • Uporaba za nameščanje dodatne programske opreme, na primer open office ipd. • /proc • Vsebuje podatke o sistemu in procesih • /root • Domači direktorij uporabnika “root”, ki je običajno administrator sistema • /sbin • Direktoriji /sbin, /usr/sbin in /usr/local/sbin vsebujejo orodja za administracijo sistema, uslužnostne programe in ukaze, ki jih lahko uporablja le “root”, na primer halt, reboot in shutdown
Pomen direktorijev (6) • /tmp • Vsebuje začasne datoteke. Datoteke v tem direktoriju občasno brišemo in tako sproščamo disk • /usr • Ena največjih sekcij datotečnega sistema Linux • Vsebuje podatke, ki jih lahko souporabljajo (le berejo) različni uporabniki. Tako imamo strani priročnika shranjene v direktoriju /usr/man • /var • Vsebuje podatke, ki se med delovanjem sistema spreminjajo. Primer: direktorij /var/spool/mail pomni pošto uporabnika
Pravice dostopa do datotek • Linux je mnogouporabniški sistem, datoteke vseh uporabnikov so v isti datotečni strukturi. • Potrebujemo mehanizem zaščite datotek enega uporabnika pred drugimi uporabniki • Izraz “access permission” pomeni • read permission • write permission • execute permission
Pravice dostopa do datotek Dovoljenja za dostop do datotek vidimo z uporabo ukaza ls –l ali ls -al
Kaj pomenijo podatki o datoteki Datum zadnje spremembe Skupina lastnika Hard link no Lastnik drwxr-xr-x2janezstud4096May 17 2001Autostart To je direktorij Ime datoteke Velikost datoteke Drugi člani skupine stud lahko direktorij berejo in izvajajo, ne morejo pa ga spreminjati Janez lahko direktorij bere, vanj zapisuje in ga izvaja Vsi drugi uporabniki lahko direktorij berejo in izvajajo, ne morejo pa ga spreminjati Skupino uporabnika dodeli administrator, ko uporabnika doda v sistem
Še o dovoljenjih • Dostopna dovoljenja lahko pripišemo tudi direktoriju • Direktorij je tudi datoteka, ki vsebuje atribute datotek, ki so v njej • Če direktorij ne dovoli branja • Ne moremo videti strukture tega direktorija • Ne moremo na primer uporabljati ukaza ls • Če direktorij ne dovoli pisanja • Ne moremo spreminjati strukture direktorija • Na primer ne moremo nič kopirati v ta direktorije • Če direktorij ne dovoli izvajanja • Ne moremo s takim direktorijem narediti praktično nič, niti ukaza cd ne
Kako spreminjamo dovoljenja • Dovoljenja za dostop lahko spreminjamo z naslednjim ukazom chmod xyz filename/directory name • xyz je 3 mestno osmiško število • Primeri: 660 : 110 110 000 rw- rw- --- 545 : 101 100 101 r-x r-- r-x
Primer tempnima pravice izvajanja tudicdne dela Dodamo pravico izvajanja Sedaj lahko spremenimo direktorij na temp
Formatiran disk Sektor Gostota podatkov na notranjih sledeh je večja kot na zunanjih sled
Datotečni sistem UNIX Izgled diska pri klasičnih sistemih UNIX
Podatkovni bloki direct 0 direct 1 direct 2 direct 3 direct 4 direct 5 direct 6 direct 7 direct 8 direct 9 single indirect double indirect triple direct
Podatkovni bloki Polje kazalcev v i-vozlu direct 0 direct 1 direct 2 direct 3 direct 4 direct 5 direct 6 direct 7 direct 8 direct 9 single indirect double indirect triple direct
Struktura i-vozla pri ext f2 struct ext2_inode { __u16 i_mode; /* File mode */ __u16 i_uid; /* Owner ID */ __u32 i_size; /* Size in bytes */ __u32 i_atime; /* Access time */ __u32 i_ctime; /* Creation time */ __u32 i_mtime; /* Modification time */ __u32 i_dtime; /* Deletion Time */ __u16 i_gid; /* Group ID */ __u16 i_links_count; /* Links count */ __u32 i_blocks; /* Blocks count */ __u32 i_flags; /* File flags */ __u32 i_block [EXT2_N_BLOCKS]; /* Ptrs to blocks */ __u32 i_version; /* File version for NFS */ __u32 i_file_acl; /* File ACL */ __u32 i_dir_acl; /* Directory ACL */ __u32 i_faddr; /* Fragment address */ __u8 l_i_frag; /* Fragment number */ __u8 l_i_fsize; /* Fragment size */ }; #define EXT2_DIR_BLOCKS 12 #define EXT2_IND_BLOCK EXT2_DIR_BLOCKS #define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1) #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
I-vozel – rezidenčen v pomnilniku • In core inode) • Vsebina (i-vozla na disku) • protection mode • owner • size • time • array of pointers to disk blocks • dodatno (ko je v pomnilniku) • counter (število procesov, ki ga uporablja) • device name (major/minor device number) • i-number (lokacija i-vozla na disku) • status (locked, mount point, …)
“In core” inode inode inode File content File content File content File content
Datotečni sistem Linux Ex2 • Disk je razdeljen v skupine blokov • Vsaka skupina blokov ima i-vozle in podatkovne bloke • Datotečni sistem skuša držati podatke ene datoteke v isti blokovni skupini • “Block bitmaps” kažejo, kateri bloki in i-vozli so prosti • Velikost bloka =1024bytov => 8192 blokov v skupini blokov. • Velikost i-vozla =128 bytov
Alokacija blokov pri e2fs • Skušamo čimbolj preprečevati fragmentacijo. • Vnaprejšnja alokacija: • Če najdemo prost blok, rezerviramo še do 8 naslednjih blokov, če so prosti. Ko datoteko zapremo, preostale rezervirane bloke sprostimo. Temu pravimo “clustering of data blocks”. • Ciljno usmerjena alokacija. • Vedno iščemo prostor v skupini ciljnih blokov. Če tu prostega bloka ne najdemo, iščemo blok med tistimi, ki so oddaljeni do 32 blokov. Če tudi tu ni prostega bloka, skušamo alocirati blok vsaj znotraj iste skupine blokov. V skrajnem primeru alociramo blok v kakšni drugi skupini.
Linuxov datotečni sistem Ext2fs • Ext2fs uses a mechanism similar to that of BSD Fast File System (ffs) for locating data blocks belonging to a specific file. • The main differences between ext2fs and ffs concern their disk allocation policies. • In ffs, the disk is allocated to files in blocks of 8Kb, with blocks being subdivided into fragments of 1Kb to store small files or partially filled blocks at the end of a file. • Ext2fs does not use fragments; it performs its allocations in smaller units. The default block size on ext2fs is 1Kb, although 2Kb and 4Kb blocks are also supported. • Ext2fs uses allocation policies designed to place logically adjacent blocks of a file into physically adjacent blocks on disk, so that it can submit an I/O request for several disk blocks as a single operation.
Direktoriji v datotečnem sistemu e2 • Direktoriji so enojno povezani seznami • Struct ext2_dir_entry { • Unsigned long inode; • Unsigned short rec_len; • Unsigned short name_len; • Char name[EXT2_NAME_LEN]; • }; • Kaj se dogaja ob brisanju?
Pomen direktorija Število linkov File mode ID uporabnika Čas tvorbe Čas spremembe Lokacija na disku Lab3.c Lab2.c : Lab1.c :
Datotečni sistemi LINUX • Omrežni • nfs • Coda • AFS - Andrew FS • smbfs - LanManager • ncpfs - Novell • Posebni • procfs -/proc • umsdos - Unix in DOS • userfs - redirector to user • Glede na medije • ext2 - Linux native • ufs - BSD • fat - DOS FS • vfat - win 95 • hpfs - OS/2 • minix - well…. • Isofs - CDROM • sysv - Sysv Unix • hfs - Macintosh • affs - Amiga Fast FS • NTFS - NT’s FS • adfs - Acorn-strongarm • Še nekateri • devfs - device file system • DFS - DCE distributed FS • cfs - crypt filesystem • cfs - cache filesystem • ftpfs - ftp filesystem • mailfs - mail filesystem • pgfs - Postgres versioning file system
Zamisel o navideznem datotečnem sistemu • Nujno je sožitje več datotečnih sistemov • Datotečni sistemi morajo imeti enoten koncept visokonivojskih operacij • Potrebna je zato abstrakcija datotečnega sistema • Aplikacije interaktirajo z VFS • Jedro preslika abstraktno v dejansko
Navidezni datotečni sistem - VFS • Precej podobnosti z datotečnim sistemom UNIX • Datotečni sistem je tudi opisan z i-vozli in superbloki • VFS ovije operacije datotečnih sistemov s skupnim API (kar naj bi bilo podobno OOD) • Omogoča uporabo več različnih datotečnih sistemov • Dejanski datotečni sistem je uporabniku neviden • 2 glavni komponenti • 1. Skupina definicij, kako naj izgledajo posamezni objekti • 2. Programska plast za rokovanje s temi objekti
Navidezni datotečni sistem - VFS • Upravlja abstrakcijo za vse datotečne sisteme na nivoju jedra • Sprejema sistemske klice uporabnika ( write, open, stat, link) • Interaktira z določenim datotečnim sistemom v skladu s transverzalo montiranja • Prejema zahtevke od drugih delov jedra, predvsem od upravljanja pomnilnika
Logičen pogled na vse skupaj Uporabniški prostor Inode Cache VFS Directory Cache NTFS CryptFS Ext2 Buffer Cache Vzdržuje kernel Disk Drivers
Superblok • Vsebuje le medapodatke datotečnega sistema • Struktura superbloka vsebuje stvari, kot: • naprava, velikost blokov, dirty flags, seznam umazanih i-vozlov • Operacije nad super blokom (super operations) • Čakalna vrsta • Kazalec na root inodedanega datotečnega sistema
Superblok • structsuper_block { • kdev_ts_dev;/* device */ • unsigned long s_blocksize;/* block size */ • unsigned char s_blocksize_bits;/* ld(block size) */ • unsigned char s_lock;/* superblock lock */ • unsigned char s_rd_only; • Unsigned char s_dirt; • Structfile_system_type *s_type; • Structsuper_operations *s_op; • Unsigned long s_flags; • Unsigned long s_magic; • Unsigned long s_time; • Structinode *s_covered;/* mount point */ • Structinode *s_mounted; /* root inode */ • Structwait_queue *s_wait;/* s_lock wait queue */ • Union { • Structminix_sb_infominix_sb; • Struct ext2_sb_info ext2_sb; • …. • Void *generic_sb; • }u;
Predstavitev datotečnih sistemov • Management structures for file systems is similar to logical structure of UNIX file system. • VFS responsible for calling file-system specific implementations. How does VFS know which filesystems are configured? • Void register_filesystem(structfile_system_type *); • Configured at boot-time and possibly loaded as modules as well. • structfile_system_type { • Const char *name; • Intfs_flags; • Structsuper_block *(*read_super)(structsuper_block*,void *,int); • #ifdef VERSION > 2.4 • Struct module *owner; • Structvfsmount *kern_mnt; • #endif • Structfile_system_type *next; • };
Objektno usmerjeno načrtovanje VFS • Uporaba C struktur • Superblock Object • Podatki, ki opisujejo posamezen datotečni sistem • Podatki: Filesystem device, velikost osnovnega bloka, seznam odprtih datotek, semafor, itd. • Operacije: read_inode, write_inode, delete_inode, put_super, write_super, statfs, itd. • Inode Object • Vsi podatki o datoteki razen njenega imena in vsebine • Operacije: create, lookup, mkdir • Dentry Object • Directory Entry – Specific component in a path • Lajša dostop do direktorijev in datotek • File Object • Predstavlja datoteko, odprto od nekega procesa • vsebujeDentry object, filesystem, user/group ID, file pointer
Razlika med objekti File in inode • The File system object • Provides access to the inodes within the FS • VFS maintains a list of its own inode pairs (FS/inode #) • Retrieves the actual inode, from an inode number, by asking the FS to find it • File and inode objects • To access the data of a file, a process needs to use the file-object, not just the inode • File objects are unique to a process, but the inode objects are global
Označevanje metod • Metode nad superblokom: sss_methodname • Metode nad i-vozlom: iii_methodname • Metode dentry: ddd_methodname • Metode nad datotekami: fff_methodname • namesto: • inodei_op lookup napišemo iii_lookup
Super Operations (sss_) • Operacije na i-vozlih: • read_inode • put_inode • write_inode • delete_inode • clear_inode • notify_change • Operacije s superblokom: • read_super (mount) • put_super (unmount) • write_super (unmount) • statfs (attributes)
Inodes • Inodes are VFS abstraction for the file • Inode has operations (iii_methods) • VFS maintains an inode cache, NOT the individual FS’s (compare NT, BSD etc) • Inodes contain an FS specific area where: • ext2 stores disk block numbers etc • AFS would store the FID • Extraordinary inode ops are good for dealing with stale NFS file handles etc.
Struct inode za VFS • Structinode { • Kdev_tI_dev; • Unsigned long I_ino; • Umode_tI_mode; • Nlink_tI_nlinkl; • Uid,gid etc…. • Dev_tI_rdev; /* only if device special file */ • Offset,times of modification,access,creation etc • Struct semaphore *I_sem; • Structinode_operations *I_op; • Structsuper_block *I_sb; • Structwait_queue (I_wait; • Structfile_lock *I_flock; • Structvm_area_struct *I_mmap; • Structinode *I_next,*I_prev; • Structinode *I_hash_next,*I_hash_prev; • Structinode *I_boundto; • Structinode *I_mount; • Struct socket *I_socket; • Reference_counter,flags,lock,bits that denote if this is a pipe,socket. • Union { • Structpipe_node_infopipe_i; • Structminix_inode_infominix_i; • …. • Void *generic_ip; • }u; • };