admin管理员组

文章数量:1568329

现象:

用了几天vagrant后,发现docker 里的 Mysql5.7 服务无法启动,用docker ps 命令,发现mysql一直在反复重启, 查看mysql log 发现说磁盘空间不够, 导致mysql无法启动。

觉得很奇怪, docker里只安装了redis和mysql两个image, 也没用几天mysql, 怎么会40G的空间都满了?

于是一通百度查找, 都说是mysql日志过多,但是一个一个目录的用df -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文件夹进行映射, 这样就不会将大量主机文件复制到虚拟机了。

本文标签: 大厨虚拟机血泪磁盘磁盘空间