目录

vagrant简介

1、安装virtualBox

2、安装vagrant

3、安装环境

1)把box文件添加到虚拟机

2)初始化虚拟机

3)启动虚拟机

4) 登录虚拟机

5) 常用的几个vagrant命令

6)配置私有网络以及端口转发

7)同步文件夹

8) 配置公有网络

nat 、桥接 、host-only连接互通性总结

4、总结

5、注意事项

5.1 虚拟机导致空间爆炸

5.2 修改时区

5.3 修改环境变量

5.4 启动脚本

5.5 添加磁盘

vboxmanage 相关操作

显示虚拟机列表

显示所有虚拟机:

显示正在运行的虚拟机:

打开虚拟机

操纵虚拟机(改变状态)

显示并修改虚拟机信息

显示虚拟机信息

修改虚拟机名称

修改虚拟机内存大小

修改虚拟机的 CPU 个数


vagrant简介

vagrant是一个构件虚拟开发环境的工具。他用于创建部署虚拟的开发环境,说白了就是使用vagrant装虚拟机,而装虚拟机的文件由运维组对开发环境做的一个镜像。

这样做的目的,省去了我们搭建开发环境,直接装一个虚拟机,把正在使用的开发环境的镜像还原进去。

当然使用vagrant最主要解决的一个问题就是,让开发环境同步。“代码在我机子上运行没有问题”这种说辞将成为历史。

在vagrant中,virtualbox、hyper-v、vmware(不仅vmware收费,vagrant vmware的插件也收费)、docker等称为provider,不同的provider隐含的是不同的底层虚拟化方式。

vagrant默认使用virtualbox,所以要使用vagrant,要求先安装好virtualbox,再装vagrant。

-- update 2022年10月30日20:50:09

What is VirtualBox?
Oracle VM VirtualBox is a free and open-source hypervisor developed by Oracle Corporation. It allows us to run virtual machines on our physical host machine without affecting the host OS.

We call the operating system where VirtualBox is installed as "Host OS" and the OS running under VirtualBox VM's are called as "Guest OS".

While creating VM's we can specify the specs (Disk size, RAM, CPU cores etc.) we want for our VM to have.

VirtualBox runs on all major distributions such as Windows, Mac OSX and Linux.

What is Vagrant?
As per its official documentation "Vagrant is a tool for building and managing virtual machine environments in a single workflow."

Vagrant enables us to create, configure, and manage virtual machines using its extremely easy command line interface. It acts as a layer of software installed between a virtualization tool (such as VirtualBox, Docker, Hyper-V) and a VM.

1、安装virtualBox

可以到VirtualBox的官网进行下载:

https://www.virtualbox.org/wiki/Downloads

2、安装vagrant

可以到官网下载

https://www.vagrantup.com/downloads.html

目前都有CDN镜像,所以下载速度很快.

3、安装环境

vagrant部署环境,需要一个box文件。如果实在公司里面,可以从他们那里拷一个box文件安装。这样安装的环境与他们是一致的。即模拟了一个开发环境。box文件也可以在网上下载。搜索:vagrant box

重点内容好了,现在假设已经有了box文件。现在需要安装环境了。

1)把box文件添加到虚拟机

下载box文件,官方网站下载即可.

运行以下命令:

//添加到虚拟机

 /d/data
$ vagrant box add centos-7 file:///D:/data/CentOS-7.box

注意要写成file://.. 否则会报错

/d/data
$ vagrant box add centos-7 D:\data\CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos-7' (v0) for provider:box: Unpacking necessary files from: file:///D:dataCentOS-7-x86_64-Vagrant-2004_01.VirtualBox.boxbox:
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.Couldn't open file /D:dataCentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

添加完成之后,查看一下

/d/data
$ vagrant box list
centos-7 (virtualbox, 0)

也可以在virtualbox中看到

2)初始化虚拟机

vagrant init centosMix //centosMix是刚才 list中查看的虚拟机名称

执行完上面的命令之后,可以在本目录下生成一个vagrantFile文件。这是一个配置文件,里面包含该虚拟机的一些配置信息,可以看看。

3)启动虚拟机

当然你也可以不用第一步add一个box ,如果没有的话,vagrant up时就在线下载.

