使用Vagrant 后發現虛擬機磁盤空間爆滿的血淚填坑記


 
現象: 
用了幾天vagrant后,發現docker 里的 Mysql5.7 服務無法啟動,用docker ps 命令,發現mysql一直在反復重啟, 查看mysql log 發現說磁盤空間不夠, 導致mysql無法啟動。
覺得很奇怪, docker里只安裝了redis和mysql兩個image, 也沒用幾天mysql, 怎么會40G的空間都滿了?
 
於是一通百度查找, 都說是mysql日志過多,但是一個一個目錄的用du -sh * 和 df -h 查看, 發現日志log並不大。 進一步查找發現是/var/lib/docker/overlay2下面的子目錄里有文件過大,於是
開始陷入了坑里, 一直懷疑是docker的問題, 但是網上的辦法都說是log文件占用空間,使用 cat /dev/null > *-json.log 刪除, 結果發現毫無卵用。
實在無法解決,忍痛將docker的images全部刪掉看看, 結果發現還是沒用。。。
 
 
轉機:
經過幾個小時的死磕,終於發現了一個文件夾: /vagrant/AppData, 這個文件夾居然有32G? 再一細看不得了, 這個/vagrant下除了AppData文件夾,怎么還有一堆文件感覺跟我的PC電腦
里的 user文件夾里的東西一模一樣? 比如有 download ,  有document, 有music , 還有OneDrive, 虛擬機上怎么可能有微軟的OneDrive? 於是突然靈光一現,難道vagrant把我電腦里的
文件都復制到虛擬機里了? 順着這個思路百度,果然柳暗花明又一村,徹底找到了問題所在,那就是:
 
vagrant提供了將本機目錄掛載到虛擬機目錄下的功能,默認是將vagrant配置文件所在目錄掛載到虛擬機/vagrant目錄下。
 
即: c:\user\nioth(這里是我電腦的用戶名,你可以改成你的)\Vagrantfile  所在的目錄  與 虛擬機 /vagrant目錄進行同步, 
 
因此, 會將本機大量文件復制到虛擬機, 導致虛擬機空間爆滿。 並不是docker的問題啊, 可憐我把docker里的image都刪掉了,回頭又得重裝mysql,配置一堆數據庫,郁悶啊~~~
 
 
 
解決辦法:
 
一開始找到的是 C:\Users\nioth\Vagrantfile 文件里有一行配置(默認是注釋掉的):
  #config.vm.synced_folder ".", "/vagrant_data"
 
於是修改這個文件,改成下面(MyVagrantSyncFolder是自己新建得文件夾,空的,放在C:\Users\nioth\下面):
(這里有一個失敗的伏筆:為什么我看到虛擬機里的文件夾是叫vagrant,並不是叫vagrant_data啊。不管了,試試再說。)
 
  config.vm.synced_folder "./MyVagrantSyncFolder", "/vagrant_data"
 
再用vagrant reload 重啟, 果然發現沒有用,心里一緊,不會吧, 再用Everything軟件搜一遍,發現另外還有一個地方有一個vagrant配置文件:
 
C:\Users\nioth\.vagrant.d\boxes\centos-VAGRANTSLASH-7\2004.01\virtualbox\Vagrantfile
 
原來如此: 每一個虛擬機的操作系統里還有自己的配置文件!!!啊啊啊!
 
 打開發現有如下配置:
 
Vagrant.configure("2") do |config|
  config.vm.base_mac = "5254004d77d3"
  config.vm.synced_folder ".", "/vagrant", type: "rsync"
end
 ( 話說configure("2")是什么鬼? 沒有1嗎? )
 
 終於找到你了! 
 於是,修改為:
 
Vagrant.configure("2") do |config|
  config.vm.base_mac = "5254004d77d3"
  config.vm.synced_folder "./MyVagrantSyncFolder", "/vagrant", type: "rsync"
end
  
(原來那個文件里的配置還給它注釋掉,恢復原樣。)
 
保存文件,再用vagrant reload, 大功告成!
控制台顯示:
==> default: Configuring and enabling network interfaces...
==> default: Rsyncing folder: /cygdrive/c/Users/nioth/MyVagrantSyncFolder/ => /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
 
現在是 ./MyVagrantSyncFolder 文件夾與 虛擬機中的/vagrant文件夾進行映射, 這樣就不會將大量主機文件復制到虛擬機了。
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM