Filesystem basics

Soubor

Adresář

i-node

Files are anonymous

Byte sequence

Writing byte sequences

Speciální soubory

File system types

Multi-user systems

Ownership & permissions

Disk quotas

The block layer

Disk-like devices

Aside: Disk adressing Schemes

Block-level access

Aside: Access Times

Block access cache

Write buffers

I/O scheduler (elevator)

RAID

RAID performance

Block-level encryption

Storing data in blocks

Filesystem as resource sharing

Filesystem as abstraction

Virtual filesystem switch

Virtual file system layer

VFS in OOP terms

The filesystem class

struct handle { /* ... */ };
struct filesystem
{
    virtual int open( const char *path ) = 0;
    virtual int read( handle file, ... ) = 0;
    /* ... */
}

Filesystem-specific operations

Standard IO

Memory-mapped IO

Sync-ing data

Filesystem-agnostic operations

Executables

File locking

The fcntl syscall

Special files

Mount points

The UNIX filesystem

Superblock

I-Nodes

I-Node allocation

I-node content

Attaching data to I-Nodes

Fragmentation

External fragmentation problems

Directories

File name lookup

Old-style directories

Hash-based directories

Tree-Based directories

Free space

File system consistency

Journalling

Advanced features

What else can filesystems do?

File compression

File encryption

Block de-duplication

Snapshots

Checksums

Redundant storage