diskfull で mongod が起動しなくなったので、あるコレクションを削除したい

投稿者: Anonymous

MongoDB を amazon-linux 上で動かしていたところ、ディスクフルで起動しなくなりました。

2017-09-25T06:06:23.039+0000 [initandlisten] ERROR: Insufficient free space for journal files
2017-09-25T06:06:23.039+0000 [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles
2017-09-25T06:06:23.039+0000 [initandlisten]
2017-09-25T06:06:23.039+0000 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating

ログ的データをためているコレクションが原因なので、これを削除しようと考えたのですが、これを実現する方法はありますでしょうか?

  • サービス自体が起動していない (sudo service mongod start が失敗する) ので、 mongo シェルが使えない状態です。
  • ec2 インスタンスなので、ディスクサイズを拡張してやればいいとは思いますが、それはそれでちょっと面倒だと考えています。
  • オペレーションツールがあって、 mongod を起動せずともコレクションを削除できる、が理想なのですが。。こういったツールはありますでしょうか?

追記:

  • mongodb バージョン: v2.6.12
  • ストレージの変更など: 特に行っていなく、デフォルトの設定

解決

Satoshi Okano さんの回答 を見て、 mongod を起動させないといけなさそうだ、と思うようになりました。そして、ひとまず、ディスクサイズは変更せずに復旧できるにはできたので、そのまとめです。

1. journaling を off にする

/etc/mongodb.conf を編集し、以下の行を追加する

nojournal=true

そうすると、 jounaling を行わずに起動できるので、ひとまず mongod サービスは立ち上がる。

2. sudo service mongod restart

3. 該当データ(が入ったDB を) db.dropDatabase()

ひとまず mongo のシェルが起動できるようになるので、データを削除する。

このとき、 db.COLLECTION.drop() そして db.repairDatabase() では、下記のエラーメッセージが表示されて、使用領域の解法ができなかった。

Cannot repair database test having size: … because free disk space is : …

なので、下記を実行し、該当データが入ったデータベースごと drop する。

use データベース
db.dropDatabase()

参考: https://stackoverflow.com/questions/25625261/cannot-repair-database-having-size

4. jounaling の設定をオフにして、起動しなおす。

# /etc/mongodb.conf を編集したのちに
sudo service mongod restart
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *