Vagrant 扩容及创建逻辑卷
vagrant 扩容方案解决你的虚拟机硬盘不足问题。
准备工作
用vagrant创建虚拟机时默认是动态分配硬盘,导致虚拟机的硬盘空间只有8G,随着安装的应用越来越多,硬盘容量已明显不足.
本文介绍两种给vagrant虚拟机扩容的方法:
通过VBoxManage工具扩容
通过vagrant插件vagrant-disksize扩容
通过VBoxManage工具扩容
在执行扩容操作前需要将虚拟机关闭.
cd ~/vagrant/mysqlMaster #虚拟机Vagrantfile所在的路径
vagrant halt
将vmbox格式转换为vdi格式
cd ~/VirtualBox\ VMs/
[echoxu@echoxu-linux VirtualBox VMs]$ ls
lnmapZabbix mysqlMaster mysqlSlave
[echoxu@echoxu-linux VirtualBox VMs]$ cd mysqlMaster/
[echoxu@echoxu-linux mysqlMaster]$ ls
box-disk001.vmdk Logs mysqlMaster.vbox mysqlMaster.vbox-prev
[echoxu@echoxu-linux mysqlMaster]$ VBoxManage clonehd "box-disk001.vmdk" "box-disk001.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: abedd9c5-ced0-4e79-85ae-43d5dbc729d4
进行扩容
[echoxu@echoxu-linux mysqlMaster]$ VBoxManage modifyhd "box-disk001.vdi" --resize 10240
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
卸载原来的控制器
存储控制器有IDE、SCSI、SATA三种,根据需要选择控制器类型,我选择的是SATA控制器.
VBoxManage storagectl mysqlMaster --name "SATA" --remove
卸载SCSI、IDE控制器可用如下命令:
VBoxManage storagectl mysqlMaster --name "IDE" --remove
VBoxManage storagectl mysqlMaster --name "SCSI" --remove
上述内容中的mysqlMaster为虚拟机的名称
添加新的控制器
重新添加新的控制器:
VBoxManage storagectl mysqlMaster --name SATA --add sata
添加控制器存储介质
VBoxManage storageattach mysqlMaster --storagectl "SATA" --port 0 --device 0 --type hdd --medium box-disk001.vdi
至此通过VBoxManage工具给vagrant进行扩容就完成了,可通过 “设置—存储–SATA控制器”中查看到硬盘容量(需先选择虚拟机)。 此时ssh登录虚拟机用df -lh
查看分区还是8G,所以需要通过fdisk
进行分区.
使用fdisk创建逻辑卷
下面是使用fdisk进行操作的详细过程:
- 新建分区
[echoxu@mysqlSlave ~]$ sudo fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p #下面显示的是原来的分区信息
磁盘 /dev/sda:16.1 GB, 16106127360 字节,31457280 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d3f90
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 20971519 9436160 8e Linux LVM
命令(输入 m 获取帮助):n #c创建新分区
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p #创建主分区,只能分4个主分区,如果已经有3个主分区,剩下的建议选择扩展分区即按e
分区号 (3,4,默认 3):3 #创建/dev/sda3,因为已有/dev/sda1和/dev/sda2了
起始 扇区 (20971520-31457279,默认为 20971520): #扇区开始,选择默认即可
将使用默认值 20971520
Last 扇区, +扇区 or +size{K,M,G} (20971520-31457279,默认为 31457279):+4G #创建的分区大小
分区 3 已设置为 Linux 类型,大小设为 4 GiB
命令(输入 m 获取帮助):p #查看分区结果,显示已创建了/dev/sda3
磁盘 /dev/sda:16.1 GB, 16106127360 字节,31457280 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d3f90
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 20971519 9436160 8e Linux LVM
/dev/sda3 20971520 29360127 4194304 83 Linux
命令(输入 m 获取帮助):t #更改分区类型
分区号 (1-3,默认 3):3 #选择将/dev/sda3更改类型为LVM
Hex 代码(输入 L 列出所有代码):8e #LVm类型代码
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w #将操作写入硬盘
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
提示
通过fdisk执行操作时如果不按w是保存在内存中的,按q取消后分区还是和以前一样,如果按了w分区结果会保存.
- 让Linux识别创建的新分区
发现刚创建的分区/dev/sda3在linux中并没有被识别出来,因为如下信息中没有显示/dev/sda3相关的信息
[echoxu@mysqlSlave ~]$ ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2
[echoxu@mysqlSlave ~]$ cat /proc/partitions
major minor #blocks name
8 0 12582912 sda
8 1 1048576 sda1
8 2 9436160 sda2
11 0 1048575 sr0
253 0 8384512 dm-0
253 1 1048576 dm-1
让centos识别分区有如下的方法:
1: centos5: 使用partprobe命令
2: centos6及其以后版本: 使用partx,kpartx命令
这里主要将centos6以后的操作方法:
kpartx -l /dev/sda
kpartx -af /dev/sda
partx -a /dev/sda
下面的操作是让linux识别新创建的分区/dev/sda3
[echoxu@mysqlSlave ~]$ sudo kpartx -a /dev/sda #操作1
device-mapper: reload ioctl on sda1 failed: Device or resource busy
create/reload failed on sda1
device-mapper: reload ioctl on sda2 failed: Device or resource busy
create/reload failed on sda2
device-mapper: reload ioctl on sda3 failed: Device or resource busy
create/reload failed on sda3
[echoxu@mysqlSlave ~]$ sudo partx -a /dev/sda #操作2
partx: /dev/sda: error adding partitions 1-3
再查看分区结果,新创建的分区已经被linux识别了:
[echoxu@mysqlSlave ~]$ sudo cat /proc/partitions
major minor #blocks name
8 0 15728640 sda
8 1 1048576 sda1
8 2 9436160 sda2
8 3 4194304 sda3
11 0 1048575 sr0
253 0 8384512 dm-0
253 1 1048576 dm-1
[echoxu@mysqlSlave ~]$ sudo ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
- 创建逻辑卷
sudo mkdir /data
创建挂载目录
[echoxu@mysqlSlave ~]$ sudo pvcreate /dev/sda #操作1
Device /dev/sda not found (or ignored by filtering).
[echoxu@mysqlSlave ~]$ sudo pvcreate /dev/sda3 #操作2
Physical volume "/dev/sda3" successfully created.
[echoxu@mysqlSlave ~]$ sudo vgcreate myvg /dev/sda3 #创建Volume group "myvg"
Volume group "myvg" successfully created
[echoxu@mysqlSlave ~]$ sudo lvcreate -L 3G -n mydata myvg #创建 Logical volume "mydata"并分配3G空间
Logical volume "mydata" created.
[echoxu@mysqlSlave ~]$ sudo lvs #查看上述的操作是否生效
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <8.00g
swap centos -wi-ao---- 1.00g
mydata myvg -wi-a----- 3.00g
[echoxu@mysqlSlave ~]$ sudo mke2fs -t ext4 /dev/myvg/mydata #格式化逻辑卷为ext4文件格式
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
196608 inodes, 786432 blocks
39321 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
自此LVM逻辑卷已经创建完成.
- 开机自动挂载新分区
sudo vim /etc/fstab
末尾添加
/dev/myvg/mydata /data ext4 defaults,noatime 0 0
提示
/dev/myvg/mydata 为逻辑卷名,/data为挂载目录
[echoxu@mysqlSlave ~]$ sudo mount -a #挂载操作
[echoxu@mysqlSlave ~]$ sudo mount #查看挂载是否生效
查看到有这样的一行
/dev/mapper/myvg-mydata on /data type ext4 (rw,noatime,data=ordered)
[echoxu@mysqlSlave data]$ df -lh #已经挂载成功了
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 8.0G 1.8G 6.3G 23% /
devtmpfs 234M 0 234M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 4.4M 240M 2% /run
tmpfs 245M 0 245M 0% /sys/fs/cgroup
/dev/sda1 1014M 170M 845M 17% /boot
home_xujh_ShareFiles 156G 122G 34G 79% /home/xujh/ShareFiles
tmpfs 49M 0 49M 0% /run/user/1000
tmpfs 49M 0 49M 0% /run/user/0
/dev/mapper/myvg-mydata 2.9G 9.0M 2.8G 1% /data
通过vagrant插件进行扩容
安装插件
vagrant plugin install vagrant-disksize #可能需要墙出去
安装结果如下:
Installing the 'vagrant-disksize' plugin. This can take a few minutes...
Fetching: vagrant-disksize-0.1.2.gem (100%)
Installed the plugin 'vagrant-disksize (0.1.2)'!
使用国内源进行安装插件
vagrant plugin install --plugin-clean-sources --plugin-source https://gems.ruby-china.com/ 插件名
有两个地方特别需要注意:
--plugin-clean-sources这个参数容易被忽略,官方文档写的也比较模糊,必须在DEBUG模式下才能发现这个参数的作用,就是清理掉 Vagrant 默认使用的 Gems 仓库
--plugin-clean-sources和--plugin-source参数的顺序特别需要注意,必须--plugin-clean-sources在前,--plugin-source在后,才能保证先清理掉默认的 Vagrant 使用的 Gems 仓库,然后添加 RubyChina 镜像仓库。否则顺序反了的话就会把所有仓库全清掉,导致找不到插件仓库
可以使命别名简化每次输入:
alias vagrant-plugin-install='vagrant plugin install --plugin-clean-sources --plugin-source'
下次只用输入: vagrant-plugin-install 插件名
即可安装插件了。
在Vagrantfile中配置插件信息
vim ~/vagrant/mysqlSlave/Vagrantfile
在config.vm.box = "centos7.4C"
后面添加
config.disksize.size = '15GB'
vagrant plugin install慢
以下是解决思路:
替换
rubygems.org
为gems.ruby-china.com
源是否可以访问
https://gems.hashicorp.com/
下面是替换ruby源的方法:
gem -v #查看gem版本
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ #替换源
gem sources -l #查看源
然后再试试安装,如果不行就检查https://gems.hashicorp.com
是否可以访问,还不可以的话只能科学上网了.
注意
此插件只能进行扩容不能进行磁盘容量降级,且只能给第一块硬盘扩容.另外对自己做的vbox扩容不了,只兼容官方的vbox.