English中文

ドキュメント · 1.0

ストレージ

この章では、ホストのストレージについて説明します。ストレージページの見方、ストレージプールの作成、2 つ目のプールの追加、ISO の置き場所、仮想マシンのディスク、ディスクの交換、定期的なデータ検査、ディスクの健康状態の確認、そして最後に 1.0 でまだ対応していないことを挙げます。初めてプールを作る場合は初期設定を参照してください。

1. ストレージの構成

  • keelOS のストレージは ZFS です。ストレージプール(pool)はディスクで構成され、仮想マシンのディスク、スナップショット、ISO はすべてプールの中に置かれます。
  • インストール時に使われるのは、1 台のディスクの先頭のごく一部(keelOS の起動パーティション)だけです。残りの領域とほかのディスクはすべて残しておき、Web でストレージプールを作ります。§3を参照してください。既定のプール名は zones です。
  • プールが複数ある場合、そのうち 1 つが既定のストレージプールになります。新規作成する仮想マシン、ISO ライブラリー、パッケージ、keel 自身のデータ(データベース、ログ)は、そこに置かれます。§5を参照してください。
  • keel は仮想マシンごとに専用のデータセットを作り、ディスク、UEFI 変数、ログ、スナップショットをその中に置きます。データセットは keel が管理するので、Web で作る必要はありません。

注意:ISO と仮想マシンはストレージプール zones に置かれ、起動ディスクのシステムパーティションには置かれません。起動パーティションは小さく、keelOS 自身だけを置くためのものです。そのため、ストレージプールがないと、仮想マシンを作ることも ISO をアップロードすることもできません。

2. ストレージページ

構成 → ストレージを開きます。ページの上から順に次のとおりです。

  1. プールカード:ストレージプールごとに 1 枚あります。タイトルはプール名(既定のプールには既定のマークが付きます)と状態です(ONLINE が正常で、ほかの色は問題あり)。その下に空き容量、使用量バー、断片化 N%、そしてプール内のデバイスツリー(ミラー、raidz、または単一ディスク)と、各ディスクのサイズと状態があります。既定プールのカードの下には、データ検査(scrub)もあります。§8を参照してください。keel のプールカードにはボタンがあります。既定にする…(既定でないプール)、guest を移動…(プール上に仮想マシンがあり、プールが 2 つ以上あるとき)、エクスポート…、削除…(既定でないプール)、また、プールがディスクより小さいときは拡張…もあります。デバイスツリーに keelcache0 という行があれば、それは guest から回収したメモリを ZFS の読み取りキャッシュとして貸しているものです。今回の起動で貸していないときは未貸出と表示され、マウスを置くと理由が見られます(たとえば今回の起動が hyp 上ではない)。これがなくてもストレージプールは通常どおり動き、条件が整えば自動で戻ります。
  2. ディスク表:ホスト上のディスクごとに 1 行で、列はディスク、モデル、シリアル、容量、パーティション(色の帯で、keelOS の起動パーティション、プールが使う部分、ほかのパーティション、未使用領域を示す)、セクター、種類(SSD または HDD)、状態、プール(プールに入っていないディスクはプール外)です。
  3. guest のディスク:各仮想マシンの各ディスクがどれだけ使っているか(使用 / 合計)。プールが 2 つ以上あるときはプール列が増えます。
  4. ISO イメージ:§6を参照してください。

一部のカードは、使えるときだけ表示されます。ストレージプールがないときはプール zones の作成。ディスクに未インポートのプール(以前インストールしたもの、自分でエクスポートしたもの、別のシステムのもの)があるときはディスク上の未インポートのプール(§9を参照)。起動パーティションにインストールしたホストにはブートパーティションのコピー。空きディスクがあるときはプールの作成(2 つ目のプールを作る)。

注意:ストレージを変更するボタン(プール作成、ディスク追加、切り離し、プール削除など)には、ホスト書き込み権限のあるアカウントが必要です。読み取り専用アカウントは見るだけです。

keelOS が対応していないストレージコントローラーのディスクは、ここには一覧されず、ページに keelOS が対応していないストレージコントローラーと表示されます。コントローラーごと仮想マシンにパススルーできます。デバイスパススルーを参照してください。

