LoginSignup
2
2

More than 5 years have passed since last update.

"vagrant up"時に"Segmentation fault"が発生するようになったので調査

Last updated at Posted at 2017-11-23
  • 今後の障害調査時に使えそうな情報なので自分用にメモ

概要

  • vagrant up 後 1度正常に起動するが vagrant haltなどで一度仮想マシンの停止後に再度vagrant upすると、共有フォルダのマウント処理でSegmentation Faultが発生して起動に失敗するようになった
  • ググっても同じような事象は見受けられなかったので、所詮おま環の問題という できれば会いたくない障害でかなりの時間を浪費しました。

環境

  • ホストOS : windows10home 1709(16299.64) ※ winverで確認
  • プロバイダ: Virtualbox 5.2.0 r118431(Qt5.6.2) + 拡張パック(5.2.0 r118431)
  • Vagrant : 2.0.1
  • Vagrant plugin :
$ vagrant plugin list
vagrant-cachier (1.2.1)
vagrant-hostsupdater (1.0.2)
  - Version Constraint: > 0
vagrant-ignition (0.0.3)
  - Version Constraint: > 0
vagrant-share (1.1.9, system)
  - Version Constraint: > 0
vagrant-vbguest (0.15.0)
  - Version Constraint: > 0
  • コンソール : git for windowsに付属の git bash コンソールで作業

状況

  • おなじみ vagrant up で仮想マシンを起動すると見慣れないSegmentation faultのエラーが発生。ホストを再起動などしても変わらず。
$ vagrant up
Bringing machine 'develop.vm' up with 'virtualbox' provider...
==> develop.vm: Checking if box 'minimal/centos7' is up to date...
==> develop.vm: Fixed port collision for 22 => 2222. Now on port 2200.
Segmentation fault

Segmentation fault だけ表示されても何かわからん!

Vagrantのデバッグ情報を出力させる

  • VAGRANT_LOG=DEBUG をvagrantコマンドの前に付与するとデバッグ情報を見れる
  • vagrant --debug でもいけた
$ VAGRANT_LOG=DEBUG vagrant up
~ 
いろいろログが流れて最終的に下記の箇所で停止する
~
DEBUG subprocess: Waiting for process to exit. Remaining to timeout: 32000
DEBUG subprocess: Exit status: 0
 INFO warden: Calling IN action: #<Vagrant::Action::Builtin::SyncedFolders:0x00000000075b3860>
 INFO synced_folders: SyncedFolders loading from cache: false
 INFO synced_folders: Synced Folder Implementation: virtualbox
 INFO synced_folders:   - /vagrant: . => /vagrant
 INFO synced_folders:   - vagrant-cache: C:/Users/name/.vagrant.d/cache/minimal/centos7 => /tmp/vagrant-cache
Segmentation fault
  • upだけでなくdestroystatusなど他のVagrantの操作コマンド全般でも同様に詳細なデバッグ情報を見れる。手がかりが何もない状況よりかなり助かる。

対応など検討

  • 最初はPluginが何か かち合ってるのか?とも思ったが、手元の環境では Segmentation Faultが出ると必ずこのマウントの部分で止まっている事を確認できた。
  • これまで自分の環境では出ていなかったが、昔から言われている Windows+VirtualBOX+Vagrant でのファイル共有問題が顕在化したと思われる。
  • 最近 Virtualbox と Vagrant周りのアップデートを行ったり、ホスト側のWindowsアップデートも日々行われるのでその辺の組み合わせが原因の可能性は充分ある
  • Vagrantではホストゲスト間のマウントは NFSで行うのがベストプラクティスらしい。
  • ホストが WindowsなのでNFS実装は難しいため vagrant プラグイン vagrant-winnfsd : https://github.com/winnfsd/vagrant-winnfsd の導入など検討。
  • もしくは取り急ぎは Virtualbox とVagrant のバージョンをデグレードもして検証 といったあたりだろうか・・・

解決

  • 最終的にVirtualBOX(拡張含む) とVagrantをデグレ+vagrant-winnfsdプラグインの導入で手前の環境は安定したのでしばらくこのまま使う事で解決としました。
  • VirtualBOX → 5.1.30
  • Vagrant → 1.9.8
  • 最新版へのアップグレードは近い将来にまた挑戦したいとは思います。

Vagrantプラグイン vagrant-winnfsdの使い方

if Vagrant.has_plugin?("vagrant-winnfsd")
  config.winnfsd.uid = 500
  config.winnfsd.gid = 500
end
config.vm.synced_folder ".", "/vagrant", type: "nfs"
  • ちなみに UID/GIDは私がよく使っているBOXである bento のゲストOS環境では、vagrantのUID/GIDが 500だったので500にしています。使うBOXにより違いがあるかと思います。

追記

  • インストールされている vagrant本体 と Vagrantプラグインのバージョンが食い違っていてもエラーになることがあるようだったので下記でプラグインの更新も試す。
vagrant plugin update
  • もしくは プラグイン入れなおすのも試してみる
vagrant plugin expunge --reinstall

その他

  • Vagrant+Virtualbox+Windowsのファイル共有は Virtualbox本体と VirtualBox Extension PackとVagrantのバージョンの組み合わせでいろいろ面倒な気配がするので、今回の vagrant-winnfsd を使う事で共有機能に関してはもろもろのしがらみから解放されることになり幸せになれたのかもしれない。
  • Vagrant+VirtualBOXでも Linux/macOS環境で開発する方が安定するのかなー:weary:

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2