进行完以上操作,开发环境的安装就完成了。这个时候,在打开virtualBox工具,就可以看到里面装上了一个虚拟机。开发的时候,可以使用本机的开发环境进行开发。

vagrant up 启动虚拟机

事先add box,vagrant up的log

4) 登录虚拟机

git bash 中执行vagrant ssh 连接到创建的虚拟机

vagrant安装的虚拟机,会自动创建默认用户vagrant,其密码默认也是vagrant,且该vagrant用户可以无密码执行sudo操作

vagrant创建的虚拟机默认禁止ssh使用密码认证的方式登录,而是使用公钥认证方式。

vagrant up在创建虚拟机时,会自动创建ssh连接所需的公钥和私钥,并将公钥分发到虚拟机vagrant用户,即公钥写入/home/vagrant/.ssh/authorized_keys文件中,而且每次启动虚拟机时都会做该操作。因此可以直接使用vagrant ssh连接到虚拟机。

vagrant ssh连接虚拟机时所使用的ssh配置项可通过vagrant ssh-config查看:

# 和使用的provider有关
# 下面是hyper-v的虚拟机 windows
$ vagrant ssh-config
Host defaultHostName 127.0.0.1User vagrantPort 2200UserKnownHostsFile /dev/nullStrictHostKeyChecking noPasswordAuthentication noIdentityFile D:/data/box/.vagrant/machines/default/virtualbox/private_keyIdentitiesOnly yesLogLevel FATAL# 下面是virtualbox的虚拟机 linux
# 默认虚拟机放在virtualbox的NAT网络,
# 而vbox的NAT网络不能被宿主机访问到,因此做了端口转发
/opt/vagrant/node1]#vagrant ssh-config
Host defaultHostName 127.0.0.1User vagrantPort 2222UserKnownHostsFile /dev/nullStrictHostKeyChecking noPasswordAuthentication noIdentityFile /root/.vagrant.d/boxes/box1/0/virtualbox/vagrant_private_keyIdentitiesOnly yesLogLevel FATAL

如果使用xshell... 工具连接的话,在不修改sshd_config的情况下,只能使用公钥认证的方式,因此需要指定公钥认证时使用的私钥路径。vagrant生成的私钥路径在vagrant ssh-config的输出结果中有显示。

# 连接hyper-v下的虚拟机 windows
ssh vagrant@10.50.10.15 -i /root/.vagrant.d/boxes/box1/0/virtualbox/vagrant_private_key# 连接virtualbox下的虚拟机 linux
ssh vagrant@10.50.10.15 -i /root/.vagrant.d/boxes/box1/0/virtualbox/vagrant_private_key

还有一种方式就是修改root密码 .

操作步骤

  1. 在git bash中 vagrant ssh连接虚拟机
  2. sudo -i 切换到root用户
  3. 修改root 密码: passwd root
  4. 修改 /etc/ssh/sshd_config的PasswordAuthentication 为yes

这样可以使用的工具连接了。

5) 常用的几个vagrant命令

$ vagrant init      # 初始化$ vagrant up        # 启动虚拟机
$ vagrant halt      # 关闭虚拟机
$ vagrant reload    # 重启虚拟机
$ vagrant ssh       # SSH 至虚拟机
$ vagrant suspend   # 挂起虚拟机
$ vagrant resume    # 唤醒虚拟机
$ vagrant status    # 查看虚拟机运行状态
$ vagrant destroy   # 销毁当前虚拟机#box管理命令
$ vagrant box list    # 查看本地box列表
$ vagrant box add     # 添加box到列表$ vagrant box remove  # 从box列表移除 
  • box    管理box镜像(box是创建虚拟机的模板)
# box相关子命令
add   安装box
list    列出已安装的box。已安装的box存放在$HOME/.vagrant.d/或$VAGRANT_HOME/.vagrant.d/
outdated    检查是否有新版本的box
prune   删除已有新版本的box
remove  删除指定的box
repackage   重新打包指定的box
update  更新box到最新版(不会删除并新建box,而是直接在当前box上更新)
  • init    初始化项目目录,将在当前目录下生成Vagrantfile文件
  • up    启动虚拟机,第一次执行将创建并初始化并启动虚拟机
  • reload    重启虚拟机
  • halt    将虚拟机关机
  • destroy    删除虚拟机(包括虚拟机文件)