3. ストレージプールを作る

ストレージプールがないとき、ページにはプール zones の作成が表示されます。

  1. 構成 → ストレージを開きます。
  2. プール名に名前を入力します(既定は zones)。小文字で始まり、続けて英数字、_、.、- が使えます。
  3. 使う領域にチェックを入れます。 - keelOS 起動パーティションの後ろの空き領域(ページには「keelOS ブートパーティションの後ろに N の空き」と表示):ディスクが 1 台だけのときはこれを選びます。 - ディスク全体:ディスクごとに 1 行で、容量、モデル、そして「空のディスク」または「ディスクの内容:……」が書かれています。ディスク全体は消去されます。 - ディスクに別のプールのラベルが残っているときは、その行はグレーアウトされて選べません。先にラベルを消去するか、そのプールをインポートしてください(§9を参照)。
  4. 2 台以上にチェックを入れると、構成が表示されます。
構成 必要なディスク数 説明
単一ディスク 1 冗長性なし。ディスクが壊れるとデータは失われます。
ミラー 2 台以上 すべてのディスクに同じデータを持ちます。1 台になるまで壊れてもデータは失われません。使える容量 = 最小のディスク。
raidz(1 台まで故障可) 3 台以上 使える容量はおよそ 最小のディスク × (台数 − 1)。
raidz2(2 台まで故障可) 4 台以上 使える容量はおよそ 最小のディスク × (台数 − 2)。
  1. zones を作成…を押します。確認ダイアログが開き、各ディスクのモデル、容量、シリアル、現在の内容、作成後、そして構成と使用可能 約 Nが一覧されます。データのあるディスクの行は赤く表示され、ダイアログの指示どおりに、これらのディスクの名前を入力しないと先へ進めません。赤いディスクにあるすべてのもの(ほかのプールを含む)は破棄され、元に戻せません。
  2. 確認ダイアログのzones を作成を押します。数秒後にプール zones を作成しましたと表示されます。

プールは 4K アラインメントで、lz4 圧縮がオンになっており、作成時に autotrim(SSD が解放した領域をディスクに自動通知)と autoexpand(ディスクが大きくなるとプールも大きくできる)も同時に有効になります。これらは keel が決めた設定で、Web にスイッチはなく、気にする必要もありません。

注意:ディスクをまるごと NAS 仮想マシンにパススルーする場合は、そのディスクをストレージプールに選ばないでください。

注意:T10-PI(保護情報)付きの NVMe ディスクや、ブロックごとにメタデータが付く形式の NVMe ディスクでプールを作ると、keelOS はそれらを持たない形式に併せてフォーマットします。FreeBSD は有効なチェックタグを書かないため、Linux に移したり Linux 仮想マシンにパススルーしたりすると読めなくなるからです。セクター形式(512、512e、4Kn、LBA フォーマット)は、構成 → ハードウェアでディスクごとに設定します。プールを作るときはどれでも構いませんが、512 バイトセクターしか認識しないシステムでは 4Kn のディスクは使えません。

3.1 起動パーティションのコピーを置く

起動ディスクが 1 台だけだと、そのディスクが壊れたときにホストは起動できなくなります。ブートパーティションのコピーカードで、2 台目のディスクに keelOS の起動パーティションをもう 1 つ書き込めます(そのディスクの残りの領域は使われず、ディスクは消去されます)。

  1. ディスクでディスクを 1 台選びます。
  2. ディスクに何か入っている場合は、確認のためディスク名を入力します。
  3. コピーを書き込むを押します。

ミラープールにディスクを追加するときに、ついでにこの項目にチェックを入れることもできます。§4を参照してください。

4. ミラーにディスクを追加

