Vorbereiten eines ZFS raidz1 mit nur 2 Festplatten unter Linux.

Die Ausgangssituation ist wie folgt, ich möchte ein RaidZ1 mit ZFS unter Linux erstellen. Allerdings wurden bis jetzt nur 2 der 3 benötigten Festplatten geliefert. Da ich ungeduldig bin soll Raid schon jetzt in betrieb gehen und die parity Festplatte erst später hinzugefügt werden.

Leider bietet ZFS keine native Möglichkeit um ein Raid mit einem fehlenden Laufwerk zu erstellen. Also müssen wir ein Laufwerk für den Zeitraum der Erstellung bereitstellen. Die Lösung dafür ist ein Loop Device welches eine normale Datei auf dem Speichermedium als als Blockdevice bereitstellt. Dazu wird unter Linux für losetup verwendet, andere Betriebssysteme haben ähnliche Lösungen. Damit das funktioniert muss das Virtuelle Device genauso groß sein wie die echten Festplatten. In meinem Fall sind das 8TB und da ist schon eines der Hauptprobleme. Diese Festplatten sind zum Zeitpunkt der Erstellung des Artikels ganz neu auf dem Markt und die größte Speicherkapazität die man kaufen kann.

Die Lösung liegt in einem der Kernfeatures von ZFS, Deduplikation. Also ist das vorgehen wie folgt, wir erstellen eine mit /dev/zero gefüllte Datei die genauso groß ist wie die physikalischen Festplatten (oder SSDs) auf einem ZFS Laufwerk mit deduplication. Dann machen wir ein Loop Device, erstellen das Raidz1 und entfernen das Loop Device aus dem Raidverbund. So bald die 3te Festplatte verfügbar ist wird diese in das Raid eingebunden.

Hier das Vorgehen wie ich mein Raidz1 mit 8TB Festplatten gemacht habe. Dabei ist zu beachten das ich bereits ein Raid mit aktivierte Deduplikation angelegt habe.

Aktivieren von  Deduplikation auf dem bestehenden Dateisystem TB3/temp.

/schoenbloed# zfs set dedup=on TB3/temp

Erstellen der leeren Datei mit 8.000.000.000.000 Bytes.

/schoenbloed# dd if=/dev/zero of=TB3/temp/dummy_disk bs=4096 count=1953125000

Erstellen des Loop Devices mit automatischer freier Device Zuweisung und anzeigen aller Loop Devices

/schoenbloed# losetup -f TB3/temp/dummy_disk
/schoenbloed# losetup -a
/dev/loop0: [001b]:7 (TB3/temp/dummy_disk)

Erstellen des ZFS raidz1 mit dem Name TB8 sowie den 2 physischen Festplatten und einer temporären virtuellen „Festplatte“.

/schoenbloed# zpool create TB8 raidz1 /dev/sda /dev/sdb /dev/loop0
/schoenbloed# zpool status TB8

  pool: TB8
 state: ONLINE
  scan: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	TB8                                     ONLINE       0     0     0
	  raidz1-0                              ONLINE       0     0     0
	    sda                                 ONLINE       0     0     0
	    sdb                                 ONLINE       0     0     0
	    loop0                               ONLINE       0     0     0

errors: No known data errors

Loop Device „offline“ nehmen.

/schoenbloed# zpool offline TB8 /dev/loop0
/schoenbloed# zpool status TB8

  pool: TB8
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
	Sufficient replicas exist for the pool to continue functioning in a
	degraded state.
action: Online the device using 'zpool online' or replace the device with
	'zpool replace'.
  scan: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	TB8                                     DEGRADED     0     0     0
	  raidz1-0                              DEGRADED     0     0     0
	    sda                                 ONLINE       0     0     0
	    sdb                                 ONLINE       0     0     0
	    loop0                               OFFLINE      0     0     0

errors: No known data errors

/schoenbloed# df -h TB8
Filesystem Size Used Avail Use% Mounted on
TB8 15T 128K 15T 1% TB8

Erst jetzt sollten Daten auf das Dateisystem kopiert werden, weil wir sonst in die Gefahr laufen das die dummy_disk Datei zu groß für das deduplizierte Laufwerk wird.

Im nächsten Schritt haben wir die 3te Festplatte bekommen und fügen Sie dem Raid hinzu.

/schoenbloed# zpool replace TB8 /dev/loop0 /dev/sdc

Mittels „zpool status TB8“ können wir den Status des Resilvern ansehen. Sobald das fertig ist, ist das Raid voll einsatzbereit.

Notice: This work is licensed under a BY-NC-SA. Permalink: Vorbereiten eines ZFS raidz1 mit nur 2 Festplatten unter Linux.

Comments are closed.