# 删除根据当前目录下的Vagrantfile所安装的虚拟机
$ vagrant destroy --force
  • suspend    暂停(休眠、挂起)虚拟机
  • resume    恢复已暂停(休眠、挂起)的虚拟机
  • snapshot    管理虚拟机快照(hyperv中叫检查点)
  • status    列出当前目录(Vagrantfile所在目录)下安装的虚拟机列表及它们的状态
  • global-status    列出全局已安装虚拟机列表及它们的状态
  • ssh    通过ssh连接虚拟机
  • ssh-config    输出ssh连接虚拟机时使用的配置项
  • port    查看各虚拟机映射的端口列表(hyperv不支持该功能)
  • global-status 查看vagrant所管理的所有虚拟机的状态
/opt/vagrant/node1]#vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
3918c06  default virtualbox running /opt/vagrant/node1
74934de  default virtualbox running /opt/vagrant/node3
af1fae3  default virtualbox running /opt/vagrant/node2                  The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date (use "vagrant global-status --prune" to prune invalid
entries). To interact with any of the machines, you can go to that
directory and run Vagrant, or you can use the ID directly with
Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"显示有3台虚拟机已成功运行,且运行在virtualbox上,该虚拟机的全局ID. (vagrant up/halt/reload 都可以使用此id)
running并不代表虚拟机成功启动,比如卡在开机过程中,它也会显示running。
这里显示的虚拟机ID和name是vagrant为了管理、区分各虚拟机而设置的标识符,只有vagrant工具自身可以看到这些标识符ID或name。
如果没有在Vagrantfile中使用config.vm.define定义虚拟机的name,那么它们的name默认都是default。
ID具有唯一性,name可能会重复出现,比如一大堆name为default的虚拟机
可使用ID或name来引用对应的虚拟机。其中:ID可缩写(比如上面2f5fb92可缩写为2f5),只要能保证唯一性即可,且ID可全局引用
name标识符只有在.vagrant所在目录下才能引用
如果不指定ID或name,则vagrant默认操作当前目录内.vagrant目录下所安装的default虚拟机

6)配置私有网络以及端口转发

在使用的时候遇到两个问题:

1. 虚机可以ping通宿主机. 但是宿主机ping 不通虚机

解决: 设定 config.vm.network "private_network", ip: "192.168.56.10" 。

--2022年4月25日15:41:37 其本质是将虚拟机加入到了virtualboxhost-only网络内。

virtualbox会在宿主机上新建一个host-only网卡,如果有多个网段的话,virtualbox会创建多个host-only网卡。目前我创建了3个网段因此有三个host-only虚拟网卡。

相同网段的N台虚拟机连接的是同一个host-only网卡,所以这些虚拟机之间也是可以相互通信的

vagrant reload后可以看到多出一张网卡来。

eth0 是vagrant默认添加的NAT网卡

那这个ip是怎么来的呢?

1)在window命令行中,ipconfig
以太网适配器 VirtualBox Host-Only Network #5:
IPv4 地址 . . . . . . . . . . . . : 192.168.56.1
获取到VirtualBox的网段:192.168.56

2) vagrantFile中设置一个没有在使用的ip 使用

config.vm.network "private_network", ip: "192.168.56.10"

  # Create a private network, which allows host-only access to the machine# using a specific IP.config.vm.network "private_network", ip: "192.168.56.10"

2. 第一步的问题解决了,但是宿主机到虚机的9000端口不通。

1)宿主机上使用telnet 192.168.56.10 9000

显示无法连接

2)设定forwarded_port

端口转发(Port forward)又叫端口映射,就是把虚机的某个端口,映射到宿主机的端口上。这样就能在宿主机上访问到虚拟机中的服务。

例如启动虚机时,默认的 22 (guest) => 2222 (host) (adapter 1) 就是把虚机的 SSH 服务端口(22)映射到宿主机的 2222 端口,这样直接在宿主机通过 ssh 客户端访问 127.0.0.1:2222 端口就等价于访问虚拟机的 22 端口。

# Create a forwarded port mapping which allows access to a specific port# within the machine from a port on the host machine. In the example below,# accessing "localhost:8080" will access port 80 on the guest machine.# NOTE: This will enable public access to the opened portconfig.vm.network "forwarded_port", guest: 80, host: 9000