単一ディスクのプールにはもう 1 台追加してミラーにでき、ミラーにはさらに 1 台追加してコピーを増やせます。

  1. プールカードのデバイスツリーで、最上位の単一ディスクまたはミラーの行を探し、追加…を押します。
  2. … にディスクを 1 台追加でディスクを選びます。選べるのは、起動パーティションの後ろの領域、またはディスク全体(消去されるため、ディスク名の入力で確認します)です。ミラーにする元のディスクより小さいディスクはグレーアウトされ、最低限必要なサイズが書かれます。ミラーのメンバーは元のディスクより小さくできないからです。
  3. ディスク全体の場合は、このディスクにも keelOS ブートパーティションのコピーを書き込むにもチェックを入れられます。
  4. 追加を押します。プールは全データを新しいディスクにコピーし(resilver)、進捗はプールカードに表示されます。コピー中も仮想マシンは通常どおり動きますが、ディスクが少し遅くなります。

ミラーからディスクを 1 台外すには、そのディスクの切り離すを押して確認します。データは残りのディスクにあります。1 台だけになると、2 つ目のコピーはなくなります。プール内でデータを持つ最後のディスクは切り離せません。ミラーの中で抜かれたり壊れたりしたディスクは、デバイスツリーで状態の横に不在と表示され、マウスを置くと ZFS が使う ID が出ます。そのようなディスクも切り離すを押して外します。

注意:ディスクを切り離したあと、残ったディスクが元のディスクより大きいと、プールはすぐに残ったディスクの大きさまで大きくなります(autoexpand)。確認ダイアログに約 Nと書かれます。大きくなったあとは小さくできず、それより小さいディスクをミラーに追加することもできません。

5. 複数のストレージプール

ユーザーのデータは複数のプールに分けられます。たとえば、速い NVMe プールにシステムディスクを、大きな HDD プールにデータを置く、といった使い方です。(設計は docs/75 にあります。)

もう 1 つプールを作る:未使用のディスクがあると、ストレージページにプールの作成カードが増えます。手順は §3と同じで、名前の既定は次に空いているもの(zones2、zones3 …)です。

既定のストレージプール:各プールカードで、既定でないプールには既定にする…があります。確認すると次のようになります。

  • 新規作成する仮想マシンはそのプールに置かれます。
  • keel 自身のデータ(/var/db/keel、/var/log)は、今すぐそちらに移動します。
  • ISO ライブラリーとインストール済みのパッケージは移動しません。 古いプールに残ります。あとで古いプールを削除する場合は、ISO を再アップロードする必要があります。

既定のプールは、システム → メンテナンスの既定のストレージプールでも変更できます。

新規仮想マシンでプールを選ぶ:プールが複数あるとき、新規作成ウィザードのストレージプール欄で選べ、横に各プールの空きが表示されます(… · 残り N)。

プールの削除:既定でなく、仮想マシンがないプールは、カードの削除…を押せます。プール名を入力して確認すると、プールは破棄され、そのディスクは空きになり、中に残っていたものはすべて失われます。仮想マシンが残っている間はボタンがグレーアウトされるので、先に移動してください。

6. ISO イメージ

ストレージページの一番下の ISO イメージカードは、インストールディスクのライブラリーです。既定のストレージプール上にあり、すべての仮想マシンで共用されます。仮想マシンを新規作成するときに ISO を選ぶのは、ここからです。

  • ISO をアップロード:ブラウザーからアップロードします。ファイル名は .iso または .img で終わる必要があります。.qcow2、.vmdk、.dmg はアップロード後に keel が自動で .img に変換し、アップロードと変換の進捗が表示され、✕ を押すとキャンセルできます。同名のファイルがすでにある場合はすでにありますと表示されます。
  • URL からダウンロード:http または https のアドレスを貼り付けて URL からダウンロードを押すと、ホストが自分でダウンロードします。ダウンロード中はこのページを離れても構わず、戻って進捗を確認できます。
  • 一覧の各 ISO の右側には、どのシステムかが表示されます(ボリュームラベルとファイル名から識別)。識別できないものは不明と表示され、マウスを置くとボリュームラベルが見られます。
  • 削除:名前の横の ✕ を押します。ISO がある仮想マシンの光ドライブに入っているときはそれでも削除しますか?と聞かれ、削除するとその仮想マシンは光ドライブを変えるまで起動できません。

新規仮想マシンのウィザードでも直接 ISO をアップロードでき、アップロード後に新しい guest に戻るを押して続けます。アップロードと削除には「イメージのアップロード・削除」権限のあるアカウントが必要です。

