^ red hat. Souborové systémy v Linuxu Red Hat Lukáš Czerner May 16, 2016 Copyright © 2016 Lukas Czerner, Red Hat. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the COPYING file. redhat. Agenda Co je to souborový systém Základní pojmy Rozhraní souborových systémů Interní struktury Konzistence pri výpadku Pokročilé funkce Nové typy zařízení Jak se zapojit Otázky ^ redhat Part I Co je to souborový systém ? redhat. Co je to souborový systém ? Způsob organizace dat na nosném médiu ve formě souborů a adresářů Snadný přístup Uživatelská data snadno přístupná pojmenovaných souborech Soubory seskupené v pojmenovaných adresářích Snadno pochopitelná stromová struktura ■ Virtualizace adresového prostoru média Adresový prostor souboru vs. logický prostor média Prostory jednotlivých souborů jsou na sobě nezávislé Řízení přístupu Práva ke čtení, zápisu Kvóty pro omezení množství dat redhat. Typy souborových systémů ■ Souborové sysémy v uživatelském prostoru použitím jaderného modulu FUSE ■ GlusterFS, sshfs Souborové systémy v jaderném prostoru Distribuované, sítové, lokální Speciální souborové systémy Pseudo souborové systémy Is -I /tmp/fijse glibc Userspace Kernel ./he lo /tmp/fuse libfijse glibc FUSE VF S NFS Ext3 redhat. Utility v uživatelském prostoru Nástroje pro vytvoření souborového systému mkfs.ext4, mkfs.xfs, ... Vytvoření souborového systému s danými parametry ■ Nástroje pro kontrolu souborového systému fsck.ext4, xfs.repair, ... Kontrola, oprava, optimalizace ■ Nástroje pro správu souborového systému ■ btrfs, resize2fs, tune2fs, xfs_growfs, debugfs Vše od změny velikosti, přes export metadat až k detailní úpravě interních struktur ^ redhat Part Pojmy redhat. Důležité struktury Inode - Index node Struktura reprezentující všechny typy souborů - v paměti Lmode - typ souboru Lino - číslo inode Lnlink - počet odkazů na inode Lsize - velikost inode další viz. include/linux/fs.h:528 ■ Dentry - Directory entry Struktura mapující jméno souboru na číslo inode - v paměti d_parent - ukazatel rodičovskou dentry d_name - struktura obsahující jméno záznamu d.inode - odkaz na inode - může být NULL další viz. include/linux/dcache.h:108 redhat. Důležité struktury - pokračování - File Reprezentuje otevřený soubor f_path - struktura reprezentuje cestu k souboru f_inode - odkaz na příslušnou inode f_mode - mód otevřeného souboru f_pos - aktuální pozice v souboru další viz. include/linux/fs.h:776 ■ Superblock Identifikuje daný souborový systém na médiu - v paměti s_dev - číslo identifikující zařízení s_blocksize - velikost bloku s_type - struktura popisující typ souborového systému s_magic - magické číslo identifikující typ souborového systému další viz. include/linux/fs.h:1821 file object file object file object Gentry object denfry object dentry object inode objecl inode objecl I vTsmounl super_blocfc object Další pojmy - Blok Nejmenší alokovatelná jednotka souborového systému ■ Stránka Přesun dat mezi pamětí a záznamovým médiem ^ redhat Part III Rozhraní souborových systémů The Linux I/O Stack Diagram version l.O, 2012-06-20 outlines the Linux I/O stack as of Kernel version 3.3 Applications (Processes) m ma p (anonymous pages) r-vj direct I/O (O DIRECT) VFS block based FS [ext2] (ext3) (ext4) C xfs ~) (btrfs) C ifs Qso966o) ( gfs ") facts) Network FS CNFS) (poda) (smbfs) QH3 stackable pseudo FS (proc) (sysfs) (pipefs) (futexfs) (usbfs) C --Q specia I purpose FS (tmpfs) (ramfs) (devtmpfs) -network Block I/O Layer optional stackable devices on top of "normal" block devices - work on bios fmdraid) (devices fdrbd) f - - - ") *--[mapperj v--' v-y I/O Scheduler maps bios to requests (fcfqj (deadMne) [noop] request-based device mappertargets (dm-multipath) T BIOs (Block I/O) SCSI upper layer (/dev/sda) (/dev/sdb) ( --- ) sysfs (transport attributes) _A_ (751 //vd*) (7dl /fio*) c hooked in Device Drivers (hook in similar like stacked devices like mdraid/device mapper do) (/dev/fio*) omemory-vsP) with module option ^ /dev/rss mtip32x d*) /proc/sys/vm/drop_caches # free -m total used free shared buffers cached Mem: 7685 1606 6079 0 171 219 Uvolnění page cache # echo 1 > /proc/sys/vm/drop_caches # free -m total used free shared buffers cached Mem: 7685 1606 6079 0 0 209 The Linux I/O Stack Diagram version l.O, 2012-06-20 outlines the Linux I/O stack as of Kernel version 3.3 Applications (Processes) m ma p (anonymous pages) r-vj direct I/O (O DIRECT) VFS block based FS [ext2] (ext3) (ext4) C xfs ~) (btrfs) C ifs Qso966o) ( gfs ") facts) Network FS CNFS) (poda) (smbfs) QH3 stackable pseudo FS (proc) (sysfs) (pipefs) (futexfs) (usbfs) C --Q specia I purpose FS (tmpfs) (ramfs) (devtmpfs) -network Block I/O Layer optional stackable devices on top of "normal" block devices - work on bios fmdraid) (devices fdrbd) f - - - ") *--[mapperj v--' v-y I/O Scheduler maps bios to requests (fcfqj (deadMne) [noop] request-based device mappertargets (dm-multipath) T BIOs (Block I/O) SCSI upper layer (/dev/sda) (/dev/sdb) ( --- ) sysfs (transport attributes) _A_ (751 //vd*) (7dl /fio*) c hooked in Device Drivers (hook in similar like stacked devices like mdraid/device mapper do) (/dev/fio*) omemory-vsP) with module option ^ /dev/rss mtip32x d*) ^ redhat Part IX Otázky redhat. Resources Linux Weekly News http://lwn.net Linux Kernel code http://kernel.org Linux 10 stack diagram http: //www.thomas-krenn.com/en/oss/linuxiostack-diagram.html Fuse diagram https: //en.wikipedia.org/wiki/File:FUSE_structure.svg VFS diagram http: //www. ibm.com/developerworks/library/lvirtual-filesystemswitch/ Developers Conference http://devconf.cz/ Lukáš Jelínek. Jádro systému Linux, Computer press, 2008 ^ red hat The end. Thanks for listening.