出于通过 vagrant box 创建 VM ,测试 Ceph 需要,需给 vm 添加额外硬盘以做测试。
环境说明
- 宿主机OS:CentOS Linux 7.7.1908
- Vagrant:2.2.5
- VirtualBox:6.0.2r128162
- 工作目录:/server/vagrant/ceph
- Vagrantfile 文件内容
# -*- mode: ruby -*-
# vi: set ft=ruby :
node_servers = {
:vm1-master => '172.18.128.254',
}
Vagrant.configure("2") do |config|
config.vm.box = "centos/7.5_18.09_x86-64"
node_servers.each do |node_servers_name, node_server_ip|
config.vm.define node_servers_name do |node_config|
node_config.vm.hostname = "#{node_servers_name.to_s}"
node_config.vm.network :private_network, ip: node_server_ip
node_config.vm.provider "virtualbox" do |vb|
vb.name = node_servers_name.to_s
end
node_config.vm.provision "shell", inline: <<-SHELL
sudo -i
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config && \
sed -n '/PermitRootLogin/p' /etc/ssh/sshd_config && \
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && \
sed -n '/^PasswordAuthentication yes/p' /etc/ssh/sshd_config && \
systemctl restart sshd && \
echo "root:vagrant" |sudo chpasswd
# set synctime
#yum install ntp -y
#systemctl enable ntpd
#sed -i 's/\(^OPTIONS=\).*/\1"-g -x"/g' /etc/sysconfig/ntpd
#systemctl restart ntpd
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# stop firewall
systemctl stop firewalld
systemctl disable firewalld
# disable selinux
sed -i 's/\(^SELINUX=\).*/\1disabled/g' /etc/selinux/config
# disable swap
#swapoff -a
#sed -i /swap/s/^/#/g /etc/fstab
#sh /vagrant/scripts/install_dockerCE_docker-compose.sh
SHELL
end
end
end
一、具体操作过程
添加硬盘分为3步:
- 创建虚拟磁盘镜像 2.附加磁盘镜像到虚拟机存储控制器 3.进入虚拟机挂载新磁盘
1. 初始化虚拟机
# 进入工作目录
cd /server/vagrant/ceph
# 校验并初始化
vagrant validate
vagrant up
# 停机并准备添加新硬盘
vagrant halt
2. 创建虚拟磁盘
这一步最简单,在母机上执行命令:
VBoxManage createhd --filename /storage/vms/disk50g --size 50000 --format VMDK
这句的意思是,创建一个虚拟磁盘 /storage/vms/disk50g 容量 50000MB 格式是 VMDK ,执行成功后会有一个文件 /storage/vms/disk50g.vmdk 记好它,路径当然根据个人需求.
3. 添加磁盘到虚拟机
这个步骤相当于我们装电脑时把硬盘插到主板上,怎么插呢?首先你得有一块硬盘,就是上面创建的那个文件,然后你要插到主板上哪个口子?我们知道主板有 ide 或 sata 磁盘驱动器,假如是sata,它还有好几个口,这些口都有编号 1,2,3,4,5 。了解了这些,下面的命令就比较好理解了。
首先,看一下虚拟机的信息
VBoxManage list vms #列出virtualbox下所有的虚拟机
找到你想弄的虚拟机,记下它的名字 ,像我这里这样的
"vm2_default_1471395575217_38235" {98d2cc97-beda-4be1-876d-d5cd7200837e}
"vm1-master" {9f172263-c4d6-4af5-a6ba-7ff0df695d37}
我要弄的是 “vm1-master”
VBoxManage showvminfo vm1-master
根据输出信息,大概找到 Storage Controller 那一块:
Storage Controller Name (0): IDE Controller
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 Controller ,要插硬盘还得先关闭虚拟机,麻烦啊,为了以后一劳永逸,我决定给虚拟机增加一个 Sata Controller ,首先 我关闭了虚拟机,当然不关闭虚拟机不知道行不行,下次试试。
VBoxManage storagectl vm1-master --name "SATA Controller" --add sata --portcount 5 --controller IntelAhci --bootable on
这样就增加了个 sata 驱动器。
继续我们把硬盘插上去
VBoxManage storageattach vm1-master --storagectl "SATA Controller" --type hdd --medium /storage/vms/disk50g.vmdk --port 1 --device 0
需要了解的有几个参数:
- vm1-master 就是你虚拟机的名字,上面有提到
- –storagectl 参数就是磁盘控制器的名字,参考上一条命令中的 –name
- –type hdd 表示是硬盘,因为这个命令不仅仅可以插硬盘,还能插光驱等,所以要指定插的是什么
- –medium 这里指定的是虚拟磁盘的文件名,想想一下你手里拿着的硬盘
- –port 表示插在哪个端口,上面我们创建 sata 控制器的时候通过 –portcount 5 开放了5个端口,相当于主板上的5个sata- 接口,此时我们用第1个
- –device 0 设备id,设为0 就可以了,我也不知道什么意思
- 如果没有错误的话,这里就成功添加了一块硬盘到虚拟机了,启动虚拟机,这里我用的是vagrant来管理虚拟机的。
vagrant up
vagrant ssh
登陆虚拟机后,执行 sudo fdisk -l ,可以看到我们刚添加的磁盘 /dev/sdb
下面我们把它分区
sudo fdisk /dev/sdb
出现提示,”command m for help ..” ,直接输入 “n” ,
进行分区,如果只要分一个区的话,最好办,一路enter ,
又回到 “command m for help ..” 的时候,输入 “w” 并回车,分区完成。
格式化分区:
sudo mkfs.xfs /dev/sdb1
挂载分区,并设置开机自动挂载:
# 设置开机自动挂载
sudo echo '/dev/sdb1 /home/wwwroot ext4 defaults 1 2' >/etc/fstab
# 挂载分区
sudo mount /dev/sdb1 /home/wwwroot
二、进阶篇
通过 Vagrantfile 自动添加硬盘,目标:
- Software: CentOS 7.6 on all nodes
- Host Services:
- node01: Management Server (IP:172.16.80.111)
- node02: Metadata Server (IP:172.16.80.112) # 额外添加 2 块硬盘
- node03: Storage Server (IP:172.16.80.113) # 额外添加 4 块硬盘
- node04: Client (IP:172.16.80.114)
- node05: Admon Server (IP:172.16.80.115) (可选项)
- Storage:
- Storage servers with RAID-6, xfs, mounted to “/data”.
- Metadata servers with RAID-1, ext4, mounted to “/mnt/md0”.
Vagrantfile 文件内容
# -*- mode: ruby -*-
# vi: set ft=ruby :
common_servers = {
:bgfsmanager => '172.16.80.111', # Management Server
:bgfsclient => '172.16.80.114', # Client
:bgfsadmon => '172.16.80.115' # Admon Server
}
metadata_servers = {
:bgfsmetadata => '172.16.80.112', # Metadata Server with RAID-1, ext4, mounted to "/mnt/md0"
}
storage_servers = {
:bgfstorage => '172.16.80.113', # Storage Server with RAID-6, xfs, mounted to "/data"
}
metadata_secondDisk='./msecondDisk.vdi' # metadata 第二颗硬盘
metadata_thirdDisk='./mthirdDisk.vdi' # metadata 第三颗硬盘
storage_secondDisk='./ssecondDisk.vdi' # storage 第二颗硬盘
storage_thirdDisk='./sthirdDisk.vdi' # storage 第三颗硬
storage_fourthDisk='./sfourthDisk.vdi' # storage 第四颗硬盘
storage_fivethDisk='./sfivethDisk.vdi' # storage 第五颗硬盘
Vagrant.configure("2") do |config|
config.vm.box = "CentOS/7.6_19.02_x86-64"
common_servers.each do |beegfs_servers_name, beegfs_server_ip|
config.vm.define beegfs_servers_name do |beegfs_config|
beegfs_config.vm.hostname = "#{beegfs_servers_name.to_s}"
beegfs_config.vm.network :private_network, ip: beegfs_server_ip
beegfs_config.vm.provider "virtualbox" do |vb|
vb.name = beegfs_servers_name.to_s
#vb.memory = 4096
if beegfs_servers_name == 'bgfsmanager' then
echo beegfs_servers_name
exit
end
end
end
config.vm.provision "shell", inline: <<-SHELL
set -e
sudo -i
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config && \
sed -n '/PermitRootLogin/p' /etc/ssh/sshd_config && \
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && \
sed -n '/^PasswordAuthentication yes/p' /etc/ssh/sshd_config && \
systemctl restart sshd && \
echo "root:vagrant" | chpasswd
# set synctime
yum install ntp -y
systemctl enable ntpd
sed -i 's/\(^OPTIONS=\).*/\1"-g -x"/g' /etc/sysconfig/ntpd
systemctl restart ntpd
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# stop firewall
systemctl stop firewalld
# disable selinux
sed -i 's|^SELINUX=.*|SELINUX=disabled|g' /etc/selinux/config
# disable swap
swapoff -a
sed -i /swap/s/^/#/g /etc/fstab
SHELL
end
metadata_servers.each do |beegfs_servers_name, beegfs_server_ip|
config.vm.define beegfs_servers_name do |beegfs_config|
beegfs_config.vm.hostname = "#{beegfs_servers_name.to_s}"
beegfs_config.vm.network :private_network, ip: beegfs_server_ip
beegfs_config.vm.provider "virtualbox" do |vb|
vb.name = beegfs_servers_name.to_s
#vb.memory = 4096
# add secondDisk
unless File.exist?(metadata_secondDisk)
vb.customize ['createhd', '--filename', metadata_secondDisk, '--variant', 'Fixed', '--size', 1 * 1024 ]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 0, '--device', 1, '--type', 'hdd', '--medium', metadata_secondDisk]
# add thirdDisk
unless File.exist?(metadata_thirdDisk)
vb.customize ['createhd', '--filename', metadata_thirdDisk, '--variant', 'Fixed', '--size', 1 * 1024 ]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', metadata_thirdDisk]
end
end
config.vm.provision "shell", inline: <<-SHELL
set -e
sudo -i
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config && \
sed -n '/PermitRootLogin/p' /etc/ssh/sshd_config && \
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && \
sed -n '/^PasswordAuthentication yes/p' /etc/ssh/sshd_config && \
systemctl restart sshd && \
echo "root:vagrant" | chpasswd
# set synctime
yum install ntp -y
systemctl enable ntpd
sed -i 's/\(^OPTIONS=\).*/\1"-g -x"/g' /etc/sysconfig/ntpd
systemctl restart ntpd
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# stop firewall
systemctl stop firewalld
# disable selinux
sed -i 's|^SELINUX=.*|SELINUX=disabled|g' /etc/selinux/config
# disable swap
swapoff -a
sed -i /swap/s/^/#/g /etc/fstab
SHELL
end
storage_servers.each do |beegfs_servers_name, beegfs_server_ip|
config.vm.define beegfs_servers_name do |beegfs_config|
beegfs_config.vm.hostname = "#{beegfs_servers_name.to_s}"
beegfs_config.vm.network :private_network, ip: beegfs_server_ip
beegfs_config.vm.provider "virtualbox" do |vb|
vb.name = beegfs_servers_name.to_s
#vb.memory = 4096
# add secondDisk
unless File.exist?(storage_secondDisk)
vb.customize ['createhd', '--filename', storage_secondDisk, '--variant', 'Fixed', '--size', 1 * 1024 ]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 0, '--device', 1, '--type', 'hdd', '--medium', storage_secondDisk]
# add thirdDisk
unless File.exist?(storage_thirdDisk)
vb.customize ['createhd', '--filename', storage_thirdDisk, '--variant', 'Fixed', '--size', 1 * 1024 ]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', storage_thirdDisk]
# add fourthDisk
unless File.exist?(storage_fourthDisk)
vb.customize ['createhd', '--filename', storage_fourthDisk, '--variant', 'Fixed', '--size', 1 * 1024 ]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 1, '--type', 'hdd', '--medium', storage_fourthDisk]
# add fivethDisk
unless File.exist?(storage_fivethDisk)
vb.customize ['createhd', '--filename', storage_fivethDisk, '--variant', 'Fixed', '--size', 1 * 1024 ]
end
#vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 1, '--type', 'hdd', '--medium', storage_fivethDisk]
end
end
config.vm.provision "shell", inline: <<-SHELL
set -e
sudo -i
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config && \
sed -n '/PermitRootLogin/p' /etc/ssh/sshd_config && \
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && \
sed -n '/^PasswordAuthentication yes/p' /etc/ssh/sshd_config && \
systemctl restart sshd && \
echo "root:vagrant" | chpasswd
# set synctime
yum install ntp -y
systemctl enable ntpd
sed -i 's/\(^OPTIONS=\).*/\1"-g -x"/g' /etc/sysconfig/ntpd
systemctl restart ntpd
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# stop firewall
systemctl stop firewalld
# disable selinux
sed -i 's|^SELINUX=.*|SELINUX=disabled|g' /etc/selinux/config
# disable swap
swapoff -a
sed -i /swap/s/^/#/g /etc/fstab
SHELL
end
end
说明:
- 受 IDE 控制器盘符号限制,只能添加 4 块硬盘(00,01,10,11)
- SATA 控制器可添加多个,但目前未找到添加方法。。
- 查看 VBox 硬盘控制器命令:
VBoxManager showvminfo + vmname |grep 'Storage Controller'
参考链接:https://my.oschina.net/cxz001/blog/734167 http://www.kclouder.cn/centos7-beegfs/