注意:インストール済みのシステムイメージ(ルーターのファームウェアなど)を最初のディスクとして使う場合は、ISO ライブラリーを通りません。仮想マシンの管理を参照してください。

7. 仮想マシンのディスク

  • 仮想マシンを新規作成するとき、ウィザードのディスクは既定で 20 GiB です(テンプレートで変わります)。サイズは変更でき、+ ディスクで追加もできます。これはウィザード内のサイズで、ISO の置き場所ではありません。
  • ディスクの種類は既定で zvol です。ZFS のブロックデバイスで、スナップショット、クローン、拡張がすべて使えます。file はデータセット内のファイルで、カスタムと編集ページで選べますが、通常は必要ありません。
  • ディスクインターフェース(virtio-blk、NVMe、AHCI …)はテンプレートで決まります。変更するには編集ページのストレージで行います。
  • 拡張:ディスクは大きくすることだけできます。編集ページのストレージで変更します。仮想マシンの管理を参照してください。
  • 各ディスクの使用量:ストレージページの guest のディスク表。
  • スナップショットは各仮想マシンの詳細ページで取ります。仮想マシンの管理を参照してください。ストレージページには、データセット単位でスナップショットを取る機能はありません。スナップショットはプール内にあり、バックアップではありません。バックアップについてはスナップショット、バックアップ、移行を参照してください。

7.1 別のストレージプールへ移動

ストレージプールが 2 つ以上あるとき、仮想マシンをプール間で移動できます。稼働中のままでも可能です。稼働中にコピーし、さらに差分を何回か追いかけ、最後に切り替える際の停止は 1 秒未満で、検証後に古いものを削除します。(設計は docs/83 にあります。)

  • 仮想マシン 1 台:詳細ページの別のプールへ移動…で、移動先のプールを選びます(横に空き容量が書かれ、入りきらないものはグレーアウトされて理由が出ます)。移動を押します。ダイアログには段階(コピー中、追い上げ中、切り替え中、検証中、仕上げ中)と進捗が表示され、稼働中だったものは完了時にN ms 停止と表示されます。
  • 複数台まとめて:プールカードの guest を移動…で、移動したいものにチェックを入れると、1 台ずつ移動します。サスペンド中のものは移動後もサスペンドのままで、エラーまたは設定が壊れているものは一覧に出るだけで動かしません。
  • ストレージページの一番下のプール間の移動に、移動中のものと移動したばかりのものが一覧されます。

注意:移動先のプールの空き容量が、この仮想マシンの現在の使用量を収められる必要があります。収まらないプールは、ドロップダウンでグレーアウトされます。

8. データ検査(scrub)

既定プールのカードの下にデータ検査(scrub)があります。プール内の全データを読み、チェックサムが合わないものは、ミラーまたは raidz に正常なコピーがあれば自動で修復します。仮想マシンは通常どおり動きますが、検査中はディスクが少し遅くなります。

  • 今すぐ検査で開始し、検査中は停止を押せます。検査中は、割合、残り …、速度のグラフ、そしてディスクごとの読み取り速度が表示されます。同じミラー内のディスクの読み取り速度はほぼ同じはずで、1 台だけずっとほかよりかなり遅い場合は、故障しかけている可能性があるので、その状態を確認してください。
  • スケジュール…:定期検査で毎月(第何曜日か)、毎週(何曜日か)、またはオフを選び、さらに時刻を選びます。追加で 1 回検査で、将来の日時を指定することもできます。時刻はホストのタイムゾーンです。
  • 検査が終わると、カードに前回の検査の日時、所要時間、速度、見つかったエラーの数が残ります。

既定は月 1 回です。

9. 古いプールのインポートとラベルの消去

keelOS は、他人のディスクを誤ってインポートしないよう、起動時に名前でプールを自動インポートすることは決してありません。ディスクにストレージプールがあるのにこのホストがインポートしていないとき、ストレージページにディスク上の未インポートのプールという表が現れ、プールごとに 1 行で、由来が表示されます。keel のもの(以前インストールした keelOS)、エクスポート済み、他のシステムのものです。

