web-dev-qa-db-ja.com

4kハードドライブfreebsdgpartおよびzfs

私は3つのhddを持っており、次のcamcotrolが識別します。

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 # 

上記のように、セクターサイズは次のように検出されます。

sector size           logical 512, physical 4096, offset 0

4Kドライブのチューニングに関するトピックはすでにいくつかあります。上記の3つのドライブからZFS(raidz)を作成したいのですが、次の質問があります。

  1. これらのドライブは4k drivesですか? (物理セクターのサイズは4kですが、論理は512bとして報告されているためです)
  2. 上記のダイバーがcorrect alignmentを取得するために推奨されるgpartは何ですか(1つのfreebsd-zfsパーティションを作成したい)
  3. ここでzpoolのチューニングは私が考慮すべきものですか? (ルート、システム、およびスワップは、上記のドライブに含まれていてはなりません。これらのドライブは、「純粋な」ファイルストレージ(およびホームディレクトリ)専用です。
2
jm666

ポイント2から。すべてのベストプラクティスにおいて、ZFSは管理するドライブ全体に「供給」される必要があります。特別なパーティション分割は必要ありません。

それの残りに関して:

このリンク 役立つヒントがたくさんありますが、そのうちのいくつかを繰り返します。

各vdev(ミラーやraidzなど)には1つのシフトがあります。 ashift = 9は512バイトセクター、ashift = 12は4kセクターです。 (2 ^ ashift = ector-sizeとして計算)

後でプールを破棄して再作成することなく、将来の互換性を確保するために、実際のドライブ機能に関係なく、通常はashift = 12を使用することをお勧めします(vdevの作成後に変更できないため)。

リンクから:

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

Gnopコマンドは、ada0の強制4kアライメントパススルーデバイスをada0.nopとして作成します。次に、プールが作成されます。 ZFSは、vdev全体にashift = 12を使用します。 pool/vdevを作成したら、ada0.nopパススルーデバイスを削除することをお勧めします。

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

これで、プールはデバイスada0、ada1、およびada2でインポートされます。そして、それはそれが作成されたときにロックインされたashift = 12をまだ持っています。

それでおしまい。 ZFSがドライブ全体を管理することで、準備が整い、準備が整います。

2
killermist

これらの4kドライブはありますか?はい、これの指標である4096バイトの物理を報告していることがわかります。 512バイトの論理レポートは、ドライブメーカーが下位互換性を試みた結果です(したがって、混乱を招きます)。

gpart?あなたの状況では、次のコマンドを使用してディスクをgpartします。

# -- 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には、私たちが認識している、または見たパフォーマンスのペナルティや欠点はありません。私たちはこれを何十もの生産場所に何年にもわたって展開してきました。また、次の利点もあります。

  • (-l)パーティション(つまり、disk0、disk1)にラベルを付けることができるので、ポート番号が変わっても(つまり、ada0が常にdisk0であるとは限りません)、どのディスクがどれであるかがわかります。 gpart show -lは、これらのラベルが付いたGPTテーブルを表示します。
  • 適用できませんが、ZFSから起動し、同じディスク上にスワップパーティション(GMIRRORを使用)を設定することもできます。
  • 1 MiBの配置により、パーティションが1 MiBに丸められるため、ディスクの最後に少しの空き領域ができてしまいます。これにより、ドライブを別のベンダーに交換して、ドライブが非常に小さくなり、使用できなくなるという状況を回避できます。

また、上記の最初のことはsysctl vfs.zfs.min_auto_ashift=12;を実行することであり、最後のことはその値をチェックすることです。 ZFSでは、ashift = 9がデフォルトであり、512バイトのディスクに適していますが、4kディスクの場合、書き込みの増幅とパフォーマンスの低下が見られます。これは事実上同様ですが、パーティションの不整合による原因ではありません。理由は不明ですが、GNOPを使用してもZFSがashift = 12を自動的に選択しないため、問題が発生することがわかりました。このページでは、すべてをうまく説明しています: http://savagedlight.me/2012/07/15/freebsd-zfs-advanced-format/

チューニング?作業負荷によって異なります。 LZ4圧縮は、最悪の場合無視できるオーバーヘッドであり、圧縮可能なファイルのパフォーマンスを大幅に向上させることが証明されているため、すべての新しい展開で有効になりました。

# -- Set compresison on
zfs set compression=lz4 zstorage;

# -- See compression performance
zfs get used,compressratio,compression,logicalused zstorage;

唯一の「欠点」は、これがベンチマークに影響を与えることです。これをオンにすると、bonnie++は、実際のパフォーマンスを反映していない可能性のある非常識な(非常に素晴らしい)数値を報告します。 dd if=/dev/zero of=test.datスタイルのベンチマークと同じです。

1
Adam Strohl