presentation-dateisysteme/dateisysteme.html

378 lines
11 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<title></title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js//css/reveal.css">
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href="reveal.js//css/theme/black.css" id="theme">
<link rel="stylesheet" href="usrspace.css"/>
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'reveal.js//css/print/pdf.css' : 'reveal.js//css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="reveal.js//lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<div class="slides">
<section><section id="dateisysteme" class="titleslide slide level1"><h1>Dateisysteme</h1></section><section id="inhalt" class="slide level2">
<h2>Inhalt</h2>
<ul>
<li>Was sind Dateisysteme</li>
<li>Grundbegriffe</li>
<li>Arten von Dateisystemen</li>
<li>Beispiele</li>
<li>Fragen?</li>
</ul>
</section></section>
<section><section id="was-sind-dateisysteme" class="titleslide slide level1"><h1>Was sind Dateisysteme</h1></section><section id="was-sind-dateisysteme-1" class="slide level2">
<h2>Was sind Dateisysteme</h2>
<ul>
<li>Abstraktionsebene zwischen unstrukturiertem Speicher und Anwender / Applikation</li>
<li>angereichert um Verwaltungsdaten
<ul>
<li>Dateiname</li>
<li>Zugriffsrechte</li>
<li>Interaktions-Zeiten</li>
</ul></li>
<li>Index der belegten / freien Speicherbereiche</li>
</ul>
</section><section id="wozu-dateisysteme" class="slide level2">
<h2>Wozu Dateisysteme?</h2>
<ul>
<li>Ohne Dateisysteme muss jede Applikation den Speicher selbst organisieren</li>
<li>Konsistenz und Integrität können ausgelagert werden</li>
<li>Können für bestimmte Speicher optimiert werden, ohne alles andere zu adaptieren
<ul>
<li>Beispiel: F2FS/yaffs2 für NAND-Speicher (SSD, SD-Karten, …), ISO9660 für CDs, …</li>
</ul></li>
</ul>
</section></section>
<section><section id="grundbegriffe" class="titleslide slide level1"><h1>Grundbegriffe</h1></section><section id="grundbegriffe-1" class="slide level2">
<h2>Grundbegriffe</h2>
<dl>
<dt>
Blöcke
</dt>
<dd>
Zusammenfassung von Bytes im Speicher, die zusammen gelesen/geschrieben werden
</dd>
<dt>
Speicher
</dt>
<dd>
Addressierbare Ablage für Daten
</dd>
<dt>
IOPS
</dt>
<dd>
I/O Operations Per Second, also Lese-/Schreiboperationen Pro Sekunde
</dd>
</dl>
<aside class="notes">
<ul>
<li>Blöcke: Typischerweise 512 oder 4096 Bytes</li>
<li>IOPS: Gezählt wird üblicherweise die Anzahl der Anweisungen an den Controller, einen bestimmten Datenbereich zu schreiben.</li>
</ul>
</aside>
</section><section id="grundbegriffe-2" class="slide level2">
<h2>Grundbegriffe</h2>
<dl>
<dt>
Datei
</dt>
<dd>
Logische Gruppe von zusammengehörigen Daten
</dd>
<dt>
Verzeichnis
</dt>
<dd>
Logische Gruppe von Dateien
</dd>
</dl>
</section></section>
<section><section id="arten-von-dateisystemen" class="titleslide slide level1"><h1>Arten von Dateisystemen</h1></section><section id="lineare-dateisysteme" class="slide level2">
<h2>Lineare Dateisysteme</h2>
<ul>
<li>Älteste Form</li>
<li>Typischer Einsatz: Lochkarten und Bandspeicher</li>
<li>Kein zentraler Index der freien Blöcke, sondern verteilt</li>
</ul>
</section><section id="flache-dateisystem" class="slide level2">
<h2>Flache Dateisystem</h2>
<ul>
<li>Die frühesten Platten-Dateisysteme</li>
<li>Keine Verzeichnisse</li>
<li>Frei/Belegt-Index eine einfache Bitmap</li>
<li>Alle Dateinamen + Metainformationen in der Master File Table</li>
</ul>
</section><section id="hierarchische-dateisysteme" class="slide level2">
<h2>Hierarchische Dateisysteme</h2>
<ul>
<li>Erweiterung der flachen Dateisysteme</li>
<li>Bereits relativ früh</li>
<li>Verezichnisse zur logischen Strukturierung
<ul>
<li>Unter *NIX oft nur eine spezielle Art Datei</li>
</ul></li>
</ul>
</section><section id="netzwerk-dateisysteme" class="slide level2">
<h2>Netzwerk Dateisysteme</h2>
<ul>
<li>„Speicher“ muss nicht lokal sein</li>
<li>Zusätzliche Abstraktion von Netzwerk-Zugriffen</li>
<li>Bekannteste Vertreter: NFS und CIFS („Windows Dateifreigabe“)</li>
</ul>
</section><section id="verteile-dateisysteme" class="slide level2">
<h2>Verteile Dateisysteme</h2>
<ul>
<li>Speicher muss nicht lokal und nicht auf nur einem Host sein</li>
<li>Verteilung meist Redundant und für den Client unsichtbar</li>
<li>Beispiele: CephFS oder GlusterFS</li>
<li>Vorteil oft erhebliches Durchsatzplus bei Leseoperationen</li>
<li>Skalierung in die Breite leicht</li>
</ul>
</section></section>
<section><section id="begriffe-teil-2" class="titleslide slide level1"><h1>Begriffe Teil 2</h1></section><section id="begriffe-teil-2-1" class="slide level2">
<h2>Begriffe Teil 2</h2>
<dl>
<dt>
Cluster / Inode / Record
</dt>
<dd>
Zusammenfassung von Blöcken unabhängig von der Hardware
</dd>
<dt>
Bitmap
</dt>
<dd>
Teil innerhalb des Superblocks in dem über einzelne Bits markiert wird welche Inodes frei/belegt sind
</dd>
<dt>
Master File Table / Superblock
</dt>
<dd>
Informationen zum Dateisystem: Größe, Größe der Inodes, Ort der Backup-Superblöcke, …
</dd>
</dl>
</section><section id="begriffe-teil-2-2" class="slide level2">
<h2>Begriffe Teil 2</h2>
<figure>
<img src="linked-list-fs.svg">
<figcaption>
Beispiel des Aufbaus eines Linked List FS
</figcaption>
</figure>
</section><section id="begriffe-teil-2-3" class="slide level2">
<h2>Begriffe Teil 2</h2>
<figure>
<img src="indexed-fs.svg">
<figcaption>
Beispiel des Aufbaus eines Indexed FS
</figcaption>
</figure>
</section><section id="begriffe-teil-2-4" class="slide level2">
<h2>Begriffe Teil 2</h2>
<figure>
<img src="b-tree-fs.svg">
<figcaption>
Beispiel des Aufbaus eines B-Tree FS
</figcaption>
</figure>
</section></section>
<section><section id="beispiele" class="titleslide slide level1"><h1>Beispiele</h1></section><section id="alt-fat12" class="slide level2">
<h2>Alt: FAT12</h2>
<ul>
<li>Das erste Dateisystem von MS-DOS</li>
<li>8.3 Dateinamen</li>
<li>2 MFTs mit Bitmaps</li>
<li>Linked List System, jeder Datenblock verweist auf den nächsten</li>
<li>Maximale Volume-Größe: 32 MiB</li>
</ul>
</section><section id="neuer-ntfs" class="slide level2">
<h2>Neuer: NTFS</h2>
<ul>
<li>„New Technology File System“, Standard der NT-Familie seit Windows NT 3.1</li>
<li>255 Zeichen Dateinamen</li>
<li>Bitmap</li>
<li>B-Tree</li>
</ul>
</section><section id="linux-ext4" class="slide level2">
<h2>Linux: ext4</h2>
<ul>
<li>Quasi-Nachfolger von ext2 und ext3</li>
<li>Journalling</li>
<li>B-Tree statt Indexed wie die Vorgänger</li>
<li>Quasi-Default auf Linux</li>
</ul>
</section><section id="ohne-inodes-reiserfs" class="slide level2">
<h2>Ohne Inodes: ReiserFS</h2>
<ul>
<li>Ganzes FS großer B+-Tree</li>
<li>Hohe Geschwindigkeit bei zufälligen Zugriffen</li>
<li>Sehr schnell bei Verzeichnissen mit vielen Dateien</li>
<li>Reiser3 leider veraltet, Reiser4 nicht fertig</li>
</ul>
</section><section id="integrierter-volume-manager-zfs" class="slide level2">
<h2>Integrierter Volume Manager: ZFS</h2>
<ul>
<li>Ursprünglich auf Solaris, inzwischen auf fast jedem unixoiden OS</li>
<li>Maximale Größe
<ul>
<li>Volume: 2<sup>128</sup> Bytes</li>
<li>Datei: 2<sup>64</sup> Bytes</li>
</ul></li>
<li>Eingebaut: Kompression, Deduplikation, RAID, Snapshots, …</li>
<li>CDDL nicht mit GPLv3 kompatibel, darf deshalb nicht als Binary und/oder teil des Linux-Kernels ausgeliefert werden</li>
</ul>
<aside class="notes">
ZFS komplett wäre noch mal eigener Vortrag
</aside>
</section><section id="verteilter-speicher-cephfs" class="slide level2">
<h2>Verteilter Speicher: CephFS</h2>
<ul>
<li>CERN mit CephFS: 65 PB, 10.800 Disken</li>
<li>Daten u.a. aus den LHC Experimenten</li>
<li>~ 300Gbps Schreibgeschwindigkeit</li>
<li>Nutzt Ceph im Hintergrund
<ul>
<li>Ceph: objekt-basierter, verteilter, redundanter Netzwerkspeicher</li>
</ul></li>
</ul>
<aside class="notes">
Ceph: wäre noch mal eigener Vortrag
</aside>
</section><section id="pseudo-procfs" class="slide level2">
<h2>Pseudo: procfs</h2>
<ul>
<li>Dateispeicher dahinter ist der (Linux-)Kernel</li>
<li>Interface zu <code>Proc</code>ess Informationen</li>
<li>Jeder Prozess in der Form <code>/proc/&lt;pid&gt;</code> abgebildet, inkl. offene Dateien, Kommandozeile, Umgebung, …</li>
<li>Begrenzt können auch System-Settings bearbeitet werden</li>
<li>Treiber-Zugriff inzwischen nach <code>/sys</code> per <code>sysfs</code> ausgelagert</li>
</ul>
<aside class="notes">
<ul>
<li>Auch für FreeBSD verfügbar</li>
</ul>
</aside>
</section></section>
<section><section id="links" class="titleslide slide level1"><h1>Links</h1></section><section id="links-1" class="slide level2">
<h2>Links</h2>
<dl>
<dt>
NTFS
</dt>
<dd>
https://de.wikipedia.org/wiki/NTFS
</dd>
<dt>
ext4
</dt>
<dd>
https://de.wikipedia.org/wiki/Ext4
</dd>
<dt>
Ceph
</dt>
<dd>
https://de.wikipedia.org/wiki/Ceph
</dd>
<dt>
Präsentation “Storage at CERN”
</dt>
<dd>
https://indico.cern.ch/event/649159/contributions/2761965/attachments/1544385/2423339/hroussea-storage-at-CERN.pdf
</dd>
</dl>
</section><section id="links-2" class="slide level2">
<h2>Links</h2>
<dl>
<dt>
ZFS on Linux
</dt>
<dd>
https://zfsonlinux.org/
</dd>
<dt>
CDDL and GPL
</dt>
<dd>
https://en.wikipedia.org/wiki/License_compatibility#CDDL_and_GPL
</dd>
<dt>
Synthetic file system
</dt>
<dd>
https://en.wikipedia.org/wiki/Synthetic_file_system
</dd>
<dt>
exFAT
</dt>
<dd>
https://de.wikipedia.org/wiki/exFAT
</dd>
<dt>
Apple File System
</dt>
<dd>
https://de.wikipedia.org/wiki/Apple_File_System
</dd>
</dl>
</section><section id="links-3" class="slide level2">
<h2>Links</h2>
<dl>
<dt>
Präsentation
</dt>
<dd>
https://gitlab.usrspace.at/everyone/presentation-dateisysteme
</dd>
<dt>
Verein <code>/usr/space</code>
</dt>
<dd>
https://usrspace.at
</dd>
</dl>
<p>Präsentation ist <a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.de">CC-BY-SA 4.0</a></p>
</section></section>
<section><section id="fragen" class="titleslide slide level1"><h1>Fragen?</h1></section></section>
</div>
</div>
<script src="reveal.js//lib/js/head.min.js"></script>
<script src="reveal.js//js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
// Optional reveal.js plugins
dependencies: [
{ src: 'reveal.js//lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'reveal.js//plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js//plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>