インポート:

  1. インポート名にプール名を入力します(既定は元の名前)。行の下の小さな文字で、この名前の意味が説明されます。このホストに現在ストレージプールがなく、さらに既定の名前を使う場合は、そのプールが既定のストレージプールになり、プール上の keel 自身のデータが引き継がれ、元の仮想マシンがすべて戻ってきます。そうでなければ、既定のプールとは別の guest 用ストレージプールになります。
  2. インポート方法を選びます。 - keel 用にインポート:プールは keel のものになり(keel:zones=1 が付きます)、その上の仮想マシンがここで動きます。このホストの設定、パスワード、トークンは起動パーティションにあるので、影響を受けません。 - 読み取り専用でインポート(移行元):古いシステムのディスク向けで、たとえば FreeBSD と vm-bhyve の環境です。プールには何も書き込まず、ホストのディレクトリにもマウントしません(/keel/src の下にマウントされます)。再起動後は自動で再インポートされないので、もう一度インポートする必要があります。
  3. インポートを押します。プール … をインポートしましたと表示されます。

仮想マシンにパススルーするプールはインポートする必要がありません。インポートした日時と元の名前はプールに記録され、監査ログにも残ります。

エクスポート:プールカードのエクスポート…で、プール名を入力して確認します。ディスク上の内容はそのまま残り、ホストが以後インポートしなくなるだけです。

  • 既定のプールをエクスポートすると、keel 自身のデータが root に戻り、ホストはインストール直後のようにストレージプールがない状態になります。プール上の仮想マシンと仮想スイッチの設定は、再度インポートしたときに戻ります。
  • ほかのプールをエクスポートすると、その上の仮想マシンはこのホストから消え、再度インポートする(別の名前でも可)まで戻りません。

移行元:vm-bhyve の仮想マシンをコピーしてくる:読み取り専用でインポートしたプールは、カードに移行元(読み取り専用)と表示され、VM を探す…ボタンがあります。このプールには決して書き込みません。ラベルも、スナップショットも、データも書かず、ディスク上の古いシステムはそのまま使えます。

  1. VM を探す…を押し、データセットで古いシステムが仮想マシンを置いているデータセットを選び(推奨が付いています)、スキャンを押します。keel は 1 階層だけを見ます。サブディレクトリ <名前> の中に <名前>.conf があれば、それが 1 台の vm-bhyve の仮想マシンです。
  2. コピーしたい仮想マシンにチェックを入れます。各行には、名前 / 新しい名前、ブート(UEFI の仮想マシンは UEFI 変数ファイルも一緒にコピーします。bhyveload と grub のものは UEFI を持たないので BIOS で起動し、起動しなければ仮想マシンの設定で UEFI に変更します)、メモリ、ディスク(不要なディスクはチェックを外す)、NIC、説明があります。
  3. ディスクのモデルと NIC のモデルはそのまま引き継がれるので、guest からは、ドライバーのあるハードウェアが引き続き見えます。ドライバーを入れたあとで virtio に変更してください。ISO イメージはコピーされないので、ISO ライブラリーにアップロードしてから仮想マシンにマウントします。パススルーデバイスは持ち越されないので、このホストで選び直してください。
  4. ネットワークの対応:古いホストの各 switch 名を、keel のネットワークに 1 つずつ対応させます。接続しないは、NIC は残すがどこにもつながない設定です。選択はこのブラウザーに記憶されます。
  5. コピー先プールでコピー先のプールを選ぶと、必要な容量が表示されます(コピー先プールには 5% の余裕を残します。足りなければ空きが足りませんと表示)。インポートを押します。1 台ずつコピーし、各仮想マシンの進捗が表示されます。ウィンドウを閉じても、すでに始まったものは止まらず、ページを開いている間は残りも続行されます。コピーが終わっても自動では起動しません。

このプールが不要になったら、カードのエクスポート…で解放します。すでにコピーした仮想マシンには影響しません。

ラベルの消去:未インポートのプールが不要になった場合は、ディスク表のそのディスクの行でラベルを消去…を押し、プール名を入力して確認します。消去すると、プール内のデータは二度と復元できません。このホストでも別のホストでも不可能です。これらのディスクは普通のディスクになり、プールの作成に使えます。keelOS は、未インポートのプールのディスクを自分で消去することはありません。プールを作るときにこれらのディスクはグレーアウトされているので、先にインポートするかラベルを消去してください。

