本文主要描述如何在命令行下为VirtualBox虚拟机添加数据磁盘。我的环境中Vagrant和VirtualBox均运行在Oracle Linux 7.5下(无GUI桌面环境)。理论上,下面的命令也适用于EL系列Linux系统。
Windows和MacOS环境下也可以参考下面的操作方法来添加磁盘。但是,在VirtualBox的管理UI界面上添加可能更方便一些。
我的环境采用Vagrant来创建虚拟机,如下所示:
- Vagrantfile路径:/root/vagrantdata/orcltest/
- 虚拟机目录:/root/VirtualBox VMs/vagrant_orcltest/
我的Vagrantfile内容如下:
[root@oratest ~]# cd ~/vagrantdata/orcltest/
[root@oratest orcltest]# cat Vagrantfile
Vagrant.configure("2") do |config|
config.vm.hostname = "orcltest"
config.vm.box = "centos7/1812_01"
config.vm.box_check_update = false
config.vm.network "private_network", ip: "10.128.0.41"
config.vm.network :forwarded_port, guest: 22, host: 10041, auto_correct: true
config.vm.provider "virtualbox" do |vb|
vb.name = "vagrant_orcltest"
vb.gui = false
vb.memory = "12800"
vb.cpus = 4
end
config.vm.provision "shell", inline: <<-SHELL
yum install -y openssh-server net-tools wget dstat &> /dev/null
echo 'LoginGraceTime 0' >> /etc/ssh/sshd_config
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
sed -i "/^PasswordAuthentication no/d" /etc/ssh/sshd_config
echo r00tr00t |passwd --stdin root
systemctl enable sshd
systemctl restart sshd
echo "export TZ='Asia/Shanghai'" >> /etc/profile
echo "export LANG=en_US.UTF-8" >> /etc/profile
echo "alias df='df -hTP'" >> /etc/profile
echo "alias df='df -hP'" >> /etc/profile
echo "alias free='free -h'" >> /etc/profile
sed -i "/orcltest/d" /etc/hosts
sed -i "/SELINUX=/s/enforcing/disabled/g" /etc/selinux/config
echo >> /etc/hosts
echo "10.128.0.41 orcltest" >> /etc/hosts
SHELL
end
下面,我们为该虚拟机添加2块40GB的数据磁盘;
首先关闭虚拟机:
[root@oratest ~]# cd ~/vagrantdata/orcltest
[root@oratest orcltest]# vagrant halt
==> default: Attempting graceful shutdown of VM...
本例中我的虚拟机在VirtualBox清单中的名称并非orcltest,使用类似如下的命令来获取:
[root@oratest orcltest]# VBoxManage list vms |grep orcl
"vagrant_orcltest" {e2aa4bdf-065f-455a-b2e0-c9f968eee1b7}
进入Virtualbox虚拟机的存储目录下:
[root@oratest orcltest]# cd ~/VirtualBox\ VMs/vagrant_orcltest/
[root@oratest vagrant_orcltest]# ls -lh
total 953M
-rw------- 1 root root 958M May 31 16:15 centos-7-1-1.x86_64.vmdk
drwx------ 2 root root 22 May 31 16:14 Logs
-rw------- 1 root root 2.2K May 31 16:15 vagrant_orcltest.vbox
-rw------- 1 root root 2.2K May 31 16:14 vagrant_orcltest.vbox-prev
创建两个虚拟磁盘,格式为VDI,大小均为40GB:
[root@oratest vagrant_orcltest]# VBoxManage createhd --filename centos-7-1-1.x86_64_disk01.vdi --size 40960
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: c37fb599-286c-41ea-86e2-23a1cf5941b6
[root@oratest vagrant_orcltest]# VBoxManage createhd --filename centos-7-1-1.x86_64_disk02.vdi --size 40960
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: 6cb174e3-9fad-47a7-a0f7-437c01d4e5fc
[root@oratest vagrant_orcltest]# ls -lh centos-7-1-1.x86_64*
-rw------- 1 root root 2.0M May 31 16:32 centos-7-1-1.x86_64_disk01.vdi
-rw------- 1 root root 2.0M May 31 16:32 centos-7-1-1.x86_64_disk02.vdi
-rw------- 1 root root 958M May 31 16:32 centos-7-1-1.x86_64.vmdk
查看当前虚拟机定义文件,确定StorageController名称、驱动及端口数量:
[root@oratest vagrant_orcltest]# cat vagrant_orcltest.vbox |grep IDE
<StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
因为我的虚拟机当前已存在一个IDE驱动总线,且端口数量为2,最多可支持4块盘(port=[0-1], device=[0-1])。
我们建议为数据磁盘新添加一个磁盘驱动总线来挂载。本例中我们添加一个SAS磁盘驱动总线:
[root@oratest vagrant_orcltest]# VBoxManage storagectl vagrant_orcltest --name "SAS" --add sas --controller LSILogicSAS
[root@oratest vagrant_orcltest]# cat vagrant_orcltest.vbox |grep 'StorageController name'
<StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
<StorageController name="SAS" type="LsiLogicSas" PortCount="8" useHostIOCache="false" Bootable="true"/>
或者,你也可以添加一个SATA总线来挂载磁盘,如下所示:
[root@oratest vagrant_orcltest]# VBoxManage storagectl vagrant_orcltest --name "SATA" --add sata --controller IntelAHCI
[root@oratest vagrant_orcltest]# cat vagrant_orcltest.vbox |grep 'StorageController name'
<StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
<StorageController name="SAS" type="LsiLogicSas" PortCount="8" useHostIOCache="false" Bootable="true"/>
<StorageController name="SATA" type="AHCI" PortCount="30" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3"/>
执行如下操作,将新加的数据磁盘连接到SAS总线上:
[root@oratest vagrant_orcltest]# VBoxManage storageattach vagrant_orcltest --storagectl "SAS" --port 0 --device 0 --type hdd --medium centos-7-1-1.x86_64_disk01.vdi
[root@oratest vagrant_orcltest]# VBoxManage storageattach vagrant_orcltest --storagectl "SAS" --port 1 --device 0 --type hdd --medium centos-7-1-1.x86_64_disk02.vdi
[root@oratest vagrant_orcltest]# cat vagrant_orcltest.vbox |grep HardDisk
<HardDisks>
<HardDisk uuid="{90b9b7d1-f2aa-4ad2-84bb-a04aa88048b5}" location="centos-7-1-1.x86_64.vmdk" format="VMDK" type="Normal">
<HardDisk uuid="{18a21c71-6e77-4fd3-a752-ca233fe84bdc}" location="Snapshots/{18a21c71-6e77-4fd3-a752-ca233fe84bdc}.vmdk" format="VMDK"/>
</HardDisk>
<HardDisk uuid="{ea5194dd-03e3-4d3e-b0e8-2376946dc12b}" location="centos-7-1-1.x86_64_disk01.vdi" format="VDI" type="Normal"/>
<HardDisk uuid="{4b0308e0-46bb-471e-b615-4c6b2cb04da7}" location="centos-7-1-1.x86_64_disk02.vdi" format="VDI" type="Normal"/>
</HardDisks>
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<AttachedDevice type="HardDisk" hotpluggable="false" port="1" device="0">
或者,执行如下操作,将新加的数据磁盘连接到SATA总线上:
[root@oratest vagrant_orcltest]# VBoxManage storageattach vagrant_orcltest --storagectl "SATA" --port 0 --device 0 --type hdd --medium centos-7-1-1.x86_64_disk01.vdi
[root@oratest vagrant_orcltest]# VBoxManage storageattach vagrant_orcltest --storagectl "SATA" --port 1 --device 0 --type hdd --medium centos-7-1-1.x86_64_disk02.vdi
[root@oratest vagrant_orcltest]# cat vagrant_orcltest.vbox |grep HardDisk
<HardDisks>
<HardDisk uuid="{90b9b7d1-f2aa-4ad2-84bb-a04aa88048b5}" location="centos-7-1-1.x86_64.vmdk" format="VMDK" type="Normal">
<HardDisk uuid="{4c89bac1-c14c-484d-896d-07e0ae86582c}" location="Snapshots/{4c89bac1-c14c-484d-896d-07e0ae86582c}.vmdk" format="VMDK"/>
</HardDisk>
<HardDisk uuid="{ea5194dd-03e3-4d3e-b0e8-2376946dc12b}" location="centos-7-1-1.x86_64_disk01.vdi" format="VDI" type="Normal"/>
<HardDisk uuid="{4b0308e0-46bb-471e-b615-4c6b2cb04da7}" location="centos-7-1-1.x86_64_disk02.vdi" format="VDI" type="Normal"/>
</HardDisks>
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<AttachedDevice type="HardDisk" hotpluggable="false" port="1" device="0">
NOTE: 上面提供了两种方式来挂载磁盘,根据需要选择即可。当然,两种方式也可以同时使用。
接下来,启动虚拟机:
[root@oratest vagrant_orcltest]# cd -
/root/vagrantdata/orcltest
[root@oratest orcltest]# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2202.
==> default: Vagrant has detected a configuration issue which exposes a
==> default: vulnerability with the installed version of VirtualBox. The
==> default: current guest is configured to use an E1000 NIC type for a
==> default: network adapter which is vulnerable in this version of VirtualBox.
==> default: Ensure the guest is trusted to use this configuration or update
......
......
然后,验证磁盘情况:
[root@oratest orcltest]# ssh root@10.128.0.41
The authenticity of host '10.128.0.41 (10.128.0.41)' can't be established.
ECDSA key fingerprint is SHA256:oQuLSMELnQ8tDaIku3Z8zR4DdClY+0irOemyvje/DtQ.
ECDSA key fingerprint is MD5:71:e3:cc:38:e3:32:e1:2f:8b:9c:ef:71:55:bc:e6:14.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.128.0.41' (ECDSA) to the list of known hosts.
root@10.128.0.41's password:
[root@orcltest ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 May 31 16:53 /dev/sda
brw-rw---- 1 root disk 8, 1 May 31 16:53 /dev/sda1
brw-rw---- 1 root disk 8, 16 May 31 16:53 /dev/sdb
brw-rw---- 1 root disk 8, 32 May 31 16:53 /dev/sdc
[root@orcltest ~]# fdisk -l /dev/sd[b-c]
Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdc: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
使用磁盘:
[root@orcltest ~]# which pvcreate || yum install lvm2 -y
/usr/sbin/pvcreate
[root@orcltest ~]# pvcreate /dev/sd[b-c]
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
[root@orcltest ~]# vgcreate vg_data /dev/sd[b-c]
Volume group "vg_data" successfully created
[root@orcltest ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 2 0 0 wz--n- 79.99g 79.99g
[root@orcltest ~]# lvcreate -L 20G -n data vg_data
Logical volume "data" created.
[root@orcltest ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data vg_data -wi-ao---- 20.00g
[root@orcltest ~]# mkfs.xfs /dev/mapper/vg_data-data
meta-data=/dev/mapper/vg_data-data isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@orcltest ~]# mkdir /data/
[root@orcltest ~]# mount -t xfs /dev/mapper/vg_data-data /data
[root@orcltest ~]# df -hTP /data
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_data-data xfs 20G 33M 20G 1% /data
NOTE:
VBoxManage
命令的用法可以参考这里:VBoxManage命令用法详解。