4k festplatten freebsd gpart und zfs

4609
jm666

Ich habe 3 festplatten, mit der nächsten camcotrolidentifizieren.

root@cirmos:/root # camcontrol identify ada1 pass2: <WDC WD10EZEX-00RKKA0 80.00A80> ATA-8 SATA 3.x device pass2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)  protocol ATA/ATAPI-8 SATA 3.x device model WDC WD10EZEX-00RKKA0 firmware revision 80.00A80 serial number WD-WMC1S4587539 WWN 50014ee003930f6e cylinders 16383 heads 16 sectors/track 63 sector size logical 512, physical 4096, offset 0 LBA supported 268435455 sectors LBA48 supported 1953525168 sectors PIO supported PIO4 DMA supported WDMA2 UDMA6   Feature Support Enabled Value Vendor read ahead yes yes write cache yes yes flush cache yes yes overlap no Tagged Command Queuing (TCQ) no no Native Command Queuing (NCQ) yes 32 tags SMART yes yes microcode download yes yes security yes no power management yes yes advanced power management no no automatic acoustic management no no media status notification no no power-up in Standby yes no write-read-verify no no unload no no free-fall no no data set management (TRIM) no root@cirmos:/root #  

Wie oben zu sehen, wird die Sektorgröße erkannt als:

sector size logical 512, physical 4096, offset 0 

Hier sind bereits einige Themen zum Thema 4k-Tuning. Ich möchte ZFS (raidz) von über 3 Laufwerken erstellen und habe die nächsten Fragen:

  1. Sind diese Laufwerke 4k drives? (Fragen, weil die physische Sektorgröße 4k beträgt, aber logisch als 512b angegeben wird)
  2. Was ist der empfohlene gpartfür die oben genannten Taucher? correct alignment(Wollen Sie eine freebsd-zfsPartition erstellen ?)
  3. Ist hier Zpool Tuning, was ich beachten sollte? (Root, System und Swap sollten sich nicht in den oben genannten Laufwerken befinden - diese Laufwerke dienen nur der "reinen" Dateispeicherung (und den Basisverzeichnissen)).
2

2 Antworten auf die Frage

2
killermist

Beginnend mit Punkt 2; In allen Best Practices sollte ZFS ganze Laufwerke "verwalten". Keine spezielle Aufteilung erforderlich.

Was den Rest angeht:

Dieser Link enthält viele nützliche Hinweise, von denen ich einige wiederholen möchte.

Jeder vdev (wie ein Spiegel oder ein Raidz) hat eine einzige Verschiebung. Ashift = 9 ist 512 Byte Sektoren, Ashift = 12 4K Sektoren. (berechnet als 2 ^ Verschiebung = Sektorgröße)

Um eine zukünftige Kompatibilität zu gewährleisten, ohne den Pool später zerstören und neu erstellen zu müssen, wird im Allgemeinen die Verwendung von ashift = 12 unabhängig von den tatsächlichen Laufwerksfunktionen empfohlen (da er nach der Erstellung von vdev nicht geändert werden kann).

Über den Link:

# gnop create -S 4096 ada0 # zpool create tank raidz ada0.nop ada1 ada2 # zdb | grep ashift ashift: 12 

Der Befehl gnop erstellt ein erzwungenes Passthrough-Gerät mit 4k-Ausrichtung für ada0 als ada0.nop. Anschließend wird der Pool erstellt. ZFS verwendet dann asift = 12 für die gesamte vdev. Wenn der Pool / vdev erstellt wurde, wird empfohlen, das Passthrough-Gerät ada0.nop zu entfernen.

# zpool export tank # gnop destroy ada0.nop # zpool import tank 

Nun wird der Pool mit den Geräten ada0, ada1 und ada2 importiert. Und es wird immer noch die gesperrte Verschiebung = 12 haben, mit der es erstellt wurde.

Das ist es. Mit ZFS, das die gesamten Laufwerke verwaltet, sind Sie einsatzbereit.

Wenn Sie ZFS das gesamte Laufwerk zuweisen, gehen Sie auch das Risiko ein, dass Sie das ausgefallene Laufwerk ersetzen müssen und der Ersatz, den Sie kaufen, nur einen Sektor weniger als die alte Festplatte hat in der Lage sein, es zu benutzen. IMO ist es eine bessere Praxis, eine Partition zu erstellen, die etwas kleiner als die gesamte Festplatte ist. Eine solche Marge würde es Ihnen ermöglichen, andere Plattenmodelle mit derselben Kapazität zu verwenden. Marcin Kaminski vor 10 Jahren 0
Meh. Aber um genau zu sein: Wie oft nehmen Ersatzlaufwerke (vor allem mit der Zeit, die berücksichtigt werden sollte) an Größe zu? killermist vor 10 Jahren 0
Mir ist das in der Vergangenheit schon zweimal passiert. Ich würde es lieber so einrichten, dass es in der Zukunft das Potenzial für Vermutungen aus dem Prozess nimmt. Marcin Kaminski vor 10 Jahren 1
Die "bewährte Methode", "ZFS die ganze Festplatte zu filmen" ist ein Solaris-Ism, der nicht für FreeBSD gilt. Unter Solaris würde ZFS die Zwischenspeicherung deaktivieren, wenn eine Partition gegenüber einer echten Festplatte "eingespeist" wird. FreeBSD hat kein solches Problem. Adam Strohl vor 9 Jahren 0
@AdamStrohl Meh. (Das ist ein Fachbegriff.) Wenn Sie der Meinung sind, dass der Vorschlag, ZFS-Partitionen anstelle von ganzen Laufwerken einzuspeisen, eine großartige Idee ist, schlagen Sie sie als Antwort vor. . (Hinweis: Es ist nichts, was einer großartigen (oder sogar guten) Idee ähnelt.) killermist vor 9 Jahren 0
@killermist habe ich als Antwort eingereicht. Ich habe ein paar Stellen kennengelernt, an denen "Partitionen sind in Ordnung" eindeutig angegeben wurden: http://lists.freebsd.org/pipermail/freebsd-questions/2013-January/… und http://forums.freebsd.org /threads/zfs-and-disk-labeling-question.33896 unter anderem. Zusätzlich haben wir Dutzende von Clients mit ZFS unter Partitionen in der Produktion, die viele, viele Server umfassen. Was ist konkret "keine großartige Idee"? Vielleicht kann ich etwas testen? Adam Strohl vor 9 Jahren 0
1
Adam Strohl

