Vagrant로 가상 머신 부팅 시 timeout 에러 뜰 때 (+ mount.vboxsf 에러까지)
✔️ 문제 발생
vagrant up 후 VM 부팅시 timeout 에러 발생
언젠가부터 vagrant up 명령으로 가상머신을 가동시키려고하면 종종 해당 오류가 발생했다.
✔️ 문제 원인
메세지를 해석해보면
컴퓨터가 부팅되기를 기다리는 동안 시간이 초과되었습니다.
즉, Vagrant가 구성된("config.vm.boot_timeout" 값) 기간 내에 게스트 시스템과 통신할 수 없었습니다.
위를 보면 Vagrant가 기계에 연결하려고 할 때 발생한 오류를 볼 수 있습니다.
이러한 오류는 대개 무엇이 잘못되었는지에 대한 좋은 힌트입니다.
사용자 지정 상자를 사용하는 경우 네트워킹이 제대로 작동하고 시스템에 연결할 수 있는지 확인합니다.
이러한 상자에 네트워킹이 제대로 설정되지 않는 것은 일반적인 문제입니다.
인증 구성도 올바르게 설정되었는지 확인합니다.
상자가 제대로 부팅되는 것으로 나타나면 시간 초과 값("config.vm.boot_timeout")을 늘릴 수 있습니다.
네트워크는 정상 동작하고 있고 가끔은 정상적으로 부팅될 때가 있었기 때문에 시간 초과 문제라고 생각했다.
즉, 가상머신의 부트 시간이 기본 설정값인 300초를 초과하기 때문에 timeout 에러가 발생하는 문제인 것 같다.
✔️ 문제 해결
가상머신의 부트 시간이 너무 오래 걸려서 실패하는 경우, boot_timeout 옵션을 조정해서 시간을 늘릴 수 있다.
Vagrant.configure("2") do |config|
# Define VM
config.vm.define "controller" do |centos|
config.vm.boot_timeout = 1800 # 30 minutes
centos.vm.box = "centos/7"
centos.vm.hostname = "controller"
centos.vm.network "private_network", ip: "192.168.100.10"
centos.vm.provider "virtualbox" do |vb|
vb.name = "controller"
vb.cpus = 2
vb.memory = 4096
end
end
end
다음과 같이 config.vm.boot_timeout 시간을 30분으로 아주 길게 잡아놓고 다시 vagrant up을 해보았다.
✔️ 추가 문제 발생
새로운 오류가 발생했다....!!! 근데 웃긴건 일단 가상머신 부팅은 잘 되었고 심지어 SSH 접속도 잘 된다.
그래도 찝찝하니까 이 오류가 무슨 오류인지 해결해보기로 했다 ㅠ_ㅠ
==> controller: Machine booted and ready!
==> controller: Checking for guest additions in VM...
controller: No guest additions were detected on the base box for this VM! Guest
controller: additions are required for forwarded ports, shared folders, host only
controller: networking, and more. If SSH fails on this machine, please install
controller: the guest additions and repackage the box to continue.
controller:
controller: This is not an error message; everything may continue to work properly,
controller: in which case you may ignore this message.
==> controller: Setting hostname...
==> controller: Configuring and enabling network interfaces...
==> controller: Mounting shared folders...
controller: /vagrant => C:/Users/Shinsohui/vagrant/ansible
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:
mount -t vboxsf -o uid=1000,gid=1000,_netdev vagrant /vagrant
The error output from the command was:
mount: unknown filesystem type 'vboxsf'
이번에도 해석을 해보면,,
Vagrant가 VirtualBox 공유 폴더를 마운트할 수 없습니다.
이것은 일반적으로 "vboxsf" 파일 시스템을 사용할 수 없기 때문입니다.
이 파일 시스템은 VirtualBox 게스트 추가 및 커널 모듈을 통해 사용할 수 있습니다.
이러한 게스트 추가가 게스트에 제대로 설치되었는지 확인하십시오.
이것은 Vagrant의 버그가 아니며 일반적으로 Vagrant 상자의 결함으로 인해 발생합니다.
문맥상 시도한 명령은 다음과 같습니다.
마운트 -t vboxsf -o uid = 1000, gid = 1000, _netdev vagrant
/ vagrant 명령의 오류 출력은 다음과 같습니다.
마운트: 알 수 없는 파일 시스템 유형 'vboxsf'
또 열심히 구글링을 해보니 해당 문제는 brooklyn 서버의 /vagrant로 마운트되는 VirtualBox 공유 폴더가 마운트 안되는 문제라고 한다.
✔️ vagrant-vbguest 플러그인 설치
VirtualBox Guest Additions 설치에 문제가 있는 상태이며 vagrant-vbguest 플러그인을 설치하면 해결 할 수 있다.
vagrant-vbguest 플러그인은 guest machine과 VirtualBox host의 Guest Additions 버전이 다를 경우에 알맞은 버전을 설치해 주는 플러그인이다.
아래의 명령으로 설치한다.
PS C:\Users\Shinsohui\vagrant\ansible> vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching micromachine-3.0.0.gem
Fetching vagrant-vbguest-0.30.0.gem
Installed the plugin 'vagrant-vbguest (0.30.0)'!
이미 생성한 box에 적용하려면 아래의 명령으로 수동으로 설치할 수 있다.
$ vagrant vbguest
$ vagrant reload
나는 해당 플러그인을 설치한 뒤 다시 vagrant up을 하니 [controller] No Virtualbox Guest Additions installation found. 메세지를 띄운뒤 controller가 알아서 패키지를 설치했다.
controller: SSH auth method: private key
==> controller: Machine booted and ready!
[controller] No Virtualbox Guest Additions installation found.
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
* centos-ansible-29: mirror.kakao.com
* epel: ftp.riken.jp
* extras: mirror.kakao.com
* remi-php74: ftp.riken.jp
* updates: mirror.kakao.com
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version
Package binutils-2.27-44.base.el7_9.1.x86_64 already installed and latest version
Package 1:make-3.82-24.el7.x86_64 already installed and latest version
Package 4:perl-5.16.3-299.el7_9.x86_64 already installed and latest version
Package bzip2-1.0.6-13.el7.x86_64 already installed and latest version
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).
--> Running transaction check
---> Package elfutils-libelf-devel.x86_64 0:0.176-5.el7 will be installed
---> Package kernel-devel.x86_64 0:3.10.0-1160.62.1.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
elfutils-libelf-devel x86_64 0.176-5.el7 base 40 k
kernel-devel x86_64 3.10.0-1160.62.1.el7 updates 18 M
Transaction Summary
================================================================================
Install 2 Packages
Total download size: 18 M
Installed size: 38 M
Downloading packages:
No Presto metadata available for updates
--------------------------------------------------------------------------------
Total 10 MB/s | 18 MB 00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : elfutils-libelf-devel-0.176-5.el7.x86_64 1/2
Installing : kernel-devel-3.10.0-1160.62.1.el7.x86_64 2/2
Verifying : kernel-devel-3.10.0-1160.62.1.el7.x86_64 1/2
Verifying : elfutils-libelf-devel-0.176-5.el7.x86_64 2/2
Installed:
elfutils-libelf-devel.x86_64 0:0.176-5.el7
kernel-devel.x86_64 0:3.10.0-1160.62.1.el7
Complete!
Copy iso file C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
Mounting Virtualbox Guest Additions ISO to: /mnt
mount: /dev/loop0 is write-protected, mounting read-only
Installing Virtualbox Guest Additions 6.1.32 - guest version is unknown
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.1.32 Guest Additions for Linux........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel
modules. This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel
3.10.0-1160.62.1.el7.x86_64.
Redirecting to /bin/systemctl start vboxadd.service
Redirecting to /bin/systemctl start vboxadd-service.service
Unmounting Virtualbox Guest Additions ISO from: /mnt
==> controller: Checking for guest additions in VM...
==> controller: Setting hostname...
==> controller: Configuring and enabling network interfaces...
==> controller: Mounting shared folders...
controller: /vagrant => C:/Users/Shinsohui/vagrant/ansible
==> controller: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> controller: flag to force provisioning. Provisioners marked to run always will still run.
✔️ 정상 작동 확인
다시 vagrant halt 후 vagrant up을 시도하니 정상 작동 !!!!
PS C:\Users\Shinsohui\vagrant\ansible> vagrant up
Bringing machine 'controller' up with 'virtualbox' provider...
==> controller: Clearing any previously set forwarded ports...
==> controller: Clearing any previously set network interfaces...
==> controller: Preparing network interfaces based on configuration...
controller: Adapter 1: nat
controller: Adapter 2: hostonly
==> controller: Forwarding ports...
controller: 22 (guest) => 2222 (host) (adapter 1)
==> controller: Running 'pre-boot' VM customizations...
==> controller: Booting VM...
==> controller: Waiting for machine to boot. This may take a few minutes...
controller: SSH address: 127.0.0.1:2222
controller: SSH username: vagrant
controller: SSH auth method: private key
==> controller: Machine booted and ready!
[controller] GuestAdditions 6.1.32 running --- OK.
==> controller: Checking for guest additions in VM...
==> controller: Setting hostname...
==> controller: Configuring and enabling network interfaces...
==> controller: Mounting shared folders...
controller: /vagrant => C:/Users/Shinsohui/vagrant/ansible
==> controller: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> controller: flag to force provisioning. Provisioners marked to run always will still run.
PS C:\Users\Shinsohui\vagrant\ansible> cd ~
PS C:\Users\Shinsohui> ssh controller
Last login: Sun May 8 05:04:39 2022 from 192.168.100.1
[vagrant@controller ~]$
참고