best7-1 Les 7: Bestandssystemen "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." Brian Kernighan
best7-2 Organisatie bestandssysteem IO-controle fysiek bestandssysteem bestandsorganisatie Logisch bestandssysteem Bestandsnamen Logische bloknummers Fysieke bloknummers Bestandssysteem: logisch Bestandssysteem: fysiek
best7-3 Overzicht Logisch bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruimte –Partities –Reservekopieën Optimalisaties
best7-4 Gegevensbestanden 8 0 N Attributen Operaties Types Toegangsmethoden Bestand = benoemde verzameling bij elkaar horende gegevens = eenheid van opslag. Gegevensbestand
best7-5 Attributen publieke naam systeemnaam versie plaats (data) de grootte eigenaar creatie-ogenblik creatie-programma protectie-informatie reservekopie-informatie ogenblik van laatste gebruik type (op sommige systemen) toegangsmethode Opgeslagen in een directorybestand Gegevensbestand: attributen
best7-6 Naamgeving String van letters,cijfers en leestekens, –Beperkt in lengte –Soms onderscheid kleine/hoofdletters (Unix, NTFS ), soms niet (Windows, FAT) –NTFS gebruikt unicode: βαДиהت 탁탢齩 Meestal ook bestandsextentie –8.3 notatie: abcdefgh.ijk –Via extensies worden applicaties geassocieerd
best7-7 Operaties op bestanden Win32UnixOmschrijving CreateFilecreatCreëer een bestand OpenFileopenOpen een bestand CreateProcessexecStart een proces Gegevensbestand: operaties
best7-8 Bestanden vs. open bestanden bestand open bestand #include int main() { char buffer[100]; int handle; handle = open (“test.txt”, O_RDWR | O_CREAT | O_TRUNC); write (handle, “ ”, 10); fsync (handle); lseek (handle, 0, SEEK_SET); read (handle, buffer, 10); buffer[10] = '\0'; printf ("String read = %s.\n", buffer); close (handle); return 0; }
best7-9 Operaties op open gegevensbestanden Win32UnixOmschrijving CloseHandlecloseSluit een bestand ReadFilereadLees data uit bestand WriteFilewriteSchrijf data naar bestand SetFilePointerlseekStel de lees/schrijfwijzer in SetEndOfFiletruncateStel de lengte van het bestand in
best7-10 Voorbeeldprogramma Unix Details: man 2
best7-11 Voorbeeldprogramma Windows if (!copyfile(argv[1], argv[2], false)) exit(3);
best7-12 Delen van open bestanden open bestand 1 open bestand 2 open bestand proces 1 proces 2 Bestand (1) Bestand (2) globale bestandentabel schijf lokale bestandentabel
best7-13 Bestandstypes directory's Speciale bestanden (Unix, zie I/O) Links, shortcuts Gegevensbestanden –ASCII: leesbaar –Binair: betekenis enkel zinvol voor programma dat indeling kent –Uitvoerbaar –Magic number s om type te bepalen Speciaal geval: uitvoerbaar bestand, OS kent indeling
best7-14 Toegangsmethoden Sequentiële toegang Directe toegang Geïndexeerde toegang Tegenwoordig: Directe toegang op byte-niveau
best7-15 Sequentiële toegang Toegangstijd naar een bepaalde record hangt af van de plaats van de record in het bestand. huidige positie reset read/write 3 operaties: - reset - read next - write next Toegangsmethode: sequentieel
best7-16 Directe toegang Toegangstijd naar een bepaalde record hangt niet af van de plaats van de record in het bestand. 2 operaties: - read n - write n 3 operaties: - seek n - read next - write next read/write seek n of Toegangsmethode: direct
best7-17 Geïndexeerde toegang Toegangsmethode: geïndexeerd
Directe toegang in Java best7-18 import java.io.File; import java.io.RandomAccessFile; import java.io.IOException; public class DemoRandomAccessFile { public static void main(String[] args) { try { RandomAccessFile raf = new RandomAccessFile(“test.txt”, "rw"); byte ch = raf.readByte(); System.out.println("Read first character of file: " + (char)ch); System.out.println("Read full line: " + raf.readLine()); raf.seek(raf.getFilePointer() - 10); raf.writeBytes(“???”); raf.seek(0); System.out.println("Read full line: " + raf.readLine()); raf.seek(file.length()); raf.writeBytes("This will complete the Demo"); raf.close(); } catch (IOException e) { System.out.println("IOException:"); e.printStackTrace(); } } }
best7-19 Overzicht Logische bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruimte –Partities –reservekopieën Optimalisaties
best7-20 directory's Directory Gegevensbestanden Operaties Types
best7-21 Operaties op directory's Win32UnixOmschrijving CreateDirectorymkdirMaak een nieuwe directory RemoveDirectoryrmdirLaat een directory weg FindFirstFileopendirOpen een directory FindNextFilereaddirLees een directory-element FindCloseclosedirSluit een directory MoveFilerenameHernoem een bestand SetCurrentDirectorychdirVerander van huidige directory DeleteFileunlinkLaat een bestand weg GetFileAttributesfstatLees een bestandsattribuut
best7-22 Directorytypes 1 niveau 2 niveaus Boomstructuur Acyclische graaf Graaf
best7-23 Eenniveaudirectory testdatamaildoc directory bestanden
best7-24 Tweeniveaudirectory testdatamaildoc User file directory (UFD) bestanden mailmarksmailrep usr1usr2usr3 Master file directory (MFD)
best7-25 Boomgestructureerde directory statmaildistfindcounthexdatamail spellbinprogs root progcopyprtexporderlistfind listobjspellalllastfirst
best7-26 Acyclische graafdirectory's listallwcount words dictspell list root listradew7 Symbolische link
best7-27 Links in Unix % ln -s ttt symlink % ls -al drwx--x--x 2 els users 1024 Dec 3 08:48. drwx--x--x 3 els users 1024 Dec 3 08:47.. lrwx--x--x 1 els users 3 Dec 3 08:48 symlink -> ttt -rw tom users 23 Dec 3 08:48 ttt % cat symlink dit is een testbestand % ln ttt hardlink % ls -al drwx--x--x 2 els users 1024 Dec 3 08:49. drwx--x--x 3 els users 1024 Dec 3 08:47.. -rw tom users 23 Dec 3 08:48 hardlink lrwx--x--x 1 els users 3 Dec 3 08:48 symlink -> ttt -rw tom users 23 Dec 3 08:48 ttt % rm ttt % ls -al drwx--x--x 2 els users 1024 Dec 3 08:49. drwx--x--x 3 els users 1024 Dec 3 08:47.. -rw tom users 23 Dec 3 08:48 hardlink lrwx--x--x 1 els users 3 Dec 3 08:48 symlink -> ttt % cat symlink cat: cannot open symlink: No such file or directory % cat hardlink dit is een testbestand
best7-28 Graafdirectory..mailcountbook avitc unhex root countunhex jim hyp hex % ls -al drwx--x--x 2 kdb digit 1024 Dec 3 08:49. drwx--x--x 3 kdb digit 1024 Dec 3 08:47..
best7-29 Overzicht Logische bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruime –Partities –Reservekopieën Optimalisaties
best7-30 Monteren van bestandssystemen schijf = subdirectory C:D:E: Monteren(bs) ~ openen(bestand)
best7-31 NFS : Network File System
best7-32 Virtueel bestandssysteem gebruiker kern VFS
best7-33 NFS Architectuur
best7-34 Overzicht Logische bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruimte –Partities –Reservekopieën Optimalisaties
best7-35 Organisatie van directory's naam1attrib naam2attrib naam3attrib naam4attrib naam5attrib naam6attrib naam1attrib naam2attrib naam3attrib naam4attrib naam5attrib naam6 Directory: f(naam) → adres_van_attributen Lineaire lijst of via hakselfunctie, of b-tree
best7-36 Organisatie van gegevensbestanden Contigue allocatie Gelinkte allocatie Geïndexeerde allocatie
best7-37 Histogram Windows (2010) log2(bestandsgrootte) DataProgramma’s aantal kleinste00 grootste
Cumulatieve distributie best7-38 > 50% bestanden < 8KiB >75 % bestanden < 64 KiB >90% bestanden < 1 MiB
best7-39 Contigue allocatie blokken test.c 3 2 a.out 7 3 test.out 0 1 directory begin lengte blok met byte n = beginblok + n div blokgrootte b.v. CD-ROM (iso9660) Bestandsorganisatie: contigu
best7-40 Gelinkte allocatie blokken test.c 3 2 a.out 7 4 test.out 0 0 directory begin einde blok met byte n = ( n div (blokgrootte-4)) de blok Bestandsorganisatie: gelinkt
best7-41 Allocatietabel blokken test.c 3 a.out 7 test.out 0 directory blok met byte n = ( n div blokgrootte) de gelinkte blok Bestandsorganisatie: fat
best7-42 Indextabel blokken test.c 5 a.out 6 test.out 8 directory blok met byte n = indexblok[n div blokgrootte] Bestandsorganisatie: geïndexeerd
best7-43 Unix: inodes blokken inode Info 12 directe wijzers … … … … Bestandsorganisatie: inode
best7-44 Unix Inode OffsetSizeNameDescription 0x0__le16i_mode 0x2__le16i_uidLower 16-bits of Owner UID. 0x4__le32i_size_loLower 32-bits of size in bytes. 0x8__le32i_atimeLast access time, in seconds since the epoch. 0xC__le32i_ctimeLast inode change time, in seconds since the epoch. 0x10__le32i_mtimeLast data modification time, in seconds since the epoch. 0x14__le32i_dtimeDeletion Time, in seconds since the epoch. 0x18__le16i_gidLower 16-bits of GID. 0x1A__le16i_links_countHard link count. 0x1C__le32i_blocks_lo 0x20__le32i_flags 0x244 bytesUnion osd1: 0x2860 bytesi_block[15] ( )Block map or extent tree. See the section "The Contents of inode.i_block". 0x64__le32i_generationFile version (for NFS). 0x68__le32i_file_acl_loLower 32-bits of extended attribute block. 0x6C__le32i_size_high / i_dir_aclUpper 32-bits of file size. 0x70__le32i_obso_faddr(Obsolete) fragment address. 0x7412 bytesUnion osd2: 0x80__le16i_extra_isizeSize of this inode x82__le16i_checksum_hiUpper 16-bits of the inode checksum. 0x84__le32i_ctime_extraExtra change time bits. This provides sub-second precision. 0x88__le32i_mtime_extraExtra modification time bits. This provides sub-second precision. 0x8C__le32i_atime_extraExtra access time bits. This provides sub-second precision. 0x90__le32i_crtimeFile creation time, in seconds since the epoch. 0x94__le32i_crtime_extraExtra file creation time bits. This provides sub-second precision. 0x98__le32i_version_hiUpper 32-bits for version number.
best7-45 inodes proces 1 proces 2 Globale bestanden- tabel directory inodes schijf kern
best7-46 ijle bestanden main() { int h = open("test.dat", O_CREAT|O_WRONLY, 0777); lseek(h, , SEEK_SET); write(h, "Hallo", 5); close(h); } % ls -al test.dat -rwx--x--x 1 kdb users Nov 15 20:13 test.dat % du –b test.dat 8192 test.dat Bestand: ijl
best7-47 MFT-record Bestand van 9 blokken in 3 runs MFT record
best7-48 MFT-records
Directory best7-49
Compressie best7-50
best7-51 NTFS Streams c:\>echo Hallo > test.txt c:\>dir 15/11/ :46 8 test.txt c:\>more test.txt Hallo c:\>echo Nevenboodschap >test.txt:boodschap c:\>dir 15/11/ :46 8 test.txt C:\>more test.txt Hallo C:\>more test.txt:boodschap Nevenboodschap NTFS: streams
best7-52 Quota
best7-53 Defragmentatie & Compactering schijf
best7-54 Overzicht Logische bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruimte –Partities –Reservekopieën Optimalisaties
best7-55 Beheer van vrije ruimte: bitmap Soms is het beheer gratis: b.v. FAT blokken In gebruik Bestandssysteem: vrije ruimte
best7-56 Beheer van vrije ruimte: links blokken vrij
best7-57 Beheer van vrije ruimte: wijzerblok blokken vrij
best7-58 Consistentie controleren vrij bezet vrij bezet
best7-59 Loggestructureerde bestandssystemen logbestand transacties Bestandssysteem: loggestructureerd
best7-60 Overzicht Logische bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruimte –Partities –Reservekopieën Optimalisaties
best7-61 Partities of volumes Partitie A Partitie B Partitie C Partitie D schijf 1 schijf 2 schijf 3 schijf 4 partitie = logische schijf BB MBR
best7-62 Indeling partitie (cooked) BCBPCBFCBrootdata Boot block Super block+free space mgmt i-nodes Root directory Partition boot sector (8 KiB) + BIOS Parameter Block (BPB) Master File Table Unix File System ( UFS ) NTFS
best7-63 Overzicht Logische bestandssysteem –Gegevensbestanden –directory's –Bestandssystemen Bestandsorganisatie –directory's –Gegevensbestanden –Vrije ruimte –Partities –Reservekopieën Optimalisaties
best7-64 Reservekopie ( back-up ) Fysieke reservekopie Logische reservekopie Bescherming tegen Hardwareproblemen Ongelukjes
best7-65 Fysieke reservekopie Schijfblokken 0..N reservekopie: fysiek
best7-66 Logische reservekopie Schijfblokken 0..N Bestand per bestand reservekopie: logisch
best7-67 Logische incrementele reservekopieën reservekopie: incrementeel
best7-68 Overzicht Logische bestandssysteem Bestandsorganisatie Optimalisaties –Vergrendelen bestanden –Variabele blokgrootte –Beperkte dynamische informatie –RAM-disk –Virtuele schijf –Disk caches –Free-behind - Read-ahead –Compressie
Vergrendelen bestanden best7-69 import java.io.*; import java.nio.channels.*; public class LockingExample { public static void main(String arsg[]) throws IOException { RandomAccessFile raf = new RandomAccessFile("file.txt", "rw"); // get the channel for the file FileChannel ch = raf.getChannel(); // this locks the first half of the file - exclusive FileLock exclusiveLock = ch.lock(0, raf.length()/2, false); /** Now modify the data... */ exclusiveLock.release(); // this locks the second half of the file - shared FileLock sharedLock = ch.lock(raf.length()/2+1, raf.length(), true); /** Now read the data... */ sharedLock.release(); } catch (java.io.IOException ioe) { } finally { } } Mandatory locks: hard afgedwongen Advisory locks: kunnen genegeerd worden Bestand: lock
best7-70 Blokgrootte Unix GB
best7-71 Variabele blokgrootte Kleine blokken voor kleine bestanden Grote blokken voor grote bestanden
best7-72 Beperkte dynamische informatie Voornamelijk toegangstijdstippen
best7-73 RAM-disk / tempfs Partitie A Partitie B schijf BB MBR Fysiek geheugen
Virtuele schijf best7-74 Partitie A BB MBR bestand Virtuele schijf BB MBR
best7-75 Disk caches Spoorbuffer hoofdgeheugen CVE Disk cache
best7-76 Free-behind Bij sequentieel lezen is het beter om een gelezen blok vrij te geven bij het inlezen van het volgende blok. Read-ahead Bij sequentieel lezen een aantal extra sequentiële blokken inlezen.
best7-77 Schijfcompressie Verhoogt de capaciteit van de schijf Verhoogt de effectieve bandbreedte naar de schijf
best7-78