虚机启动的时候可以看到这些pord forward

7)同步文件夹

安装好虚拟机,总要安装软件吧。 那软件包如何上传到虚拟机中呢?

在vagrant file中添加这个参数,

  # Share an additional folder to the guest VM. The first argument is# the path on the host to the actual folder. The second argument is# the path on the guest to mount the folder. And the optional third# argument is a set of non-required options.config.vm.synced_folder "D:\\data", "/vagrant_data"

启动的log

    default: /vagrant_data => D:/data
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_data /vagrant_dataThe error output from the command was:mount: unknown filesystem type 'vboxsf'

这里有个报错,无法mount。据log说明和热心网友指示,安装一个插件

MyySophia@DESKTOP-LEAJQA9 MINGW64 /d/HashiCorp/box
$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.30.0)'!

然后启动,可以看到本地的文件已经和虚拟机同步了。

...Complete!
Copy iso file D:\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.20 - guest version is unknown
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.1.20 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.25.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
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Rsyncing folder: /cygdrive/d/HashiCorp/box/ => /vagrant
==> default: Mounting shared folders...default: /vagrant_data => D:/data
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.MyySophia@DESKTOP-LEAJQA9 MINGW64 /d/HashiCorp/box
$ vagrant ssh
Last login: Wed Jul 21 14:50:07 2021 from 10.0.2.2[vagrant@node1 /]$ cd vagrant_data/
[vagrant@node1 vagrant_data]$ ll
total 506644
-rwxrwxrwx. 1 vagrant vagrant 301867081 Oct  6  2018 flink-1.6.1-bin-hadoop27-scala_2.11.tgz
-rwxrwxrwx. 1 vagrant vagrant 216929574 Mar 17  2018 hadoop-2.7.5.tar.gz

有一点需要注意,共享目录不要解压文件,否则会报错.

