Linear 形式

ワールドを Linear 形式で保存して、ディスクの使用量をおよそ半分にする。既存のワールドは、使ったところから自動で変換します。

バージョン

Linear 形式は Storia 26.2-10 以降の機能です(26.2-9-beta で先行公開)。切り替える前に、ワールドのバックアップを取ってください。

Linear 形式は、リージョンファイル 1 つ(32 × 32 チャンク)を丸ごと Zstandard で圧縮して、r.X.Z.linear という 1 つのファイルに保存する形式です(仕様と変換ツール)。 バニラの Anvil 形式(.mca)はチャンクを 1 つずつ古い zlib で圧縮し、4 KB 単位で区切るので、すき間が多くなります。

Anvil(.mca) Linear(.linear)
圧縮 チャンクごとに zlib リージョンごとに Zstandard
ディスク使用量(Storia の計測) 100% レベル 1:55%、レベル 6:46%
1 チャンクだけの読み書き 速い リージョン全体をメモリに読み込む
他のツールとの互換性 ほぼすべて Linear に対応したツールだけ

計測:オーバーワールドの 12 リージョン(46.1 MB)を変換した結果です。エンドのようにチャンクが小さい場所ほど、差が大きくなります。

使い方#

storia.yml で切り替えて、サーバーを再起動します。

region-format:
  type: linear             # anvil(初期値)または linear
  linear:
    compression-level: 1   # 1(速い)〜 22(小さい)。6 前後で大きく縮みます
    flush-seconds: 5       # 変更したリージョンをディスクに書く間隔(秒)
  • 既存のワールドはそのまま使えます。 .linear がまだないリージョンは、初めて使うときに .mca から読み込み、 次の保存から .linear に書きます。.mca は消さずに残すので、確認できたら手で消してディスクを空けてください。
  • まとめて変換したいときは、変換ツール の convert_region_files.py mca2linear を、サーバーを止めてから使います。Storia はこのツールが作ったファイルを読めますし、 Storia が書いたファイルもこのツールで読めます。
  • RAM ワールド と一緒に使えます。ファイルが小さくなるので、必要な RAM も減ります。
  • /storia status で、メモリ上のリージョンの数と、書き込み待ちの数を確認できます。

気をつけること#

  • 書き込みはまとめて行います。 変更したリージョンは flush-seconds ごと、save-all flush のとき、停止のときに書きます。 サーバーのプロセスが突然落ちると、最後の数秒の保存が失われることがあります(Anvil でも、OS が書き込む前なら同じです)。
  • 使っているリージョンはメモリに置きます。 1 リージョンあたり数 MB〜数十 MB です。60 秒使われなかったリージョンは メモリから外します。
  • 読めない .linear ファイルは上書きしません。 壊れたファイルを見つけると、そのリージョンを読み込まず、 書き込みもせずに、ファイルを残します。バックアップから戻してください。
  • .mca を直接開くツールやプラグイン(一部の地図作成ツールなど)は、.linear を読めません。Chunky のように サーバーの仕組みを通すプラグインは、そのまま動きます。
  • Storia Cluster のワーカーでは使いません(ワールドは Storia Relay が Anvil 形式で保存します)。

Anvil に戻す#

type: anvil に戻す前に、変換ツールの linear2mca で .linear を .mca に変換してください。 .linear があるのに anvil が選ばれていると、Storia は起動を止めます。残っている古い .mca で動いてしまい、 最近の変更が消えたように見えるのを防ぐためです。