Dateisysteme

Inodes

Inodes-Verbrauch anzeigen:

# df -i

Cluster-Dateisysteme

Der Sinn eines Cluster-Dateisystems ist es, die Zugriffe auf ein Storage Area Network zu regeln, da es zu einem Desaster käme, wenn A und B gleichzeitig die gleiche Datei im Storage Area Network schreiben würden. Nicht mehr und nicht weniger.

Generell wird zwischen den Architekturen shared nothing und shared all unterschieden.

Typischer Vertreter des active-active-Clusters mit shared-nothing-Architektur ist DB2 mit EEE (gesprochen „triple e“). Hier beherbergt jeder Clusterknoten eine eigene Datenpartition. Ein Leistungsgewinn wird durch die Partitionierung der Daten und die damit einhergehende verteilte Verarbeitung erzielt. Ausfallsicherheit wird hiermit nicht gewährleistet.

Anders ist dies beim shared-all-Cluster. Diese Architektur gewährleistet durch einen konkurrierenden Zugriff auf Shared Storage, dass alle Clusterknoten auf den gesamten Datenbestand zugreifen können. Neben Skalierung und Leistungssteigerung wird durch diese Architektur auch eine zusätzliche Ausfallsicherheit erreicht. Fällt ein Knoten aus, übernehmen die anderen Knoten seine Aufgabe(n). Ein typischer Vertreter der shared-all-Architektur ist der Oracle Real Application Cluster (RAC).

Um die Konsistenz der Daten sicherzustellen, müssen die Verwaltungsdaten, d. h. Verzeichnisse, Attribute und Speicherplatzzuweisungen (Metadaten), koordiniert gespeichert werden. Hierzu wird üblicherweise ein Metadaten-Server eingesetzt, der all diese Daten von den verschiedenen Teilnehmern am Cluster-Dateisystem übermittelt bekommt, üblicherweise über ein Ethernet. Dieser übernimmt auch die Koordinierung der Caches und der Dateisperren (Locks). In manchen Cluster-Dateisystemen kann der Metadaten-Server auch andere Aufgaben übernehmen, bei anderen (CXFS) müssen ein oder mehrere dedizierte Metadatenserver eingesetzt werden um die Betriebssicherheit zu erhöhen.

Gelingt den Servern aufgrund einer Störung im Netzwerk die Synchronisation nicht, so besteht die Gefahr von Inkonsistenzen. Üblicherweise wird das betroffene Dateisystem sich dann auf all jenen Servern herunterfahren, die (sich selbst eingerechnet) nur noch maximal 50 % der Gesamtheit an Servern sehen können. Da es nur maximal eine Gruppe geben kann, die mehr als 50 % der Server umfasst, bleibt nur diese aktiv, es können keine Inkonsistenzen entstehen. Man sagt auch, das Quorum liegt bei über 50 %.

Aus meinen Testerfahrungen kommen folgende Clusterfilesysteme für mich in Frage:

  1. GlusterFS
  2. XtreemFS (ab Version 1.3)

XtreemFS weist seit der Version 1.3 eine sehr hohe Ausfallsicherheit auf, da es keinen single point of failure mehr besitzt. GlusterFS kann man direkt über das Ubuntu-Repository (mit allen Sicherheitsupdates) beziehen. Aber auch für XtreemFS gibt es Debian-Pakete auf dem XtreemFS-Server, die von Ubuntu installiert werden können.

XtreemFS besitzt in der Version 1.3 etwas mehr nützliche Funktionen und ist auch etwas flexibler als GlusterFS. Weiterhin ist GlusterFS weniger ambitioniert als XtreemFS, selbst Ceph ist stärker ambitioniert als GlusterFS.

XtreemFS auch mit dem Ziel entwickelt worden, Clusterknoten über das Internet anzubinden. GlusterFS kommt mit langsameren Verbindungen als 100Mbit zwischen den Clusterknoten nicht so gut zurecht.

Beide, GlusterFS und XtreemFS, besitzen aber auch eine Schwäche! Beide Clients laufen im FUSE-Mode, dadurch wird die Bandbreite eingeschränkt, und nur XtreemFS besitzt die Fähigkeit mehrere Verbindungen gleichzeitig zu öffnen um diese Schwäche auszugleichen!

fsck-Vergleich

ext3

