mdadm Softraid on SSD with TRIM

Seit Kernel 3.7 unterstützt das mdadm Softraid den TRIM Befehl.

SSDs benötigen Idealerweise Raum für ihren Wear leveling Algorithmus. Da das mdadm RAID aber die gesamte Partition als „belegt“ beansprucht, hat der SSD Controller wenig Ausweichmöglichkeiten und die Schreibperformance geht in den Keller. Da kann man nur die Spare Area mit hdparm vergrößern – verschenkt aber damit wertvollen Platz. Dateisysteme (z.B. ext4) verstehen schon länger den TRIM Befehl (Mountoption „discard“) – aber dies nützt(e) nichts wenn das Dateisystem auf einem Softraid liegt.

Bis Kernel 3.7 bekam man nur folgendes zu sehen:

root@node:~# fstrim /
fstrim: /: FITRIM ioctl failed: Operation not supported

Ab Kernel 3.7 sieht es dann besser aus:

root@node:~# fstrim -v /
/: 12858519552 bytes were trimmed

neuer Homeserver/NAS

Mein „altes“ Gehäuse und die enthaltene noch ältere CPU nebst Board haben einen Nachfolger erhalten. Der VDR und damit die TV Karte wird nicht mehr benötigt – daher muss es auch nicht mehr unbedingt ein HTPC Formfaktor sein. Der Server dient bei mir hauptsächlich als NAS und VDSL Router.

Folgend die Einkaufsliste:

  • Lian-Li PC-Q18 (4xSATA HotSwap Backplane)
  • ASUS P8H77-I Mini-ITX (2xSATA3 + 4xSATA2!)
  • INTEL Core i3-2120T 2600MHz 3M BOX
  • KINGSTON HyperX 16GB DDR3 1600MHz 2x8GB
  • 1x SAMSUNG SSD 830 64GB SATA 2,5z SATA III
  • 2x WD Desktop Green 3TB SATA 6Gb/s
  • 2x WD Desktop Green 2TB SATA 6Gb/s (aus der alten Kiste)
  • extra Gigabit Ethernet PCIe („Router“)
  • BeQuiet BN103 (300W)

Das Board ist meines Wissens z.Zt. eines der ganz wenigen mit 6 SATA Ports (davon 2 mit SATA3 6GB/s, für die SSD). Das Gehäuse ist sehr gut verarbeitet und glänzt mit der eingebauten SATA Backplane. Da sich das Gehäuse „schraubenlos“ öffnen lässt ist ein schneller Plattenwechsel kein Problem (wenngleich er auch hoffentlich selten vorkommt).

Auf dem Server läuft jetzt ein Ubuntu Server 12.04 und mittels KVM Virtualisierung ein Firewall/Router (derzeit Astaro UTM9 Home).

SATA Backplane. Die SSD befindet sich ganz unten (unter dem 3,5″ HDD)
das Board
the Front

 

HDD spindown check

Nachdem ich meine Platten jetzt schlafenlegen kann, würde ich auch gerne wissen wann und ob dies erfolgt…

# Usage
 
Output state:
./check_hdd_spindown.sh /dev/sda /dev/sdb /dev/sdc
 
Log state into file:
./check_hdd_spindown.sh /dev/sda /dev/sdb /dev/sdc >> /var/log/spindown.log &
#!/bin/sh
 
while [ 1 ]
do
        i=0
        for DRIVE in $*
        do
                DATE=`date +"%Y-%m-%d %H:%M:%S"`
                RESULT_OLD=${RESULT[i]}
                RESULT[$i]=`hdparm -C $DRIVE | grep state`
 
                if [ "$RESULT_OLD" != "${RESULT[i]}" ]
                        then echo $DATE $DRIVE ${RESULT[i]}
                fi
 
                i=$i+1
        done
 
        sleep 5
done

Festplatten abschalten

