# HAMMER

HAMMER ist ein hochverfügbares 64-bit Dateisystem, das von Matthew Dillon für DragonFly BSD entwickelt wurde und wird. Es ist ein Copy-On-Write-Dateisystem, das auf B⁺-Bäumen basiert. Wesentliche Funktionen sind Prüfsummen zur Fehlererkennung und Behebung, Versionsverwaltung auf Dateisystemebene (Verlaufsaufzeichnung), Schnappschüsse (auch NFS-exportierbar), master-multislave Replikationen (Redundanz) und fsck-freies mounten. HAMMER unterstützt außerdem die Deduplikation von Datenblöcken, was bedeutet, dass identische Datenblöcke nur jeweils einmal auf den Datenträger geschrieben werden.

## Funktionen

Das HAMMER-Dateisystem verfügt über eine feine und eine grobe Verlaufsaufzeichnung. Die grobe Verlaufsaufzeichnung besteht aus jederzeit erstellbaren Schnappschüssen, welche beliebig lange gespeichert werden können. Die feine Verlaufsaufzeichnung umfasst standardmäßig die Änderungen der letzten 30–60 Sekunden, diese Dauer ist aber konfigurierbar. Durch eine kurze Überprüfung der feinen Verlaufsaufzeichnung ist es selbst nach einem Systemabsturz möglich, das Dateisystem ohne eine vollständige Überprüfung der Daten wieder in Betrieb zu nehmen.
Auf einem HAMMER-Dateisystem können bis zu 65,536 master (schreib- und lesbar) und slave (nur lesbar) Pseudo-Dateisysteme (PFSs) mit jeweils unabhängigen Konfigurationen und Inode-Nummerierung erzeugt werden. Jedes PFS (sowohl master als slave) lässt sich lokal oder über das Netzwerk auf mehrere Slaves spiegeln.
Die maximale Größe für ein Dateisystem liegt bei 1 EiB, zusammengesetzt aus 256 Datenträgern von je 4 PiB (=4096 TiB) Speicherkapazität. Mittels CRC-Prüfsummen wird die Integrität von Daten und Metadaten überprüft. Die Prüfsummen werden auch bei der Daten-Deduplikation verwendet, wo im Zweifelsfall aber auch auf bitweises Vergleichen von Datenblöcken zurückgegriffen wird.

## Einschränkungen

Regelmäßige Wartungsarbeiten sind notwendig, um Speicher nach dem Löschen von Dateien wieder freizugeben und die Festplatte zu defragmentieren, diese können aber nebenläufig zu anderen Operationen auf dem Dateisystem ausgeführt werden. Standardmäßig führt unter DragonFly BSD ein Cron job die notwendigen Aufgaben täglich aus. HAMMER unterstützt weiter keine multi-master Konfigurationen.
HAMMER bietet, wie viele andere Dateisysteme, aber im Unterschied zu beispielsweise ZFS, keine native Verschlüsslung. DragonFly BSD bedient sich für den Massenspeicher, wie für GNU/Linux üblich, der Verschlüsslung mit LUKS.

## Entwicklung

Das Dateisystem wurde primär für DragonFly BSD als funktionsstarkes Analogon zu ZFS entwickelt, welches damals stark trotz CDDL an Popularität gewann. Es wurden in der Vergangenheit verschiedene Optimierungen der Leistung unternommen.

## HAMMER2

Die zweite Version von HAMMER, die Nachfolge mit der Bezeichnung HAMMER2, wird seit DragonFly BSD 5.2 (April 2018) als standardmäßiges Dateisystem empfohlen. Dennoch kann HAMMER, die vorherige Version, noch verwendet werden.
Die Arbeit von Matthew Dillon für diese nachfolgende Version zog sich über viele Jahre, als eines der Projekte für das Betriebssystem DragonFly BSD. Sie sollte bereits 2013 verfügbar sein. Im Rahmen des Google Summer of Code 2013 implementierte Daniel Flores transparente Kompression für HAMMER2 mittels LZ4 und zlib. Seit DragonFly BSD 4.10 konnte HAMMER2 optional genutzt werden.