Sind das 4k-Laufwerke? Ja, Sie können sehen, dass sie 4096 Byte physisch melden, was der Indikator dafür ist. Das logische Berichtswesen mit 512 Byte ist das Ergebnis eines Versuchs der Laufwerkhersteller, die Abwärtskompatibilität zu gewährleisten (und verwirrt dadurch).

gpart In Ihrer Situation würde ich die folgenden Befehle verwenden, um die Platte herauszuschneiden:

# -- Force ashift to be at least 12 sysctl vfs.zfs.min_auto_ashift=12;  # -- Create GPT tables gpart create -s gpt ada0 && gpart create -s gpt ada1 && gpart create -s gpt ada2;  # -- Create paritions, align start/stop to 1 MiB boundaries gpart add -a 1m -t freebsd-zfs -l disk0 ada0 &&  gpart add -a 1m -t freebsd-zfs -l disk1 ada1 &&  gpart add -a 1m -t freebsd-zfs -l disk2 ada2;  # -- Not needed under FreeBSD 10.1 but sometimes is on # older versions to get /dev/gpt to update. # Run if you don't see /dev/gpt/disk0 etc devices: true > /dev/ada0; true > /dev/ada1; true > /dev/ada2;  # -- Create temporary GNOP 4k devices gnop create -S 4k /dev/gpt/disk0 && gnop create -S 4k /dev/gpt/disk1 && gnop create -S 4k /dev/gpt/disk2;  # -- Create the zpool zpool create -f -m /mnt zstorage raidz /dev/gpt/disk0.nop /dev/gpt/disk1.nop /dev/gpt/disk2.nop;  # -- Export zpool export zroot;  # -- Remove temproary GNOP devices gnop destroy /dev/gpt/disk0.nop && gnop destroy /dev/gpt/disk1.nop && gnop destroy /dev/gpt/disk2.nop;  # -- Bring back pool with "real" devices zpool import -d /dev/gpt zstorage;  # -- Check status zpool status;  # -- Verify ashift is 12 zdb | grep ashift 

gpart-ing hat keine Leistungseinbußen oder -nachteile, die uns bekannt sind oder gesehen wurden. Wir haben dies seit vielen, vielen Jahren an Dutzenden von Produktionsstandorten eingesetzt. Es bietet auch die folgenden Vorteile:

  • Sie können (die -l) Partitionen benennen (dh disk0, disk1), so dass Sie wissen, welche Festplatten welche sind, auch wenn sich deren Portnummern ändern (dh ada0 ist möglicherweise nicht immer disk0). gpart show -lzeigt die GPT-Tabelle mit diesen Bezeichnungen.
  • Während dies für Sie nicht zutrifft, können Sie ZFS booten und Partitionen austauschen (dh GMIRROR verwenden), die sich auf denselben Datenträgern befinden.
  • Aufgrund der Ausrichtung von 1 MiB haben Sie am Ende der Festplatte etwas freien Speicherplatz, da Ihre Partition auf 1 MiB gerundet ist. Dies vermeidet eine Situation, in der Sie ein Laufwerk durch einen anderen Hersteller ersetzen und letztendlich immer kleiner werden und somit unbrauchbar werden.

Sie werden auch bemerken, dass das Erste, was Sie oben machen, zu tun ist, sysctl vfs.zfs.min_auto_ashift=12;und das Letzte, was Sie tun, ist, diesen Wert zu überprüfen. Unter ZFS ist ashift = 9 der Standardwert, der für 512-Byte-Festplatten geeignet ist. Bei 4-KByte-Festplatten werden jedoch Schreibverstärkung und Leistungsverlust angezeigt, die zwar ähnlich sind, jedoch nicht aufgrund einer fehlerhaften Partitionierung der Partition auftreten. Wir haben gesehen, dass ZFS aus unbekannten Gründen selbst bei GNOP nicht automatisch eine Verschiebung = 12 auswählt, sodass das Problem erzwungen wird. Diese Seite beschreibt das Ganze schön: http://savagedlight.me/2012/07/15/freebsd-zfs-advanced-format/

Tuning Kommt auf deine Arbeitsbelastung an. Wir aktivieren jetzt die LZ4-Komprimierung für alle neuen Bereitstellungen, da sich im schlimmsten Fall ein vernachlässigbarer Overhead erwiesen hat und die Leistung für komprimierbare Dateien bestenfalls drastisch gesteigert wird.

# -- Set compresison on zfs set compression=lz4 zstorage;  # -- See compression performance zfs get used,compressratio,compression,logicalused zstorage; 

Der einzige Nachteil ist, dass dies Auswirkungen auf das Benchmarking haben bonnie++wird. Es werden einige verrückte (wirklich beeindruckende) Zahlen angezeigt, wenn diese Option aktiviert ist und die tatsächliche Leistung wahrscheinlich nicht widerspiegelt. Gleiches gilt für dd if=/dev/zero of=test.datStyle-Benchmarking.