auf meinem VDR habe ich die Root-Partition auf eine Flash-Disk verlagert. Hauptziel war, die drei RAID-Platten bei nichtgebrauch Schlafenzulegen.

Den Timeout zum herunterfahren der Platten wird mit „hdparm“ eingestellt. Der angegebene Zahlenwert gibt dabei ein vielfaches von 5 sekunden an. Achtung: Ab einem Wert von 241 (20 Minuten) gibt der Wert ein vielfaches von 30 Minuten an.

Folgendes Kommando setzt den Timeout auf 5 Minuten:

hdparm -S 60 /dev/sda

Timeout 2 Stunden:

hdparm -S 244 /dev/sda

Suchen & Ersetzen

Oh man, wie oft vergesse ich das noch…

Ersetzt „tabelle1“ durch „tabelle2“ in der Datei dump.sql:

sed -i -e 's/tabelle1/tabelle2/' dump.sql

Ersetzt in allen PHP-Dateien rekursiv den String „name1“ durch „name2“ – aber nur in den Zeilen wo der String „user“ vorkommt:

find . -type f -name "*php" -exec sed -i -e '/user/ s/name1/name2/' {} \;

PHP APC Cache: GUI und Sicherheit

apc-guiGerade habe ich im PECL-Paket eine nette GUI für den APC-Cache gefunden. Es zeigt sehr anschaulich die Auslastung des Caches. Aus dem PECL-Paket wird dafür nur die apc.php in ein erreichbares Verzeichnis gelegt. Standardmäßig zeigt es die Cache-Auslastung des aktuellen virtuellen Hostings. Im Kopf der Datei lassen sich aber verschiedene Authentifizierungs-Optionen einstellen, sodass man z.B. einem User „admin“ die Cache-Hits aller Seiten auf dem Server zeigen kann.

Generell sei bemerkt, dass der APC-Cache immer global agiert. Dies ist auch durchaus sinnvoll – nur so spielt APC sein Potential voll aus. Jedoch sind die Statistikvariablen für jedes PHP-Script auf dem Server auswertbar (so auch für das apc.php Script). Betreiber von Shared-Hosting Systemen sollten sich im Klaren darüber sein, dass so z.B. die Pfade von häufig verwendeten Dateien für jeden Hosting-User abrufbar sind. Soweit ich die Konfiguration bisher interpretiere, lässt sich auch durch jeden User per PHP-Script der gesamte Cache resetten…

Solaris: Neuland

opensolarisMein Ziel ist es mit OpenSolaris mittelfristig einen Storageserver aufzusetzen um in Zukunft dann voll auf ZFS zu setzen. Doch zunächst die Sonne selbst.

Da ich von der Linux-Seite komme, sollte ich mich eigentlich in Solaris zurechtfinden. Die nächsten Tage/Wochen/Jahre werden zeigen ob diese Annahme zutrifft 😉.

„Solaris: Neuland“ weiterlesen

RAID1 in RAID5 umwandeln

Wenn Speicherplatzbedarf ständig wächst und Datensicherheit wichtig ist, bietet sich ein RAID5 an. Soweit bekannt. Nur was ist zu tun, wenn man zunächst nur auf Datensicherheit (RAID1) gesetzt hat, später aber feststellt, dass man gerne mehr Speicherplatz und Datensicherheit (RAID5) hätte?

Laut Theorie ist ein RAID5 mit 2 Laufwerken nichts anderes als ein RAID1 (Spiegelung). Die Parity-Informationen entsprechen dann einer Spiegelung des Laufwerks. Gut erklärt wird das z.B. hier. Ein RAID1 unterscheidet sich also gegenüber einem RAID5 nur durch einen anderen RAID-Header. Ausprobiert hat das ganze zum Glück auch schon hier jemand. Soweit die Theorie – für die Umsetzung in der Praxis habe ich doch erst mal eine Sicherung der Daten angelegt.

„RAID1 in RAID5 umwandeln“ weiterlesen