jdk1.8.0_301/jmc.txt
tar: jdk1.8.0_301/jre/lib/amd64/server/libjsig.so: Cannot create symlink to `../libjsig.so': Protocol error
tar: Exiting with failure status due to previous errors

8) 配置公有网络

foobar.vm.network :public_network # virtualbox的DHCP自动分配地址

其本质是将虚拟机桥接到了宿主机的网卡上。

nat 、桥接 、host-only连接互通性总结

virtual提供了很多中网络连接方式:

最长使用的就是这三种。

连接 宿主机和虚拟机 虚拟机对外网访问 外网对虚拟机访问
Host-only 可以互访 不能直接访问 不能直接访问
NAT 虚拟机可访问宿主机 可以(通过宿主机) 不能直接访问
桥接 可以互访 直接访问 直接访问
  1. Host-only相当于虚拟机和宿主机通过交叉线相连;
  2. NAT,宿主机相当于虚拟机的路由器;
  3. 桥接,相当于把宿主机和虚拟机同时接到交换机上,然后交换机接到外网。

使用桥接虽然宿主机和虚拟机可以相互访问,但是如果跨网段主机访问还是不行?如何攻克这个问题呢?

例如我在prod Centos7 机器上使用vagrant 拉起一个虚拟机,网络模式选择桥接到bond0上。如果不指定bridge,vagrant up会hang住等待你选择桥接到那个网卡.

# Create a public network, which generally matched to bridged network.# Bridged networks make the machine appear as another physical device on# your network.config.vm.network "public_network", ip: "10.50.10.21", bridge: "bond0"

注意: windows好像会默认帮你桥接到某个网卡。这里你完全可以自行选择要桥接到哪个网卡上。

现在宿主机网段内的机器都可以和这个虚拟机相互访问。

但是如果跨网段,例如10.56 显然跨网段了,要想访问vagrant拉起的虚拟机。怎么办呢?

要想访问通,必须得先ping通。根据以前的知识,跨网段通信,数据包肯定是通过网关的。

  • 查看虚拟机网关
# ip route
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15
10.56.14.0/24 dev eth1  proto kernel  scope link  src 10.56.14.116
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.42.1
  • 删除默认网关
route delete default gw 10.0.2.2 eth0

注意需要安装这个软件(net-tools-2.0-0.25.20131004git.el7.x86_64 )

  • 新增10.56网段到10.50网段的网关

先在宿主机上查看路由规则 ip route

在git bash中 vagrant ssh连接上虚拟机,增加默认路由

route add default gw 10.50.10.254 eth1

此时10.56 网段已经可以访问10.50网段的虚拟机了。这是你可以通过工具连接上去做各种操作啦。在虚拟机上启动的服务,只要配置了虚拟机网段的网关地址都可以访问其服务。

以下是10.56 网段路由信息

这样你就可以白嫖公司的服务器做各种测试了。

问题:  虚拟机重启,默认路由就会丢失,如何将该路由放在开机启动脚本中.

--update 2022年4月27日11:01:14 Centos7 永久新增默认路由

因为我是为不同网卡添加路由,默认的路由在eth0网卡上,所以不用删除旧的默认路由,直接在eth1上添加默认路由,在network中添加如下两行内容。

echo NETWORKING=YES >> /etc/sysconfig/network ;echo GATEWAY=10.50.10.254 >>/etc/sysconfig/network~]#more /etc/sysconfig/network
# Created by anaconda
NETWORKING=YES
GATEWAY=10.50.10.254

这种操作方式是看到《docker 容器和容器云》这本书有所启发

Note: VBox会自动将所有放入NAT的虚拟机放入10.0.2.0/24网段,并将它们的网关自动设置为10.0.2.2

4、总结

上面这种方法,可以把开发环境安装到本机的虚拟机上。最主要的是安装一个linux环境,他的使用和使用linux是一样的。这种方式安装的系统体积非常小,大约100多M。这也是一个非常大的优势吧。

5、注意事项

5.1 虚拟机导致空间爆炸

突然C盘剩不到1G空间了,分析了一波,发现是 VAGRANT_HOME设置的C盘。

vagrant在执行子命令box add、init、up等命令时,都可能会去下载所需的虚拟机镜像文件,即Box image。

Linux版本的vagrant目录是: ~/.vagrant.d目录.

Linux设置VAGRANT_HOME环境变量方式:echo 'export VAGRANT_HOME="/data/.vagrant.d"' >>~/.bashrc
exec bash
设置VAGRANT_HOME环境变量后,vagrant下载的box镜像文件将放在指定的目录下。

.vagrant占用比较大

在vagrant up初始化并启动虚拟机后,在Vagrantfile文件所在目录内,将有一个名为.vagrant的目录,vagrant up根据Vagrantfile所创建的虚拟机的vagrant状态数据都处于.vagrant/machines内。

虚拟机自身安装到了哪里?这和虚拟机管理工具有关:

对于hyperv来说,虚拟机自身也被安装在.vagrant/machines中
对于virtualbox来说,虚拟机自身则被安装在virtualbox所指定的默认安装目录下

Linux安装的virtualBox默认是 /root/VirtualBox VMs

可以修改此目录。

VBoxManage setproperty machinefolder  /spkshare1/Virtualbox\ VMS

5.2 修改时区

[root@meta ~]# date
Wed Apr 27 07:07:11 UTC 2022
[root@meta ~]#
[root@meta ~]#
[root@meta ~]# timedatectl set-timezone Asia/Shanghai
[root@meta ~]#
[root@meta ~]# date
Wed Apr 27 15:09:05 CST 2022
[root@meta ~]#

5.3 修改环境变量

tee /etc/profile <<-'EOF'
if [ -z $USER_IP ]
thenUSER_IP=`hostname`fi
HISTTIMEFORMAT="%F %T $USER_IP:`whoami` "
export HISTTIMEFORMATPS1='[\u@\H \w]\$'
export PS1
EOF

5.4 启动脚本

#开启
cd ~/pigsty/meta && vagrant up
cd ~/pigsty/node/node-1 && vagrant up
cd ~/pigsty/node/node-2 && vagrant up
cd ~/pigsty/node/node-3 && vagrant up
cd ~/pigsty/node/node-4 && vagrant up

5.5 添加磁盘

虚拟机的磁盘放在哪里?

7]#vboxmanage showvminfo "meta_meta_1651042401911_2096" | grep -i -C 10 vmdk
Autostart Enabled:           disabled
Autostart Delay:             0
Default Frontend:
VM process priority:         default
Storage Controller Name (0):            IDE
Storage Controller Type (0):            PIIX4
Storage Controller Instance Number (0): 0
Storage Controller Max Port Count (0):  2
Storage Controller Port Count (0):      2
Storage Controller Bootable (0):        on
IDE (0, 0): /gpmaster/gpseg-1_down/VirtualBox VMs/meta_meta_1651042401911_2096/Snapshots/{1099fcea-8c75-4e21-89c4-fbab7ff05bef}.vmdk (UUID: 1099fcea-8c75-4e21-89c4-fbab7ff05bef)
NIC 1:                       MAC: 5254004D77D3, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
NIC 1 Settings:  MTU: 0, Socket (send: 64, receive: 64), TCP Window (send:64, receive: 64)
NIC 1 Rule(0):   name = ssh, protocol = tcp, host ip = 127.0.0.1, host port = 2204, guest ip = , guest port = 22
NIC 2:                       MAC: 08002760F622, Attachment: Bridged Interface 'bond1', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
NIC 3:                       disabled
NIC 4:                       disabled

存储控制器(Storage Controller)是IDE的

现在多数是SATA的。一般IDE现在是用来添加光驱的了,而SATA通常是用来添加硬盘的。

GUI长这样子

虚拟磁盘的类型

专家模式提供更多选择

这对应的vboxmanage是怎么弄得呢?

centos7-virtualBox命令行创建虚拟机_心若留念的博客-CSDN博客_virtualbox 命令行创建虚拟机

https://www.bianchengquan.com/article/613239.html

vboxmanage 相关操作

每个虚拟机都有自己的名称和 UUID,操纵虚拟机可以用名称或者 UUID。

显示虚拟机列表

显示所有虚拟机:

/gpmaster/pigsty/centos7]# VBoxManage list vms
"centos7_default_1650880976191_8211" {dbffc4d4-f2d5-4069-8cec-58899e5a3ecc}
"node1_default_1647242280112_12910_1650961712120_39076" {90660027-3505-4e42-9dd7-b6a38c904798}
"centos-7-1-1.x86_64_1651042392192_35447" {90030128-c2f8-4e5b-9cff-f8c876f5ea58}
"meta_meta_1651042401911_2096" {b192836e-ed5e-440c-a3d8-1d96a10f1f40}
"node-1_node-1_1651043797475_7165" {16cee702-2849-4c7f-845d-26d03a24d394}
"node-2_node-2_1651043819393_78885" {ef229cc9-b80f-4430-9670-eec9e1441dcd}
"node-3_node-3_1651043832554_87771" {0e24f306-963c-4707-8c1e-c8b969bf64e0}
"node-4_node-4_1651043843594_90767" {177a9540-6cd8-486a-a0de-55ebc2ffafd8}

显示正在运行的虚拟机:

]#vboxmanage list runningvms
"meta_meta_1651042401911_2096" {b192836e-ed5e-440c-a3d8-1d96a10f1f40}
"node-1_node-1_1651043797475_7165" {16cee702-2849-4c7f-845d-26d03a24d394}
"node-2_node-2_1651043819393_78885" {ef229cc9-b80f-4430-9670-eec9e1441dcd}
"node-3_node-3_1651043832554_87771" {0e24f306-963c-4707-8c1e-c8b969bf64e0}
"node-4_node-4_1651043843594_90767" {177a9540-6cd8-486a-a0de-55ebc2ffafd8}

使用 –sorted (-s) 可对输出进行排序。

打开虚拟机

不一定需要在vagrantfle所在的目录下执行vagrant up,这个方式也可以启动虚拟机.

vboxmanage startvm <name or UUID>

指定启动方式可以使用 –type 参数,可以指定 GUI、headless、separate 和 sdl 四种方式。具体用法可以看help。

操纵虚拟机(改变状态)

vboxmanage controlvm <sub command> <name or UUID>

这里的 sub command 异常丰富,但是最常用的还是改变虚拟机的状态,包括:pause、resume、reset、poweroff、savestate、acpipoweroff 和 acpisleepbutton。具体可参考

显示并修改虚拟机信息

显示虚拟机信息

vboxmanage showvminfo <name or UUID>

修改虚拟机信息使用 modifyvm 命令,下面列举几个比较常用的命令,具体可参考

修改虚拟机名称

vboxmanage modifyvm <name or UUID> -name <new name>

修改虚拟机内存大小

vboxmanage modifyvm <name or UUID> --memory <RAM in MB>

修改虚拟机的 CPU 个数

vboxmanage modifyvm <name or UUID> --cpus <number>

为虚拟机添加硬盘

VBoxManage createvdi & VBoxManage storageattach

# 创建虚拟卷,并指定大小和位置
# vdi 代表virtual box原生的
# vmdk 代表VMware开发的 但支持virtualbox....
VBoxManage createvdi --filename "/gpmaster/gpseg-1_down/VirtualBox\ VMs/node-1_node-1_1651043797475_7165/node1-50g.vdi" --size 51200
# 将第一步创建的虚拟存储卷绑定到指定虚拟机上
VBoxManage storageattach node-1_node-1_1651043797475_7165 --storagectl SATA --port 0 --device 0 --type hdd --medium "/gpmaster/gpseg-1_down/VirtualBox\ VMs/node-1_node-1_1651043797475_7165/node1-50g.vdi"# 如果这一步报错找不到STAT 控制器,添加stat控制器 (需要将虚拟机关机操作)
VBoxManage storagectl meta_meta_1651042401911_2096 --name SATA --add sata --controller IntelAhci --bootable on

查看可用的磁盘

[root@node-1 ~]#lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
└─sda1 xfs          1c419d6c-5064-4a2b-953c-05b2c67edb15 /
sdb

VBoxManage snapshot 准备虚拟机快照

"master1" {7a83b753-149a-44c1-a69e-d701b2c47f50}
"master2" {b90f4050-37c2-4330-997d-338ad641ec09}
"master3" {7e7e16c2-43e0-4d4e-995c-ec653d999fbb}
"node4" {31d58233-11de-43a2-8a2d-c31d0f4dcb8c}
"node5" {d9de0220-2bae-4511-864f-d340b9c62fd1}
"node6" {8196e54c-7612-4c1f-89b5-eafceec1f795}

脚本生成snapshot

for snap in 7a83b753-149a-44c1-a69e-d701b2c47f50 b90f4050-37c2-4330-997d-338ad641ec09 7e7e16c2-43e0-4d4e-995c-ec653d999fbb 31d58233-11de-43a2-8a2d-c31d0f4dcb8c d9de0220-2bae-4511-864f-d340b9c62fd1 8196e54c-7612-4c1f-89b5-eafceec1f795;do
VBoxManage snapshot $snap take base;
done

参考: 超详细的 Vagrant 上手指南 - 知乎

熟练使用vagrant(11):vagrant配置虚拟机网络 | 骏马金龙目录:熟练使用vagrant系列文章 vagrant视频教程:熟练使用vagrant管理虚拟机 熟练使用vagrant(11):vagrant配置虚拟机网络一般来说,如果没有更多的需求,vagrant对虚拟机网络所做的默认配置应该足够了。如果有进一步配置需求,除了要求了解virtualbox或hyperv或vmware的网络模型,还需了解vagrant对不同provider的默认网络配https://www.junmajinlong.com/virtual/vagrant/vagrant_network/

centos7 多网卡修改默认路由 - hardtoname - 博客园

linux virtualbox更换virtualbox vms目录位置 - Carlton.C.X.Z的个人页面 - OSCHINA - 中文开源技术交流社区

https://docs.oracle.com/en/virtualization/virtualbox/6.0/user/vboxmanage-modifyvm.html

云原生的高效生产工具 ---vagrant相关推荐

  1. 云原生 DevOps 的 5 步升级路径

    作者 | 张裕 编辑 | 雅纯 来源|阿里巴巴云原生公众号 什么是云原生 DevOps 点击查看视频:https://v.qq.com/x/page/u3220cutt7v.html 我们先通过上面一 ...

  2. 2020 阿里云原生实战峰会即将开幕 云原生落地的正确姿势

    来源|阿里巴巴云原生公众号 2020 的各种意外,让数字创新成为应对不确定性最为确定的发展动能.一方面,数字化成为提升企业核心竞争力的关键:另一方面,云原生取代传统 IT 成为企业数字化最短路径,加速 ...

  3. 开始报名!首次阿里巴巴经济体双 11 云原生实践展示

    2019 天猫双 11 再次刷新世界纪录,订单创新峰值达到 54.4 万笔/秒,单日数据处理量达到 970PB.今年阿里巴巴核心系统 100% 上云,撑住了双 11 的世界级流量洪峰. 双 11 云原 ...

  4. 究竟什么是云原生DevOps呢?

    简介:究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准,语言和框架无关,具备持续交付和智能自运维能力,从而做到比传统DevOp ...

  5. 2020 阿里云原生实战峰会开幕 云原生落地的正确姿势

    简介:让数字创新成为应对不确定性最为确定的发展动能. 来源|阿里巴巴云原生公众号 2020 的各种意外,让数字创新成为应对不确定性最为确定的发展动能.一方面,数字化成为提升企业核心竞争力的关键:另一方 ...

  6. 如何落地云原生DevOps?

    简介: 什么是云原生DevOps?在阿里内部有怎样的实践?企业又该如何落地?阿里云云效专家团队提出了下一代精益产品开发方法体系--ALPD,提供了系统的云原生DevOps落地的方法支撑,帮助企业渐进式 ...

  7. 云原生DevOps的5步升级路径

    简介: 究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准,语言和框架无关,具备持续交付和智能自运维能力,从而做到比传统DevO ...

  8. 云原生 DevOps 的5步升级路径

    1.什么是云原生DevOps 我们先通过一个简单的例子来了解什么是云原生DevOps,它和DevOps有什么不同. 上图是一个大排档,图中的大厨在非常努力的去切.炒.制作各种美食,并将它卖出去.从原材 ...

  9. 阿里云中间件首席架构师李小平:云原生实践助力企业高效创新

    简介:通过云原生技术,真正为企业带来更多的业务价值,助力企业整体的业务创新. 作者:李小平 前天我参加了信通院的云原生产业大会,在会场上非常感慨,参加会议的企业非常多,并且来自于各行各业.我想起201 ...

  10. mysql数据库应用与开发姜桂洪 课后答案_一站式打卡“云原生”时代的高效开发...

    这个周末,古都金陵,人文璀璨.一场人气爆满的DevRun开发者沙龙悄然拉开了帷幕. 在这场近90分钟脑力风暴,与近2小时实战修炼中,主题直奔当下火热的"云原生",并结合云原生时代的 ...

最新文章

  1. 两个整数百分百C语言,2011年9月份计算机二级C语言上机题库(百分百准确),,,[1]
  2. 北邮OJ 1005. 16校赛-Hawei Learning C
  3. (转)SystemProcessesAndThreadsInformation
  4. java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
  5. bug:记录 Caused by: java.lang.NoClassDefFoundError: Could not initialize class
  6. 集群起不来oracle,Oracle11g rac 集群无法启动分析及处理
  7. arping 本机出现 timeout 问题
  8. 论文笔记-Exploring Plain Vision Transformer Backbones for Object Detection
  9. Class 类文件结构解析
  10. DINO:一种新的端到端目标检测器(速读版)
  11. 访问文件或图片报403的处理方式
  12. python中pip下载的代理设置
  13. 本地计算机用户组,管理本地用户与组账户
  14. java设计模式之中介者模式(Mediator)
  15. 教你用JavaScript制作图片回廊
  16. 物联网毕业设计 - 基于STM32的轮足两用可变形环境感知探测机器人
  17. 初学数据治理必读书单(2022年版本)
  18. 3GPP TS 23501-g51 中英文对照 | 4.4.7 MSISDN-less MO SMS Service
  19. Arm物联网全面解决方案加速产业创新,赋能开发者多样化市场
  20. 通信原理实验 多径传播 MATLAB仿真

热门文章

  1. 信创办公--基于WPS的Word最佳实践系列(图片背景的删除)
  2. 数据分析统计知识—假设检验
  3. 数据治理---Apache Atlas元数据管理
  4. matlab中累乘,numpy中的裁剪、压缩和累乘
  5. 码农自述:猝死瞬间,我在想些什么?
  6. 如何将密切好友的微信聊天记录恢复到自己的微信中
  7. React路由ReactRouter6
  8. 产品经理之「用户故事实战」
  9. 阿里P7、P8、P9级别需要多少年的工作经验,还是因能力而定?
  10. 9个设计师常用的高清图库 不敢配图? 这9个免版权图库牢记心中!