04-对虚拟机进行高效管理实践

高效管理创建的虚拟机

1 实验目的

  1. 动态调整虚拟机的配置
  2. 复制与删除虚拟机
  3. 管理虚拟机的命令总结

2 实验环境

2.1、硬件环境

  • ubuntu 22.04 server
  • AMD EPYC 7502
  • 内存三星 RECC DDR4 16G 3200
  • SATA 16TB 企业级 机械硬盘
  • 网卡板载双口千兆

2.2、软件环境

  • KVM(确保按照之前的步骤安装好)
  • openssh-serevr
  • net-tools
  • xshell 7
  • MobaXterm

3 实验内容与结果

3.1、动态调整虚拟机配置

先查看需要修改虚拟机的磁盘容量与内存

记得首先先shutdown虚拟机,再使用 virsh dominfo 命令查看虚拟机的详细信息,包括内存和CPU核心数,然后使用 virsh domblklist 命令查看虚拟机的磁盘信息 .

sudo virsh shutdown ubuntu20.04
sudo virsh start ubuntu20.04
sudo virsh dominfo ubuntu20.04
sudo virsh domblklist ubuntu20.04

增加虚拟机内存与核心数,并修改内存,然后重启虚拟机

注意修改时要关闭虚拟机,要增加虚拟机的内存为8G和CPU核心数为4,首先需要编辑虚拟机的 XML 配置文件,然后在关闭虚拟机时使配置生效。

sudo virsh edit ubuntu20.04
sudo virsh setvcpus ubuntu20.04 4 --config
sudo virsh setmaxmem ubuntu20.04 8388608 --config 

增加磁盘容量

如果你的虚拟机磁盘是通过 LVM 管理的,可以通过以下步骤增加 LVM 逻辑卷的大小:

1. 查找 LVM 逻辑卷

首先,使用 lvdisplay 查找对应的逻辑卷(LV):

sudo lvdisplay

查找和虚拟机磁盘关联的逻辑卷,并记下 LV Path,例如 /dev/vg01/ubuntu1.

2. 扩展逻辑卷

假设你要增加 10GB 的磁盘容量,使用以下命令扩展逻辑卷:

sudo lvextend -L +10G /dev/vg01/ubuntu1
3. 扩展文件系统

先使用xshell登录到虚拟机,然后进行扩展系统; 如果虚拟机内的分区仍然为 40GB,你需要扩展分区以利用新增的空间。你可以使用 growpart 命令扩展分区(假设你在 /dev/vda1 上有一个单一分区)。

  1. 安装 cloud-guest-utils(如果尚未安装):
sudo apt-get update
sudo apt-get install cloud-guest-utils
  1. 使用 growpart 扩展分区:
sudo growpart /dev/vda 2

这个命令会扩展 /dev/vda2 分区以占满整个50GB的磁盘

  1. 将文件系统扩展珍整个分区
  • 如果是 **ext4** 文件系统
sudo resize2fs /dev/vda2
  • 如果是 **xfs** 文件系统
sudo xfs_growfs /dev/vda2

总结
  • 增加虚拟机核心与内存,需要先关闭虚拟机,同时不仅要修改配置文件,还要用命令行使配置生效
  • 增加磁盘容量,如果lvm卷管理会比较方便,先在宿主机增加,然后登入对应虚拟机,安装cloud-guest-utils,使用growpart扩展到整个磁盘,再格式化对应文件系统

3.2、复制与删除虚拟机

使用 virt-manager 克隆虚拟机
1、 打开 **virt-manager**
- 启动 `virt-manager`。
- 在虚拟机列表中找到你想要复制的虚拟机。
2、关闭虚拟机:
- 右键点击虚拟机,然后选择“关闭”或“关机”。
- 确保虚拟机处于关闭状态才能进行克隆。

3、克隆虚拟机:
- 右键点击已经关闭的虚拟机,选择“克隆”。
- 在弹出的对话框中,为新的虚拟机指定一个唯一的名称。
- 根据需要选择是否重新生成 MAC 地址以及是否更改存储位置。
- 点击“克隆”按钮,等待克隆过程完成。
- 可以直接默认相关设置,会自动在存储池生成一个

