ごらくらいふ

プログラミングしたりゲームしたり

Minecraftのバックアップが動作していなかったのを修正した作業ログ

放置状態のMinecraft、久しぶりに様子を見てみたらバックアップに失敗していた。 はてどうしたものかとcronからの通知を確認すると

Date: Tue, 21 Feb 2017 04:00:01 +0900 (JST)

minecraft_server.jar is running... suspending saves
Backing up minecraft world...
tar: VPSworld: stat 不能: そのようなファイルやディレクトリはありません
tar: 前のエラーにより失敗ステータスで終了します
Backing up minecraft_server.jar
minecraft_server.jar is running... re-enabling saves
Compressing backup...
Done.

oh…

どこがトラブルポイントなのか調べる

まずはcronの確認から。現象は4時に報告されている。

# crontab -l
30 4 * * * /etc/init.d/minecraft restart
0 4 * * * /etc/init.d/minecraft backup

4時に実行されるコマンドはminecraft backup

もうどこから持ってきたか忘れてしまったminecraftコマンドの中身を漁る。

case "$1" in
  # 略
  backup)
    mc_backup
    ;;
  # 略
esac

mc_backupのみ

mc_backup() {
  mc_saveoff

  NOW=`date "+%Y-%m-%d_%Hh%M"`
  BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  echo "Backing up minecraft world..."
  #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"

  echo "Backing up $SERVICE"
  as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""

  mc_saveon

  echo "Compressing backup..."
  as_user "gzip -f \"$BACKUP_FILE\""
  echo "Done."
}

echoの内容から、as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"になにかあったことがわかる。

tar コマンドのオプション

  • -C : change directory
  • -c : 書庫の作成モードとして動作する
  • -f ファイル名 : 指定した書庫ファイルまたはデバイスを(書き込みに)使用する

Linuxコマンド集 - 【 tar 】 ファイルを書庫化・展開する(拡張子.tarなど):ITpro

あやしいわーるど

$WORLDは何を指しているのか
# grep "WORLD=" minecraft
WORLD='VPSworld'
minecraftはどのサーバを使っているのか
# grep "level-name" server.properties
level-name=world

全部こいつのせいだ。

対応ログ

ワールドディレクトリを変更して対応

# 作業に入る前にminecraftを確実に停止させる

# sudo service minecraft stop
minecraft_server.jar was not running.
minecraft_server.jar is stopped.


# ワールドディレクトリの名前変更

#  mv -v world VPSworld
`world' -> `VPSworld'


# サーバー設定の変更

# cp -v server.properties{,.org}
`server.properties' -> `server.properties.org'

# vi server.properties

#  diff server.properties{,.org}
28c28
< level-name=VPSworld
---
> level-name=world

バックアップの動作確認

# sudo service minecraft backup
minecraft_server.jar is not running. Not suspending saves.
Backing up minecraft world...
Backing up minecraft_server.jar
minecraft_server.jar is not running. Not resuming saves.
Compressing backup...
Done.

# ll -h backup/
#  ======省略======
-rw-r--r-- 1 minecraft minecraft  184  221 04:00 2017 VPSworld_2017-02-21_04h00.tar.gz
-rw-rw-r-- 1 minecraft minecraft 109M  221 13:36 2017 VPSworld_2017-02-21_13h36.tar.gz

圧倒的容量差

稼働開始

# sudo service minecraft start
Starting minecraft_server.jar...
minecraft_server.jar is now running.