10. ディスクの健康状態と温度

  • ストレージページのディスク表の状態列は、ディスク自身の SMART の結論です(SATA、SAS、NVMe のいずれにもあります)。正常または異常です。マウスを置くと、現在の温度と通電時間数が表示されます。読み取れないディスクは – と表示されます。
  • プールカードのデバイスツリーには、ディスクごとに ZFS の状態(ONLINE …)があります。故障したディスクや抜かれたディスクは、ここで色が変わります。
  • 概要ページには、ストレージプールが ONLINE でないことが通知されます。
  • ホスト全体の温度(CPU、マザーボードのセンサー)とファンは構成 → ハードウェアにあります。また、ヘルスチェックページでディスクとホストの検査と温度グラフを確認できます。トラブルシューティングとログを参照してください。

注意:状態が異常のディスク、またはデバイスツリーで色が変わったディスクは、できるだけ早く交換してください。次の節を参照してください。

11. 故障したディスクの交換

ミラー内のディスクが壊れた、または抜かれたとき、デバイスツリーのその行は色が変わった状態になり、古いディスクは不在と表示されます。1.0 の Web でできるのは「先に追加してから外す」方法です。

  1. 新しいディスクを取り付けます(ミラーの元のディスクより小さくないこと)。
  2. ミラーの行の追加…(§4)を押し、新しいディスクを選んで、resilver が完了するまで待ちます。プールカードの進捗が最後まで進みます。
  3. 故障したディスクの行の切り離すを押します。プールには正常なディスクだけが残ります。

ディスクが 1 台だけの単一ディスクプールは、ディスク交換ではデータを救えません。バックアップから復元してください。

raidz、raidz2 のプール:1.0 の Web では、まだディスクを交換できません(単一ディスクとミラーへのディスク追加、ミラーからのディスクの取り外しだけです)。ホストのコンソールまたは ssh で、コマンドラインを使います。

zpool status zones                  # どのディスクが壊れたかを確認し、その名前を控える
zpool replace zones 古いディスク名 新しいディスク名     # 例:zpool replace zones gpt/zones1 nda3

resilver の進捗は、ストレージページのプールカード、または zpool status zones で確認できます。交換後は終了を待つと、プールが ONLINE に戻ります。

注意:コマンドラインでディスクを交換しても、新しいディスクに keelOS 起動パーティションのコピーは書き込まれません。元のディスクにコピーがあった場合は、ストレージページのブートパーティションのコピーでもう一度書き込んでください。

11.1 ストレージプールを拡張する

ミラー内の小さいほうのディスクを外したり、ディスクをより大きなものに交換したりすると、プールがディスクより小さくなることがあります。そのとき、プールカードに「ストレージプールをあと N 大きくできます」と拡張…が表示されます。確認するとプールはディスクの全容量まで大きくなります。何も消去されませんが、拡張後は小さくできません。

12. 1.0 でまだ対応していないこと

  • Web から raidz のディスクを交換することはできません。また、単一ディスクやミラーを raidz に変更すること、raidz にディスクを追加することもできません。コマンドラインの zpool replace は §11を参照してください。
  • ストレージページには、データセット単位のスナップショットや、データセットの閲覧機能がありません。スナップショットは各仮想マシンの詳細ページにあります。データセットは keel が管理するので、手作業で作らないでください。
  • プール単位のクォータと予約はなく、プール名の変更もなく、プール間で共有する ISO ライブラリーもありません(ISO ライブラリーは既定のプール上にだけあり、既定のプールを変えても移動しません)。
  • ISO ライブラリーとパッケージは、既定のプールに合わせて移動しません。既定のプールを変えたあとは ISO を再アップロードしてください(§5)。
  • Web に SMART の詳細情報はありません。正常 / 異常、温度、通電時間数だけです。詳細は smartctl を使ってください。
  • ストレージページはファイル共有をしません。ファイルを共有したい場合は、仮想マシンの中で NAS(keelNAS)を動かしてください。