4、启动克隆后的虚拟机:
- 克隆完成后,你会在虚拟机列表中看到新的虚拟机。右键点击并选择“启动”来启动新虚拟机。
使用 virt-clone 命令行工具

virt-clone 是一个专门用于克隆虚拟机的命令行工具,适用于终端操作。

关闭源虚拟机
- 确保你要克隆的虚拟机处于关闭状态:
sudo virsh shutdown <vm_name>/ubuntu20.04-2
使用 **virt-clone** 克隆虚拟机(自定义lvm逻辑卷):
- 使用以下命令克隆虚拟机:
sudo virt-clone --original <source_vm_name> --name <clone_vm_name> --file /dev/vg01/ubuntu_clone

例如:

sudo virt-clone --original ubuntu20.04-2 --name ubuntu20.04-3 --file /dev/vg01/ubuntu_clone2
- `--original <vm_name>`:指定要克隆的源虚拟机名称。
- `--name <new_vm_name>`:指定新虚拟机的名称。
- `--file <path>`:指定新虚拟机磁盘文件的存储位置。
使用 **virt-clone** 克隆虚拟机(克隆到已有逻辑卷):

创建新的逻辑卷,已经格式并挂载的文件也可以,但是相关逻辑卷没必要再格式,挂载与再挂载,在复制克隆机这个操作里面

sudo lvcreate -L <size> -n <new_volume_name> <volume_group>
# 去除逻辑卷
sudo lvremove /dev/vg01/ubuntu_vm_clone3
# 分配这个新的逻辑卷
sudo lvcreate -L 20G -n ubuntu_clone4 vg01

使用 virt-clone 命令:

sudo virt-clone --original ubuntu20.04-2 --name ubuntu20.04-4 --file /dev/vg01/ubuntu_clone --check path_exists=off
sudo virt-clone --original ubuntu20.04-2 --name ubuntu20.04-4 --file /dev/vg01/ubuntu_clone --check path_exists=off
sudo virt-clone --original ubuntu20.04-2 --name ubuntu20.04-4 --file /dev/vg01/ubuntu_clone --check path_exists=off
sudo virt-clone --original ubuntu20.04-2 --name ubuntu20.04-5 --file /dev/vg01/ubuntu_clone3 
sudo virt-clone --original ubuntu20.04-2 --name ubuntu20.04-6 --file /dev/vg01/ubuntu_clone4 --check path_exists=off

其实直接在命名一个不存在的lvm逻辑盘就好,复制时候会自动添加,如果先使用lvcreate创建,反而需要加一个–check path_exists=off,否则会报错。

克隆完成后,使用以下命令启动新虚拟机:
sudo virsh start <new_vm_name>

例如:

sudo virsh start ubuntu-vm-clone
克隆后的配置注意事项

克隆后的虚拟机与源虚拟机完全相同,因此你可能需要进行一些配置更改以避免冲突,注意要改完ip还有其他内容之后,在全部打开。首先要确定这些修改是要登录到虚拟机内部,还是要到外面用virt-manager里进行修改

修改主机名

主机名虚拟机在网络上的标识,克隆后最好更改它以避免与原虚拟机冲突。

对于Ubuntu 系统来说

  1. 编辑 **/etc/hostname** 文件

使用以下命令打开 hostname 文件:

sudo vim /etc/hostname

将内容替换为新的主机名,然后保存并退出。

  1. 编辑 **/etc/hosts** 文件

打开 /etc/hosts 文件:

sudo vim /etc/hosts

找到指向旧主机名的行,更新为新的主机名。例如:

127.0.1.1   test02
  1. 应用更改

重新启动虚拟机或手动设置主机名:

sudo hostnamectl set-hostname test02
sudo hostnamectl set-hostname lxy
修改 IP 地址

如果虚拟机使用静态 IP 地址,您需要修改 IP 地址以避免网络冲突。

  1. 使用ping查看ip是否可用

也可以安装nmap,扫描整个IP段,找出被占用的ip