root@testhost:~# time fsck -fy /dev/data/fscktest
fsck from util-linux-ng 2.17.2
e2fsck 1.41.11 (14-Mar-2010)
Durchgang 1: Prüfe Inodes, Blocks, und Größen
Durchgang 2: Prüfe Verzeichnis Struktur
Durchgang 3: Prüfe Verzeichnis Verknüpfungen
Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe Gruppe Zusammenfassung
/dev/mapper/data-fscktest: 4505814/6553600 Dateien (0.1% nicht zusammenhängend), 8143555/26214400 Blöcke
real    4m17.636s
user    0m11.950s
sys     0m14.080s

ext4

root@testhost:~# time fsck -fy /dev/data/fscktest
fsck from util-linux-ng 2.17.2
e2fsck 1.41.11 (14-Mar-2010)
Durchgang 1: Prüfe Inodes, Blocks, und Größen
Durchgang 2: Prüfe Verzeichnis Struktur
Durchgang 3: Prüfe Verzeichnis Verknüpfungen
Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe Gruppe Zusammenfassung
/dev/mapper/data-fscktest: 4505814/6553600 Dateien (0.0% nicht zusammenhängend), 8093411/26214400 Blöcke
real    0m31.204s
user    0m10.980s
sys     0m6.480s

JFS

root@testhost:~# time fsck -fy /dev/data/fscktest
fsck from util-linux-ng 2.17.2
fsck.jfs version 1.1.12, 24-Aug-2007
processing started: 11/9/2010 17.11.30
The current device is:  /dev/mapper/data-fscktest
Block size in bytes:  4096
Filesystem size in blocks:  26214400
**Phase 0 - Replay Journal Log
**Phase 1 - Check Blocks, Files/Directories, and  Directory Entries
**Phase 2 - Count links
**Phase 3 - Duplicate Block Rescan and Directory Connectedness
**Phase 4 - Report Problems
**Phase 5 - Check Connectivity
**Phase 6 - Perform Approved Corrections
**Phase 7 - Rebuild File/Directory Allocation Maps
**Phase 8 - Rebuild Disk Allocation Maps
104857600 kilobytes total disk space.
   982634 kilobytes in 706044 directories.
 29243900 kilobytes in 3479480 user files.
        0 kilobytes in extended attributes
  2186738 kilobytes reserved for system use.
 74409596 kilobytes are available for use.
Filesystem is clean.
.....|...
real    3m3.351s
user    0m4.700s
sys     0m11.470s

Dateisystemüberprüfung

Eigentlich sollte fsck ja reichen… aber leider erkennt es im Einzelfall nicht das richtige Dateisystem und versucht ein ext3 anzusprechen und manchmal möchte man, das auch ein „sauberes“ Dateisystem überprüft wird…

Deshalb habe ich dieses Script geschrieben, damit wird garantiert jedes Dateisystem richtig angesprochen und auch in jedem Fall überprüft.

#!/bin/bash
if [ -n "${1}" ] ; then
    blkid ${1} | while read MDEV IDS;
    do
        FST="$(echo "${IDS}" | tr -s ' ' '\n' | egrep '^TYPE=' | awk -F'=' '{gsub("\"",""); print $2}';)";
        MDEV="$(echo "${MDEV}"|tr -d ':')";
        if [ "${FST}" != "swap" ] ; then
                fsck -t ${FST} -f -y ${MDEV};
        fi;
    done
else
        echo "${0} [Laufwerksdatei]"
fi

Datenträgersoftware

sonstiges

Dateiwiederherstellung / forensics

 *  app-forensics/magicrescue
    Latest version available: 1.1.4-r1
    Latest version installed: [ Not Installed ]
    Size of files: 87 kB
    Homepage:      http://jbj.rapanden.dk/magicrescue/
    Description:   Find deleted files in block devices
    License:       GPL-2
 *  sys-fs/dd-rescue
    Latest version available: 1.10
    Latest version installed: [ Not Installed ]
    Size of files: 16 kB
    Homepage:      http://www.garloff.de/kurt/linux/ddrescue/
    Description:   similar to dd but can copy from source with errors
    License:       GPL-2
 *  sys-fs/ddrescue
    Latest version available: 1.8
    Latest version installed: [ Not Installed ]
    Size of files: 41 kB
    Homepage:      http://www.gnu.org/software/ddrescue/ddrescue.html
    Description:   Copies data from one file or block device (hard disk, cdrom, etc) to another, trying hard to rescue data in case of read errors
    License:       GPL-2
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki