私は何年もの間MD raid + LVMを使用してきましたが、最近はZFSを調べることにしました。これを試すために、プライマリサーバーと同じレイアウト(7台の「SATA」ドライブまたはさまざまなサイズ)を持つVirtualBox VMを作成しました。
現在、MD + LVM構成の近似値を使用して設定し、ZFSを試してみるためのスペースを確保するために、ファイル、LV、VGなどを並べ替えるために必要な手順を続けています。すべてがよさそうだった。稼働時間の3日以内にスペースが設置されるまで、PVを移動して再配置しました。
最後に、最初のZPoolを作成しました。
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdb1 ONLINE 0 0 0
sdc1 ONLINE 0 0 0
sdd1 ONLINE 0 0 0
sde1 ONLINE 0 0 0
sdg1 ONLINE 0 0 0
errors: No known data errors
複数のZFSデータセットを作成し、ファイルの使用とcp
コピーを開始しましたtar
。たとえばcd /data/video;tar cf - .|(cd /tank/video;tar xvf -)
。
その後、ホストシステムにエラーは表示されませんでしたが、仮想マシンでSATAエラーが見つかりました。
Apr 6 10:24:56 model-zfs kernel: [291246.888769] ata4.00: exception Emask 0x0 SAct 0x400 SErr 0x0 action 0x6 frozen
Apr 6 10:24:56 model-zfs kernel: [291246.888801] ata4.00: failed command: WRITE FPDMA QUEUED
Apr 6 10:24:56 model-zfs kernel: [291246.888830] ata4.00: cmd 61/19:50:2b:a7:01/00:00:00:00:00/40 tag 10 ncq 12800 out
Apr 6 10:24:56 model-zfs kernel: [291246.888830] res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
Apr 6 10:24:56 model-zfs kernel: [291246.888852] ata4.00: status: { DRDY }
Apr 6 10:24:56 model-zfs kernel: [291246.888883] ata4: hard resetting link
Apr 6 10:24:57 model-zfs kernel: [291247.248428] ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Apr 6 10:24:57 model-zfs kernel: [291247.249216] ata4.00: configured for UDMA/133
Apr 6 10:24:57 model-zfs kernel: [291247.249229] ata4.00: device reported invalid CHS sector 0
Apr 6 10:24:57 model-zfs kernel: [291247.249254] ata4: EH complete
このエラーはさまざまなドライブで複数回発生し、「READ FPDMA QUEUED」または(2回)「WRITE DMA」コマンドがカーネルで最終的に次のように報告されるまで失敗します。
Apr 6 11:51:32 model-zfs kernel: [296442.857945] ata4.00: NCQ disabled due to excessive errors
これにより、エラーが報告されるのを防ぐことはできません。
インターネット検索によると、このバグは約4年前にVirtualBox.orgのウェブサイトに文書化されていました。https://www.virtualbox.org/ticket/8311)VirtualBoxバージョン4.0.2の場合、明らかに修正されたと見なされましたが、その後再び開かれました。
私はDebian(Sid)カーネルバージョン3.16.0-4-amd64(またゲストとホストOS)でVirtualBox 4.3.18_Debian r96516を実行しています。 ZFSのバージョンはZFSonLinux.org/debian.html 0.6.3です。
私はVirtualBoxでZFSを試している唯一の人が私だったことを信じられないので、今後数年間これをより多くのことをするつもりだと思いました。したがって、このバグが識別され修正されたと思いました。 ZFS と VirtualBox の 2 つのバージョンは Oracle によって維持されます。
それとも、ZFSがVMを限界まで押し込み、エミュレートされたドライブ/コントローラが十分に迅速に応答できない場合ですか?
修正する:
プールの作成後、14時間以内にVMが204個のカーネルataエラーを報告しました。最も失敗したコマンドは「WRITE FPDMA QUEUED」であり、「READ FPDMA QUEUED」、「WRITE DMA」、および単一の「FLUSH CACHE」がその後に続いた。おそらくZFSはこれらのコマンドを再試行しますが、これまで仮想マシンでエラーが多すぎる場合は、実際のサーバーでZFSを使用することは慎重です。
答え1
これは、ゲストシステムの一般的なハードドライブタイムアウトエラーのように見えます。これはZFSによって発生する可能性がありますが、他の高いI / O操作によっても発生する可能性があります。ゲストシステムとして、Linuxはデフォルトのタイムアウトが低いため(通常30秒)、この点に非常に敏感です。これは、仮想マシンでは十分ではない可能性があります。特に、ディスクイメージが通常のファイルでホストシステムがロードされている場合、ホストキャッシュがいっぱいになると、一部の書き込みが予想よりも長くかかることがあります。
または引用してくださいバーチャルボックスマニュアル:
ただし、一部のクライアント(一部のLinuxバージョンなど)では、画像ファイルの書き込みに約15秒以上かかると重大な問題が発生する可能性があります。ただし、ホストキャッシュに書き込む必要がある大量のデータが含まれている場合、一部のファイルシステムは単一の書き込みを完了するのに1分以上かかることがあります。
これは VirtualBox に限定されません。他の仮想化ソリューションは、Linuxゲストを実行したときと同じ動作を表示できます。
タイムアウト自体は次のとおりです。ゲストシステムでは、Linuxハードドライブのタイムアウト(ata例外や過度の負荷による損傷の発生)が増加する可能性があります。
たとえば、Debian 7では、次のファイルに数行を追加するだけです/etc/rc.local
。
$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
TIMEOUT=86400
for f in /sys/block/sd?/device/timeout; do
echo $TIMEOUT >"$f"
done
exit 0
次に、ata例外を見つけて消えるかどうかを確認します。
# grep -Rn --col 'ata.*exception' /var/log/
ただし、ゲストシステムのタイムアウトを変更するよりも、仮想マシンのディスクパフォーマンスを向上させる方が良いでしょう。 VirtualBoxの場合ホストI/Oキャッシュ仮想マシンの仮想ストレージコントローラを無効にできます。有効にすると、ホストキャッシュがボトルネックを引き起こし、ホストにディスクI / Oが多いとディスクの操作が遅くなる可能性があります。増加負荷が VM 自体にあるため、ゲストが過負荷になると依然としてタイムアウトが発生する可能性があるため、ワークロードによってはホストキャッシングを有効にする方が良い場合があります。
それでも役に立たない場合は、VirtualBoxのマニュアルで更新間隔を試してみることをお勧めします。
IDEディスクの場合は、次のコマンドを使用します。
VBoxManage setextradata "VM name"
"VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/FlushInterval" [b]
SATAディスクの場合は、次のコマンドを使用します。
VBoxManage setextradata "VM name"
"VBoxInternal/Devices/ahci/0/LUN#[x]/Config/FlushInterval" [b]
1000000~10000000(1~10MB)の値が良い開始点になります。間隔を短くすると、問題の発生の可能性が減少し、ゲストの書き込みパフォーマンスも低下します。
一部のテストでは、VirtualBoxゲストはホストI / Oキャッシュを有効にするかどうかにかかわらず、これらのハードディスクタイムアウト(仮想マシンのクラッシュおよび/または破損の原因)を経験しました。スケジュールされたクローンジョブが実行されるたびに30分間リラックスしてVMがタイムアウトすることを除いて、ホストファイルシステムは遅くなりません。上記のようにハードディスクのタイムアウトを設定した後に問題が消え、タイムアウトは発生しなくなります。