sudo apt-get install nmap
sudo nmap -sn 192.168.1.0/24
#-sn 参数表示只进行Ping扫描,不进行端口扫描。扫描结
果会列出在这个IP段中被占用的IP地址。未列出的IP地址可能是可用的。

  1. 选择可用ip,进行网络配置

根据 Ubuntu 版本,网络配置文件的位置可能有所不同:

- **Ubuntu 18.04 及以上使用 Netplan**:

打开 netplan 配置文件:

ls /etc/netplan/
sudo vim /etc/netplan/01-netcfg.yaml
sudo vim /etc/netplan/00-installer-config.yaml

找到 addresses: 部分,修改 IP 地址。

- **Ubuntu 16.04 及更早版本使用 **`**/etc/network/interfaces**`** 文件**:

打开网络接口配置文件:

sudo nano /etc/network/interfaces

找到相关接口配置并修改 IP 地址。

  1. 应用更改

保存文件后,应用更改:

- 对于 `Netplan`:
sudo netplan apply
- 对于 `/etc/network/interfaces` 文件:
sudo systemctl restart networking
修改 MAC 地址(可选)

有时,您可能需要修改网络接口的 MAC 地址,特别是在使用 DHCP 分配 IP 的情况下。

  1. 编辑网络接口配置

如果您使用的是 Netplan,可以直接在 netplan 配置文件中指定新的 MAC 地址:

network:
  version: 2
  ethernets:
    eth0:
      macaddress: 00:16:3e:xx:xx:xx  # 修改为新的MAC地址
  1. 使用 **ip link** 命令修改

您也可以临时修改 MAC 地址,直到重启:

sudo ip link set dev eth0 address 00:16:3e:xx:xx:xx

确保新的虚拟机有不同的 MAC 地址和 IP 地址,避免网络冲突。如果没有自动生成新的 MAC 地址,可以手动在 **virt-manager** 中编辑

修改用户名和用户目录

如果您需要更改克隆后的虚拟机用户名,可以按照以下步骤操作,这一步需要切换到root用户来实现:

  1. 创建root用户登录密码

如果你想设置或更改 root 用户的密码,可以使用以下命令:

#设置密码
sudo passwd root

#切换用户
su - root
su - hadoop3


#添加新的用户并赋予root权限
#创建新用户
sudo adduser newusername
# 将新用户添加到 sudo 组
sudo usermod -aG sudo newusername
#切换到新用户并验证权限
su - newusername
sudo -i

系统会提示你输入并确认 root 用户的新密码。设置完成后,root 用户就可以使用该密码登录

如果要用ssh远程连接,需要以下操作,不然有下面报错

相关远程连接的修改如下

sudo vim /etc/ssh/sshd_config
# 找到 PermitRootLogin 这一行,并将其设置为 yes
PermitRootLogin yes
#保存并退出
#重启SSH服务
sudo systemctl restart ssh
  • 使用 sudo passwd root 设置或更改 root 用户的密码。
  • 启用 root 登录,如果需要通过 SSH 登录,可以编辑 /etc/ssh/sshd_config 文件并重启 SSH 服务。
  • 你也可以创建新的用户并赋予 sudo 权限,作为一种替代方案
  1. 修改用户名

使用 usermod 命令修改用户名:

#切换到root用户
sudo -i
#列出用户进程
ps -u hadoop2
sudo kill -9 913
#终止多个用户进程
sudo pkill -u hadoop2
#修改用户名
sudo usermod -l hadoop3 hadoop2
  1. 修改用户主目录

如果需要更改用户主目录,请执行以下操作:

sudo usermod -d /home/newusername -m newusername
sudo usermod -d /home/hadoop3 -m hadoop3
  1. 验证修改
getent passwd | grep hadoop3
ls -l /home/hadoop3

这将移动旧的用户主目录并重命名为新的目录。

检查和修改服务配置

如果虚拟机上运行了某些服务,确保这些服务的配置文件不依赖于旧的主机名或 IP 地址。例如,Web 服务器、数据库等服务可能需要在克隆后重新配置。

删除虚拟机总结

删除虚拟机的过程,主要包括这几步,首先列出所有虚拟机,再关闭虚拟机,然后删除虚拟机定义(注意顺便删除快照),以及删除对应的磁盘和逻辑卷,并取消挂载和删除挂载目录,最后使用lsblk或者df -h检查是否删除成功。以下是上面步骤的命令:

#列出所有虚拟机
sudo virsh list --all
#关闭虚拟机
sudo virsh shutdown ubuntu20.04-2-clone
# 删除虚拟机包括快照
sudo virsh undefine ubuntu20.04-2-clone --snapshots-metadata
#如果磁盘文件未挂载为逻辑卷而是普通文件
sudo rm -f /var/lib/libvirt/images/myvm.qcow2
#如果虚拟机的磁盘是通过 LVM 逻辑卷管理的
sudo umount /dev/vg01/ubuntu20.04-2-clone
#删除逻辑卷,当有双破折号时,可以使用引号或转义字符来删除
sudo lvs
sudo lvremove /dev/vg01/
#正确做法
sudo lvremove "/dev/vg01/ubuntu20-clone.04-2"
sudo lvremove /dev/vg01/ubuntu20\-\-clone.04\-\-2
#删除挂载点
sudo rmdir /mnt/myvm_mount
# 确认和检查
lsblk
sudo lvs
sudo lsblk
#注意使用lsblk中,不要把-全部包括进去,有一个是之分隔符

复制与删除vm总结
  • 使用 virt-manager 图形界面或 virt-clone 命令行工具克隆虚拟机。
  • 克隆完成后,启动新虚拟机并检查配置,以确保没有网络或主机名冲突。
  • 复制时候要修改主机名与ip的映射
  • 修改新的主机的ip以及用户名,要登录对应主机去实操,修改用户名的话,需要添加root用户
  • 删除的时候注意顺带删除逻辑卷,而逻辑卷名字注意不要被盘分隔符“-”干扰
  • 复制时候,会在原lvm盘对应存储池默认创建新的,可以自己指定名称,这时候不要挂载,因为存储池已经挂载过了
  • 查找可用ip可以使用ping逐个测试,也可以使用安装nmap,扫描整个IP段,找出被占用的ip,然后设置未被占用的ip来进行后续操作

3.3、管理虚拟机命令总结

命令用途示例
virsh list --all列出所有虚拟机sudo virsh list --all
virsh start <vm_name>启动指定虚拟机sudo virsh start ubuntu-vm
virsh shutdown <vm_name>关闭指定虚拟机sudo virsh shutdown ubuntu-vm
virsh destroy <vm_name>强制关闭虚拟机(相当于电源断开)sudo virsh destroy ubuntu-vm
virsh reboot <vm_name>重启虚拟机sudo virsh reboot ubuntu-vm
virsh suspend <vm_name>挂起虚拟机sudo virsh suspend ubuntu-vm
virsh resume <vm_name>恢复挂起的虚拟机sudo virsh resume ubuntu-vm
virsh undefine <vm_name>删除虚拟机定义(不会删除磁盘)sudo virsh undefine ubuntu-vm
virsh define <xml_file>通过 XML 文件定义虚拟机sudo virsh define /path/to/vm.xml
virsh edit <vm_name>编辑虚拟机的 XML 配置文件sudo virsh edit ubuntu-vm
virsh console <vm_name>连接到虚拟机的控制台sudo virsh console ubuntu-vm
virsh dominfo <vm_name>显示虚拟机的详细信息sudo virsh dominfo ubuntu-vm
virsh domiflist <vm_name>列出虚拟机的网络接口sudo virsh domiflist ubuntu-vm
virsh domblklist <vm_name>列出虚拟机的磁盘设备sudo virsh domblklist ubuntu-vm
virsh snapshot-list <vm_name>列出虚拟机的快照sudo virsh snapshot-list ubuntu-vm
virsh snapshot-create-as <vm_name> <snapshot_name>创建快照sudo virsh snapshot-create-as ubuntu-vm snapshot1
virsh snapshot-revert <vm_name> <snapshot_name>恢复快照sudo virsh snapshot-revert ubuntu-vm snapshot1
virt-clone --original <vm_name> --name <new_vm_name> --file <new_disk_image>克隆虚拟机sudo virt-clone --original ubuntu-vm --name ubuntu-vm2 --file /mnt/vm2/ubuntu-vm2.qcow2
virsh attach-disk <vm_name> <disk_path> <target_dev>向虚拟机添加磁盘sudo virsh attach-disk ubuntu-vm /path/to/disk.qcow2 vdb
virsh detach-disk <vm_name> <target_dev>从虚拟机移除磁盘sudo virsh detach-disk ubuntu-vm vdb
virsh attach-interface <vm_name> --type bridge --source <bridge_name>向虚拟机添加网络接口sudo virsh attach-interface ubuntu-vm --type bridge --source br0
virsh detach-interface <vm_name> --type bridge --mac <mac_address>从虚拟机移除网络接口sudo virsh detach-interface ubuntu-vm --type bridge --mac 52:54:00:6b:29:55

说明

  • **virsh list --all**:列出所有虚拟机,包括正在运行和已关闭的虚拟机。
  • **virsh start**** 和 ****virsh shutdown**:用于启动和正常关闭虚拟机。
  • **virsh destroy**:强制关闭虚拟机,相当于直接断电。
  • **virsh reboot**:重启虚拟机。
  • **virsh suspend**** 和 ****virsh resume**:用于挂起和恢复虚拟机。
  • **virsh undefine**:删除虚拟机定义,但不删除虚拟机的磁盘映像。
  • **virsh define**** 和 ****virsh edit**:用于定义和编辑虚拟机的 XML 配置文件。
  • **virsh console**:连接到虚拟机的控制台,可以进行命令行操作。
  • **virsh dominfo**:显示虚拟机的详细信息,如状态、CPU 和内存使用情况。
  • **virsh domiflist**** 和 ****virsh domblklist**:列出虚拟机的网络接口和磁盘设备。
  • **virsh snapshot**** 系列命令**:用于创建、列出和恢复虚拟机的快照。
  • **virt-clone**:用于克隆虚拟机,生成新的虚拟机实例。
  • **virsh attach-disk**** 和 ****virsh detach-disk**:用于向虚拟机添加或移除磁盘。
  • **virsh attach-interface**** 和 ****virsh detach-interface**:用于向虚拟机添加或移除网络接口。

4 遇到的问题和解决方案

4.1、没必要纠结用virsh命令安装虚拟机

虽然可以,但没必要,主要是virt-manager非常好用,同时现在VNC不好下载,快点把集群搭出来,然后思考怎么搞创新,怎么把毕设的文章写出来,顺便谢谢小论文

4.2、在调整虚拟机磁盘这里卡顿了一下

其实完全可以跳过这一步,找了几个方法,都不对,后面还是精确提问解决的,要给出自己的条件,以及准确描述自己遇到的问题,然后相关问题才能解决,就像代码调试里面的打断点,道理是一样的。

5 总结与下一步计划

高效管理虚拟机,在自己最开始看来,就是掌握一些工具,能够掌握最基础的curd逻辑,在关于创建的逻辑前面有,目前自己需要的是能够高效的修改虚拟机的配置,能够更好的适应后续多种实验需求。然后这里面很多修改,都是连环修改,改一个,后面同步修改的地方有很多。

下一步主要是,先看一些视频,了解小规模微集群搭建方法,当一个微集群成功,则可以应用到更大范围的集群当中,而目前自己对创建虚拟机也算是登堂入室,可以进一步了解虚拟机内部的一些指令,以便更好创建集群。

  1. 在进行clone时,virt-manager里面直接默认就好
  2. 要在脑子里回顾,结合之前的一些实验,总结理解里面一些操作,理清楚里面一些概念和操作的逻辑与步骤
  3. 遇到问题,可以先跳过,问问gpt再开展实验,同时要马上记录相关问题
  4. 找一下这里面的创新点与难点
  5. 下一步学习计划:Linux命令与shell编程以及看别人微集群搭建经验
  6. 针对概念,进行强化,然后不懂的单词要问google,知道怎么读

关于经验的话,以后遇到不能通信要往这些方向去想,去思考。

6 参考链接与书籍

  1. Unix/Linux系统管理技术手册
  2. chatgpt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值