主にというかマルチでしかやっていないのですが、
一月ほど前にふぃー氏からサーバ運営を引き継ぎましたが、WinではHDDアクセス遅いよ!とエラー吐きまくって重かったのでLinuxで動かしていたり。
とりえあず今のところ正常稼動しています。
が、いつ入れたか分からないUbuntu、しかもWubiで起動してるもんだから入れ替えたい。
そろそろサーバに使ってるノパソも寿命きそうだしね…
てなわけで、入れ替えするときに苦労しないように自分用メモ的な意味でメモ。
ちなみにサーバ構築にはこちらのページを参考にさせていただきました。
----
今回のメモは主にRAMDISK環境と起動・終了のシェルスクリプト。
RAMDISKとは、簡単に言えば物理メモリの一部を記憶領域の一部とみなして読み書きを高速にするっていう仕組みです。
当然物理メモリなので電源落ちれば揮発しちゃうので、シェルスクリプトで環境の保存・復元を。
とりあえずRAMDISKをマウントするためのディレクトリを作成
mkdir /mnt/ramdisk
起動時に自動的にマウントされるよう、/etc/fstabに以下の記述を追加。
とりあえずtmpfsで250MB確保してますが、搭載物理メモリとの兼ね合いで調整。
システムメモリ領域まで侵食して最悪クラッシュするとか。
ウチのシステムではメモリ1.5GBのところ鯖に1GB割いてるもんだから、かなりギリギリですね…
tmpfs /mnt/ramdisk tmpfs defaults,size=250m 0 0
続いてホームディレクトリ直下にmcserverなるディレクトリを作り、そこにサーバファイル一式をぶち込みます。
ぶちこんだら、mcserver内のworldディレクトリ(セーブデータ)を/mnt/ramdisk/mcserver/へコピー。
cp -r world /mnt/ramdisk/mcserver/
そのあとホームディレクトリ側のmcserver内worldディレクトリを削除、代わりに/mnt/ramdisk/mcserver/world/へのシンボリックリンクを作成します。
これでホームディレクトリ側のmcserver内サーバを起動してもデータの読み書きが発生するのはRAMDISK側となり、高速に動作させることができます。
次にバックアップの設定。
これまたホーム直下にbackupというディレクトリを作成。
さらにその中に、サーバ終了時のデータを保存するためのディレクトリtoramを作ります。
mkdir ~/backup/toram
仕組みとしてはtoramの中に前回終了時のセーブデータが格納され、起動時にRAMDISKへコピーされる=前回のデータの続きとなる、って感じ。
その仕組みを実現するため、起動用シェルスクリプトを作成します。
#!/bin/sh
# ☆起動用シェルスクリプト
# ディレクトリ作成
mkdir /mnt/ramdisk/mcserver
# コピー
cp -r -p /home/(゚∀゚)/backup/toram /mnt/ramdisk/mcserver/world
# 起動
java -Xmx1024M -Xms1024M -jar /home/(゚∀゚)/mcserver/minecraft_server.jar nogui
# ☆終了用シェルスクリプト
# RAMDISK内データをbackup/toramへ
rsync -av --delete /mnt/ramdisk/mcserver/world/ /home/(゚∀゚)/backup/toram/
どっから起動してもいいように、パスは絶対指定がよさそう。
このスクリプトから起動すると、セーブデータがRAMDISK領域に置かれてからサーバが起動、stopで終わると自動的にデータがバックアップ領域にコピーされます。
ここでは鯖終了=パソ自体再起動と考えてるので、終了後のRAMDISK領域のデータ削除はしてません。
toramに移したあとにRAMDISK上のデータは消せばいいんでしょうが、一度消去巻き戻りをやらかしてるので怖い^q^
また、これだけだと停電とかの急なアクシデントに脆弱極まりないので、他のバックアップ手段も用意しましょう。
手動では面倒なので、cronあたりでスケジューリングできるとよさそうです。
#!/bin/sh
# ☆バックアップ
rsync -a /mnt/ramdisk/mcserver/world/ /home/(゚∀゚)/backup/`date +%m%d`
参考ページのほうでは月日時分までつけてバックアップとってありましたが、貧弱ノートはHDD空きも貧弱なので日付単位のバックアップ。
スクリプト自体は数時間ごとに走らせてるので、中身は比較的最新を保っていますが…
セキュリティ関連のメモも余裕があればあとで書くかも…?
【関連する記事】
tmpfs /mnt/ramdisk tmpfs defaults,size=1024m 0 0
で、1GをRAMディスクに割こうとしましたが
tmpfs:コマンドが見つかりません
と出て、先に進めません...
もし、原因がお分かりなら
指摘して頂くと幸いです。