% <#>---------------------------------------------------------------------------<#> \section{Dateisysteme}% \label{sec:dateisysteme} Je nach Kernel werden unterschiedliche Dateisysteme unterstützt. Bekannt von Windows ist Ihnen bestimmt das \acrfull{acr:ntfs}. Linux unterstützt im Gegensatz zum Windows NT Kernel nicht nur ein oder zwei Dateisysteme sondern eine große Vielzahl, beispielsweise \acrshort{acr:ext3}, \acrshort{acr:ext4}, \acrshort{acr:btrfs}, \acrshort{acr:eCryptfs}, \acrshort{acr:reiser} oder XFS. Jedes Dateisystem hat Stärken und Schwächen. Aus diesem Grund werden nicht alle Dateisysteme detailiert betrachtet, sondern ausschließlich \acrshort{acr:btrfs}, welches für Fedora 33 als Standard Dateisystem angekündigt ist\footcite{fedora33-btrfs-default} als auch kleinere Dateisysteme, welche nicht direkt eine physische oder virtuelle Festplatte vorraussetzen. % #>-------------------------------------------------------------------------<# \subsection{BtrFS}% \label{sec:dateisysteme.btrfs} Das \acrshort{acr:btrfs} Dateisystem ist ein \acrlong{acr:cow} Dateisystem. \acrshort{acr:cow} bedeutet, dass für Dateien, welche kopiert werden, nicht der selbe Speicherplatz anfällt. Sie werden stattdessen nur referenziert. Dies hat den Vorteil, das Speicherplatz eingespart werden kann. Im Umfeld von systemorierntierten Programmiersprachen wie C, Rust oder Go, kann dies mit dem Konzept von Pointern verglichen werden. Wobei statt Speicheradressen die Dateisystemblöcke referenziert werden, welche die Datei im Dateisystem abbilden. \acrshort{acr:btrfs} bietet mehrere Funktionen an, welche in dem Umfang kein anderes Dateisystem anbietet. Hier einige Informationen über \acrshort{acr:btrfs}: \begin{itemize}[itemsep=0pt] \item Dynamisch wachsende Inodes \item Verwaltung von Subvolumes \item Erstellung von Snapshots pro Subvolume \item Datenkompression auf Dateisystemebene \item Dateisystemcheck und Defragmentierung während des Betriebs \item Prüfsummenbasiert \item Integrierte \acrshort{acr:raid} option, wobei nur \acrshort{acr:raid} 0 und 1 als stabil zu betrachten sind \end{itemize} % >---------------------------------------------------------------------------< \subsubsection{Was ist genau BtrFS}% \label{sec:dateisysteme.btrfs.erklaerung} Eine \acrshort{acr:btrfs}-Partition stellt eine Volume dar, welches in mehrere Subvolume unterteilt werden kann. Subvolumes stehen in ihrer Eigenschaft zwischen Partitionen und Verzeichnissen. Partitionen haben eine feste Größe, Subvolumes nicht, außer sie werden durch Quotas limitiert. Daher verhalten sich Subvolumes ähnlich wie Verzeichnisse. Im Verzeichnisbaum des Systems werden Subvolumes automatisch als Ordner eingehängt. In Ubuntu-Derivaten und OpenSUSE hat es sich eingebürgert Top-Level-Subvolumen mit einem vorangestellten \textit{@} zu benennen. Dies ist eine reine Konvention unter den Nutzern dieser Linux-Derivate und formell nicht nötig. Subvolumen bedürfen keiner speziellen Nomenklatur. Es ist sogar hinderlich, da jedes Subvolumen welches anders heißt als wie vom System erwartet explizit eingehängt werden muss.\footcite{was-ist-btrfs} \acrshort{acr:btrfs} erlaubt zudem das Erstellen von Snapshots. Snapshots representieren eine Momentaufnahme eines Subvolumes. Snapshots müssen auf der selben \acrshort{acr:btrfs} Partition gespeichert werden wie das Subvolume. Enthält ein Subvolume einen Snapshot, enthält der Snapshot nicht rekursiv alle Snapshots, welche zum Zeitpunkt der Erstellung vorhanden waren. Da Snapshots Momentaufnahmen sind, können diese sehr leicht zurück gespielt werden. Hier ist allerdings zu beachten, dass ein Snapshot kein Backup im eigentlichen Sinne ist. Backups werden auf physisch getrennte Geräte gespeichert, was bei Snapshots nicht der Fall ist. Dateien und Verzeichnisse, welche durch einen Snapshot kopiert werden, belegen nicht zusätzlichen Speicherplatz. Sie werden nur von ein oder mehreren Quellen referenziert. Folgende Abbildung beschreibt den Prozess und die Referenzierung: \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{img/btrfs-cow.png} \caption{Referenzierung von Speicherblöcken}% \label{fig:dateisysteme.btrfs.referenzierung-von-speicherbloecken} \end{figure} Erst wenn alle Referenzen gelöscht sind können die Dateisystemblöcke überschrieben werden. % >---------------------------------------------------------------------------< \subsubsection{Step-By-Step}% \label{sec:dateisysteme.btrfs.step-by-step} Mit dem Befehl \textit{mkfs.btrfs} kann eine \acrshort{acr:btrfs} Dateisystem auf einer leeren Partition erstellt werden. Mit dem Befehl \textit{parted} oder \textit{fdisk} lassen sich Partitionen einer Festplatte bearbeiten, beispielsweise um neue zu erstellen, zu löschen oder deren Größe anzupassen. Bei der Erstellung eines \acrshort{acr:btrfs} Dateisystems wird zwischen Daten und Metadaten unterschieden. Bei Daten handelt es um die Daten welche auf der Festplatte gespeichert werden. Metadaten enthalten dagegen Informationen, welche Datei durch welches Subvolume oder Snapshot referenziert wird. Für beide Informationsträgertypen kann zwischen mehreren Profilen unterschieden werden. Es können Beispielsweise die Daten auf einem \acrshort{acr:raid}-0 und die Metadaten auf einem \acrshort{acr:raid}-1 gespeichert werden. Je nach Einsatzszenario kann ein vordefiniertes Profil bei der Erstellung verwendet werden. Das verwendete Profil lässt sich nachträglich nicht mehr ändern. Neben den Profilen lassen sich auch weitere Informationen für die \acrshort{acr:btrfs} Partition definieren. Beispielsweise das Label oder die UUID. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 1a:} Binden Sie über ihren HyperVisor (HyperV, \acrshort{acr:kvm} oder Virtual Box) zwei neue virtuelle Festplatten an ihre VM. Beide virtuelle Festplatten sollen eine Größe von 5GB besitzen. Starten Sie, nachdem Sie die virtuellen Festplatten der VM zugewiesen haben, die Virtuelle Maschine und überprüfen Sie mit \textit{lsblk} (list block devices), ob beide virtuelle Festplatten durch ihre VM erkannt wurden. \item \textbf{Aufgabe 1b:} Welche unterschiedlichen Profile werden von dem \acrshort{acr:btrfs} Dateisystem unterstützt? \item \textbf{Aufgabe 1c:} Erstellen Sie eine neue Partition mit dem Partitionsschema \textit{msdos}. Nutzen Sie zur Partitionierung entweder \textit{parted} oder \textit{fdisk}. \item \textbf{Aufgabe 1d:} Richten Sie ein neues \acrshort{acr:btrfs} Dateisystem ein. Verwenden Sie dazu die beiden virtuellen Festplatten. Die Daten als auch Metadaten sollen als \acrshort{acr:raid}-1 vor einem Festplattenausfall geschützt werden. Verwenden Sie als Label \textit{btrfs-raid-1}. \end{itemize} Physische als auch virtuelle Geräte können an unterschiedlichen Stellen im Verzeichnisbaum eingebunden werden. Zum Einbinden eines Gerätes in den Verzeichnisbaum wird der Befehl \textit{mount} verwendet. Die allgemeine Syntax lautet: \begin{bashcode} $ mount [-t , -o