「VMware Workstation」- 常见问题处理

NTFS-3G, Vmware Workstation, CPU 100%
NTFS-3G, Vmware and 100% CPU – Primal Cortex’s Weblog 新版VMware禁用虚拟内存文件的方法_MSUS的博客-CSDN博客_vmware禁用虚拟内存 Solved: Is mainMem.useNamedFile available in Linux Worksta… Primal Cortex’s Weblog/NTFS-3G, Vmware and 100% CPU workstation 7 (linux) and mainMem.useNamedFile = “…
问题描述
Host OS: Debian 11,Host File System: NTFS-3G,VMware Workstation 16.2
当启动虚拟机时,虚拟机近乎挂起,响应极满,mount.ntfs 进程的 CPU 100%
原因分析
经过搜索查找,我们得知:

使用 VMWare 虚拟机,虚拟机启动后,会在虚拟机目录下建立一个与虚拟内存大小相同的 .vmem文件。这个文件主要是将虚拟机内存的内容映射到磁盘,以支持在虚拟机的暂停等功能。VMware Workstation每次开机都会在磁盘上创建一个和内存大小一样的文件,实际上根本没必要,特别是我开的虚拟机内存很大,这个内存文件旧严重占用了磁盘空间

解决方案
mainmem.backing = “swap” => 针对我们的环境,我们使用该配置,并且禁用 Host Swap 分区;
this only works on 64 bit Linux hosts and it produces a similar behaviour as on Windows hosts with mainmem.useNamedFile = “false”
setting this parameter may result in improved performance for single VMs – but it may have the drawback that you can longer run as many VMs at the same time as without it !
mainmem.backing = “named”
this uses a mainmem-file in the same directory as the vmx-file
this is the equivalent to mainmem.useNamedFile = “true” used[……]

READ MORE

「Oracle VirtualBox」

参考文献
Homepage: https://www.virtualbox.org/ Online User Manual: https://www.virtualbox.org/manual/UserManual.html End-user documentation: https://www.virtualbox.org/wiki/End-user_documentation Technical documentation: https://www.virtualbox.org/wiki/Technical_documentation Timeline: https://www.virtualbox.org/timeline?daysback=10 Changelog: https://www.virtualbox.org/wiki/Changelog /opt/VirtualBox/UserManual.pdf:安装目录下的PDF文档[……]

READ MORE

「VirualBox」- 安装(Linux,Windows,macOS)

on Ubuntu 20.04 LTS
Linux_Downloads – Oracle VM VirtualBox

# 安装全家桶
apt-get install -y $(
apt-cache search virtualbox | grep -E ‘^virtualbox’ | grep -v — ‘-hwe’ | awk ‘{printf(“%s “, $1)}’
)

通过官方源安装
# 02/19/2022 与官方相比,通过仓库安装的 VirtualBox 缺少如干组件,比如自动启动虚拟机的管理服务;

echo ‘deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian focal contrib’ \
> /etc/apt/source.list.d/virtualbox-offical.list

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | apt-key add –
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | apt-key add –
apt-get update

apt-get install virtualbox-6.1

on macOS 10.15.6
1)下载:官方下载安装包 2)运行:双击 VirtualBox.pkg 图标,进行程序的安装 3)启动:在 Applications 中,启动应用程序
安装的可执行程序
VBoxBugReport/vboxbugreport:Bug 反馈工具; VBoxDTrace/vboxdtrace:软连接到 VBox.sh vbox-img:磁盘工具,用于格式转化、修复等功能; vboxsdl/VBoxSDL:VBoxSDL 是一个简单的图形用户界面(GUI),缺少良好的交互支持。VBoxSDL 目前主要用于内部调试 VirtualBox,因此没有正式支持; vboxconfig:软连接,指向 /opt/VirtualBox/postinst-common.sh。用于安装公共部分; VBoxHeadless/vboxheadless:vboxheadless 在主机上根本不产生可见的输出,但仍然可以提供 VRDP 数据。vboxheadless 也不依赖于 Linux 和 Solaris 主机上的 X Window 系统; vboxwebsrv:它提供 web 服务; VBoxAutostart:用于自动启动或者自动保存虚拟机。但是[……]

READ MORE

「VirtualBox」- 常见问题处理

虚拟机嵌套(在虚拟机中运行虚拟机)
virtualization – Virtualbox enable nested vtx/amd-v greyed out – Stack Overflow How To Enable Nested Virtualization In VirtualBox – OSTechNix
开启嵌套特性:

# 如果 System => Processer => Enable Nested VT-x/AMD-V 灰色,则执行:
VBoxManage modifyvm “Virtual Machine Name” –nested-hw-virt on

验证开启成功:

# Linux
egrep –color -i “svm|vmx” /proc/cpuinfo

# Windows
# 通过 Sysinternals 的 Coreinfo 命令,显示 SVM 与 VMX 标识;

已知问题
Q:VirtualBox on Linux, Guest Windows 10, 通过虚拟机嵌套,在 Windows 10 中启动 VirtualBox 导致 Windows 10 卡住不动; A:(1)配置 System / Acceleration Paravirtualization Interface: None 即可;(2)我们同时在 Guest Windows 10 中执行 bcdedit /set hypervisorlaunchtype off 命令,但并不能确定与此相关;
界面配置(GUI Configuration)
qt – How do I set default font for all Qt5 applications? – Unix & Linux Stack Exchange
目前(VirtualBox 7)并未提供 GUI 的更多精细化配置,诸如 字体配置 等等;
但是,某些 GUI 框架支持通过环境变量控制应用配置。而 VirutalBox 基于 Qt 开发,我们或许可以针对 Qt 环境进行配置;
针对 Qt5 应用,可以使用 Qt5ct 进行全局应用配置。目前(11/21/2022),我们只想调整 GUI 字体;[……]

READ MORE

「VirtualBox」- Guest OS

从命令行中,管理虚拟机
How to run VirtualBox virtual machines from the command line

# VBoxManage startvm “Ubuntu Server” –type headless

自动补全(Bash):gryf/vboxmanage-bash-completion: VBoxManage bash completion
远程管理虚拟机
关键技术:RemoteBox、vboxwebsrv
RemoteBox : News | RemoteBox – ArchWiki | RemoteBox : Downloads How to set up a VirtualBox remote GUI for easy VM management | TechRepublic
前端界面
#13308 (GUI Always Start Headless) – Oracle VM VirtualBox 7.1.2. VBoxHeadless, the Remote Desktop Server 8.12. VBoxManage startvm
启动虚拟机的三种方式: 1)gui(显示用于访问虚拟机的窗口),Starts a VM showing a GUI window. This is the default. 2)headless(后台运行),Starts a VM without a window for remote display only. 3)separate(gui + headless,两者是独立进程),Starts a VM with a detachable UI. Technically, it is a headless VM with user interface in a separate process. This is an experimental feature as it lacks certain functionality, such as 3D acceleration.

# 设置虚拟机默认无界面启动,后台运行
VBoxManage modifyvm “vmname” –defaultfrontend headless

# 设置全局默认无界面启动
VBoxManage setproperty defaultfrontend headless

# 针对我们的应用场景,我们的使用方式:
# 1)我们更倾向于默认全局 headless 启动(我们并不依赖 3D 加速);
# 2)然后,为虚拟机配置 Remote Desktop 显示,并通过 Remmia 来连接;[……]

READ MORE

「VirtualBox」- 挂载物理磁盘,并从物理磁盘启动

问题描述
操作系统已安装到物理磁盘(或者 USB 设备),我们希望虚拟机能够直接挂载该磁盘,并从该磁盘中启动。
该笔记将记录:在 VirtualBox 中,如何在虚拟机中添加物理磁盘,并从中启动,及相关问题的处理方法。
在 Linux 中

# 创建硬盘的虚拟硬盘文件
# -filename:指定 硬盘 要映射到的 虚拟机硬盘文件名;
# -rawdisk:指定要启动的硬盘,我们这里是 /dev/sda 设备;
vboxmanage internalcommands createrawvmdk \
-filename /vbox/filename.vmdk \
-rawdisk /dev/sda

# 将当前用户加入 disk Group,以授予 VirtualBox 访问该磁盘的权限;
# 否则,虚拟机将无权限访问物理磁盘文件;
ll /dev/sda # 注意不同 Linux 发行版,磁盘属于不同组;
usermod -a -G disk $(whoami) # 在 Ubuntu 20 中,属于 disk 组;

# 配置虚拟机启动时加载的 vmdk 文件;
# 如果是 EFI 引导,需要 System / Motherboard 配置,勾选 Extened Features / Enable EFI 选项;
# 其他细节,这里不再赘述

在 Windows 中
Windows ,与 Linux 类似,只是命令行参数稍有不同,命令如下:

VBoxManage internalcommands createrawvmdk -filename F:\usb.vmdk -rawdisk \\.\PhysicalDrive2

# -rawdisk:该参数的指定的是磁盘标识符。

注意,需要以管理员身份运行 CMD 程序,即该命令需要以管理员身份运行。
如何填写 -rawdisk 的参数
通过命令行确定:

# diskpart

DISKPART> list disk

Disk ### Status Size Free Dyn Gpt
——– ————- ——- ——- — —
Disk 0 Online 476 GB 1024 KB *
Disk 1 Online 476 GB 2048 KB *
Disk 2 Online[……]

READ MORE

「VirtualBox」- 虚拟机访问主机共享的目录

问题描述
在 VirtualBox 中,能够将主机目录共享给虚拟机,以在虚拟机中访问主机目录;
该笔记将记录:在 VirtualBox 中,如何实现在虚拟机中访问主机目录;
解决方案
创建共享目录(Host)
创建共享目录的功能位于: 1)菜单栏 ⇒ Devices ⇒ Shared Folders ⇒ Shared Folders Settings; 2)支持设置临时目录(Transient Folder)和主机目录(Machine Folders);
也能够使用 vboxmanager(1) 命令来创建共享目录:

VBoxManage sharedfolder add “VM name” –name <sharename> –hostpath <path>

# 其中:
# <path> 为主机中的目录,用于在虚拟机系统中访问的目录;
# <sharename> 为目录的共享名,虚拟机中挂载时需要使用;

挂载共享目录(Guest)
在 Windows 中: 如果虚拟机为 Windows 操作系统,那么使用 VirutalBox 的目录分享功能后,Windows 会自动挂载该共享目录;
在 Linux 中: 如果虚拟机为 Linux 操作系统为,则需要手动进行挂载。在虚拟机中,执行如下命令以挂载:

# <sharename>:在共享目录创建时填写的 Folder Name 参数()
# —- 或使用使用 vboxmanage(1) 命令 –name 选项指定的 <sharename> 参数
# <path> 为虚拟机里的一个目录
mount -t vboxsf -o uid=1000,gid=1000 <sharename> <path>

# 如果开机自动挂载,修改 /etc/fstab 文件,追加:
<sharename> <mount-path> vboxsf defaults 0 1

参考文献
Access to shared folders in Virtual Box How to mount a VirtualBox shared folder at startup? Chapter 4. Guest Additions/4.3. Shared Folders[……]

READ MORE

「VirtualBox」- Guest Additions

组件安装
两种方法安装方法:
1)为 VirtualBox 添加 Oracle_VM_VirtualBox_Extension_Pack-5.2.44.vbox-extpack —- 然后,对虚拟机实例 Insert Guest Additionals CD Images… 操作; —- 最后,在 Guest 中挂在 CD 并安装其中的 ./VBoxLinuxAdditions.run 程序;
2)或下载 VBoxGuestAdditions.iso 到虚拟机中,并挂载; —- 然后,在 Guest 中安装其中的 ./VBoxLinuxAdditions.run 程序;
这两种方法都需要 Guest 已经安装:

apt-get install -y gcc make perl

# apt-get install -i linux-headers-5.4.0-84
apt install linux-headers-$(uname -r)

组件卸载
Uninstall VirtualBox Guest Additions on Ubuntu and Windows 7

# Linux
sh /path/to/VBoxLinuxAdditions.run uninstall

常见问题处理
fatal error: linux/smp_lock.h: No such file or directory
在 VirtualBox 5.2.44 且 Guest 为 Ubuntu 20.04.3 中,安装 Gust Additions 扩展遇到该错误。
内核为 5.11.0-27 版本,我们通过降级到 5.4.0-84 解决该问题。
花屏、应用程序显示异常、无法正常渲染
问题描述: 在 Ubuntu 20.04 TLS 中,VirtualBox 6.1.32,桌面部分应用程序出现花屏(渲染异常的问题;我们解决该问题后才记录笔记,所以没有截图)。
原因分析: 我们猜测与开启 3D 加速有关。
解决方案: # 02/23/2022 在关闭 Display / Screen / Acceleration / Enable 3D Acceleration 功能后,目前桌面能够正常显示 ⇒ 我们不会播放视频,对 3D 加速没有特别严重的需求。
参考文献
Chapter 2. Installation Details/2.3.2. The Oracle VM VirtualBox Kernel Modules Chapter 4. Guest Additions https://download.virtualbox.[……]

READ MORE

「VirtualBox」- 网络

问题描述
该笔记将记录:在 VirtualBox 中,配置虚拟机网络的方法,以及相关问题的解决方案。
解决方案
参考 VirtualBox/Manual/Chapter 6. Virtual Networking 文档,以获取更多内容。
提供虚拟网卡以及如何运行虚拟网卡。
首次创建虚拟机时,VirtualBox默认启用一个虚拟网卡,并使用NAT模式。通过这种方式,虚拟机可以使用主机的网络连接来访问外部网络,外部网络可以连接设为对外可见的虚拟机上。这个默认设置对于大多数用户来说是很好用的,然而,VirtualBox在如何虚拟化网络方面非常灵活,它支持为每个虚拟机配置多个虚拟网卡,VirtualBox GUI支持设置四张网卡,多余的要使用VBoxManage命令进行配置。
VBoxManage 配置网卡[……]

READ MORE

「VirtualBox」- 存储配置

缩小 VDI 文件
针对缩小 VDI 文件,不同场景的处理方式是不同的;
场景:仅缩小 VDI 占用的磁盘空间,而不减小分配的空间大小
How to Shrink a VirtualBox Virtual Machine and Free Up Disk Space How to compact / shrink a Dynamically Allocated virtual box vmdk file …
在我们的场景中,VDI 虚拟磁盘采用动态分配(Dynamic allocated)。某个日志文件过大,导致 VDI 文件增长过大;
我们删除该日志文件后,希望 能够减小 VDI 文件占用的磁盘空间,但是并不会配置减小分配空间(在创建虚拟磁盘时指定的参数);
1)我们通过离线挂载磁盘,针对 Ext4 文件系统,通过 resize2fs 来缩小文件系统占用的空间; 2)针对 Ext4 文件系统,通过 zerofree -v /dev/sda1 来用 0 填充未使用空间; 3)最后,关机,并通过 VBoxManage modifymedium disk “/path/to/disk.vdi” –compact 来缩小空间;
场景:缩小文件系统(未成功)
1)如果需要缩小磁盘文件,首先需要处理磁盘文件中的文件系统大小。我们通过离线挂载磁盘,针对 Ext4 文件系统,通过 resize2fs 来缩小; 2)然后 cfdisk 来重建分区表,以实际缩小文件系统所占用的磁盘空间;
我们这里希望缩小 VDI 文件的已配大小,但是未能找到响应的方法。但我们的根本目标还是限制磁盘空间的占用。
但是,通过分区的重建,从侧面实现对文件系统可用空间的限制。在这种情况下,虽然虚拟机磁盘分配较大空间,但是由于磁盘分区的限制而无法完全使用,结合 Dynamic allocated 来达到节约磁盘空间的目的。[……]

READ MORE

「VirtualBox」- 常见错误汇总

Cannot register the hard disk … UUID … already exists
Copying VMDK to VDI in VirtualBox How to Fix VirtualBox UUID already exists Errors
问题描述:当添加磁盘时,提示无法注册磁盘,因为 UUID 已存在:

Cannot register the hard disk ‘E:\VirtualBox VMs\Windows 8 \Windows 8 Enterprise
2.vhd’ {ca2bdc6a-a487-4e57-9fcd-509d0c31d86d} because a hard disk ‘E:\VirtualBox
VMs\Windows 8 Enterprise\Windows 8 Enterprise2.vhd’ with UUID {ca2bdc6a-a487-4e5
7-9fcd-509d0c31d86d} already exists.

原因分析:使用 cp 命令直接复制,导致虚拟磁盘文件的 UUID 相同
解决方案:

# 正确的复制方法
vboxmanage” clonehd original.vmdk new.vdi –format VDI

# 修改 UUID(不一定适用)
vboxmanage internalcommands sethduuid “C:\_VMs\SC9u1\sc9u1.vdi”

#1
Unable to insert the virtual optical disk /opt/VirtualBox/additions/VBoxGuestAdditions.iso into the machine Centos_6.8_x86-64_Local.
在创建虚拟机时,操作系统没有64位选项
Why does virtualbox only have 32-bit option, no 64-bit option on Windows 7?
原因分析:问题原因由很多,在我们的场景里是没有开启虚拟化技术,需要在BIOS中开启 Intel Virtualization Technology 选项。
在启动虚拟机后,立刻显示退出,显示 Aborted 状态
virtualbox.org • View topic – VirtualBox 6.1.10 on macOS Catalina 10.15.5 aborting
问题描述:在启动虚拟机后,立刻显示退出,显示 Aborted 状态
环境信息:macOS 10.15.6, VirtualBox 6.1[……]

READ MORE

「 Virtualization」- 虚拟机磁盘文件

虚拟机镜像下载
The 4 Best Sites to Download Virtual Disk Images for VirtualBox OSBoxes – Virtual Machines for VirtualBox & VMware
我们希望直接下载虚拟机镜像,进而免去系统安装的麻烦。
Linux VM Image
Linux VM Images – Download VirtualBox and VMware Images
OS Boxes
https://www.osboxes.org/ubuntu-server/
All images for VirtualBox and VMware have the same username and password. After logging into virtual machine that you’ve downloaded from here you can change ‘username’ & ‘password’ or create you new user. Username – osboxes Password – osboxes.org For Root user account Password – osboxes.org
VirtualBoxes
Images | VirtualBoxes – Free VirtualBox® Images
Virtual Disk Images
http://virtualdiskimages.weebly.com/virtualbox.html
Sysprobes
Download Pre Installed VirtualBox Images (Linux, Windows & Others) – Sysprobs[……]

READ MORE

「QCOW」- QEMU Copy On Write

[……]

READ MORE

「KVM」- 扩容 qcow2 镜像、磁盘扩容、零重启

问题描述
我们的虚拟机是从虚拟机模板创建的,磁盘默认仅有 10G 空间,无法容纳更多数据,因此需要进行扩容。
注意事项,错误的磁盘分区调整将导致数据的丢失,如果无足够经验,请先进行数据备份,防止数据丢失。
该笔记将记录:在 KVM 中,扩容 .qcow2 操作系统镜像文件的方法,以及常见问题的处理方法。
解决方案
第一阶段、磁盘扩容
通过 virsh 扩容(**推荐**):

# virsh qemu-monitor-command –domain tmpl-ubuntu-1804 –hmp “info block”
drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/tmpl-ubuntu-1804.qcow2 ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
drive-ide0-0-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]

# virsh qemu-monitor-command –domain tmpl-ubuntu-1804 –hmp “block_resize drive-virtio-disk0 20G”

注意事项,请勿缩小磁盘,如果需要缩小磁盘,请先缩小内部文件系统。(这里不再展开讨论)
第二阶段、调整文件系统
接下来,需要进入虚拟机,进行操作系统磁盘空间扩容。该阶段的场景比较多(有人使用 LVM,有人使用 Ext4,有人使用 XFS),我们无法枚举,这里仅记录我们的场景。
我们使用 LVM 进行磁盘管理,上层是 XFS 文件系统,所以扩容操作过程如下:

pvresize “/dev/vda2” # 扩大 PV 空间

vgs # 能够看到 VG 空间已经扩大

lvextend -l +100%FREE /dev/centos/root # 将空间全部分配
lvdisplay # 查看扩容后的大小,能够看到 LV 已扩大

xfs_growfs /dev/centos/root # 该虚拟机为 XFS 文件系统,需要 xfs_growfs 命令

方法二、通过 qemu-img resize 扩容
我们**不推荐**这种做法(在操作系统中,磁盘空间未改变,需要额外处理)
第一步、停止虚拟机实例
第二步、查看磁盘信息

# virsh domblklist tmpl-ubuntu-1804
Target So[……]

READ MORE

「KVM」- 挂载 qcow2 镜像

问题描述
该笔记将记录:如何挂载和访问 qcow2 镜像文件,以及相关问题的解决办法。
解决方案
第一步、安装工具

yum install libguestfs-tools libguestfs

第二步、挂载镜像

guestmount -a “/path/to/image.qcow2” -i –ro “/mnt”

其他方法
nbd
How to mount a qcow2 disk image · GitHub
第一步、加载内核模块:

# Step 1 – Enable NBD on the Host
modprobe nbd max_part=8

第二步、挂载 qcow2 文件:

# Step 2 – Connect the QCOW2 as network block device
qemu-nbd –connect=/dev/nbd0 /var/lib/vz/images/100/vm-100-disk-1.qcow2

# Step 3 – Find The Virtual Machine Partitions
fdisk /dev/nbd0 -l

# Step 4 – Mount the partition from the VM
mount /dev/nbd0p1 /mnt/

第三步、卸载 qcow2 文件:

# Step 5 – After you done, unmount and disconnect
umount /mnt/somepoint/
qemu-nbd –disconnect /dev/nbd0
rmmod nbd

参考文献
How to mount qcow2 image[……]

READ MORE

「VMDK」- Virtual Machine Disk

问题描述
该笔记将记录:与 VMDK 文件有关的内容,包括 VMDK 文件操作与管理;
解决方案
VMDK – Virtual Machine Disk,最开始由 VMware 为其虚拟机产品开发,现在 VMDK 5.0 已经开放格式;
虚拟磁盘配置选项
thin
在 vShpere Client 中,名为“精简置备”(Thin Provision);
在初始化配置时:(不进行块分配与置零动作) 在第一次访问时:进行块分配动作;进行置零动作;
zeroedthick
在 vShpere Client 中,名为“厚置备延迟置零”(Thick Provision Lazy Zeroed);
在初始化配置时:进行块分配动作; 在第一次访问时:进行置零动作;
eagerzeroedthick
在 vShpere Client 中,名为厚置备置零(Thick Provision Eager Zeroed);
在初始化配置时:进行块分配动作;进行置零动作; 在第一次访问时:(无需再次进行块分配与置零动作)
参考文献
Wikipedia/VMDK vsphere5 中置备空间是什么意思,还有已用空间,有什么区别?[……]

READ MORE

「Linux」- 扩容 VMDK 虚拟磁盘(重启或动态)

问题描述
在虚拟机中,随着虚拟磁盘的使用,磁盘空间很可能不足,因此需要对虚拟磁盘文件进行扩容。
虚拟机操作系统为 CentOS 7. 4 版本,使用 LVM 进行磁盘管理。
附加说明
建议”操作系统“应与”应用数据“进行分离 建议将系统系统与应用数据分离,保存在不同的虚拟磁盘中,而不是放在一起。即操作系统保存在虚拟磁盘中,而应用数据则添加到独立虚拟磁盘或者挂载到外部存储中。这样做可以带来以下好处: 1)在数据迁移时,可以直接将应用数据的虚拟磁盘直接复制,或者直接挂载到新的虚拟机中。 2)在灾难恢复时,如果操作系统损坏,无法启动,可以直接将应用数据的虚拟磁盘挂载到新的虚拟机中。 3)使二者互不影响。即使数据盘IO无法访问,也能够登录系统进行维护。即使操作系统无法访问,我们依旧能够提取数据。
合理规划操作系统磁盘空间 通常在安装时,应该合理规划系统盘空间。随着业务增长,应用数据磁盘扩容不可避免,但是操作系统磁盘可以避免频繁扩容。
第一步、虚拟磁盘扩容
目的:在虚拟机平台中,对虚拟磁盘文件进行扩容。
在 vSphere Client 中,对虚拟磁盘进行扩容,在图形界面直接操作即可,这里不再赘述。
如果使用其他虚拟化平台(KVM),则使用平台相关方法进行扩容即可,这里不再赘述。
第二步、检测磁盘变化
目的:使 Linux 虚拟机检测到磁盘大小的变化
需要登录 Linux 虚拟机进行操作:

# 先执行 lsblk 命令,查看磁盘空间是否增加(通常是没有增加的)
lsblk

# 如果磁盘空间没有发生变化,则重新扫描磁盘:
for i in /sys/class/scsi_disk/*
do
echo “####### $i”
echo ‘1’ > “$i/device/rescan”
done

# 由于知识有限,我们无法确定与磁盘的对应关系,所以只能全部扫描
# 如果能够确定,可以使用下面的命令,替换 “0:0:0:0” 即可
# echo ‘1’ > “/sys/class/scsi_disk/0:0:0:0/device/rescan”

# 最后,重新查看磁盘空间(lsblk),以确定操作系统检测到磁盘变化。
lsblk

第三步、调整卷组大小
目的:调整卷组大小,将新空间加入卷组中,以在逻辑卷中使用
卷组是物理卷组成的,这里会有两种方案: 1)扩展原有物理卷,但是需要重启,易于后期维护; 2)创建新的物理卷,然后加入 LVM 中,因此无需重启,但是后期维护,需要留意一下。
方案一、扩展原有物理卷
需要使用 fdisk 命令重建分区表,但是重建分区表是个危险的动作。
重建分区表,首先删除旧分区表[……]

READ MORE

「ESXi」- 调整 VMDK 文件(扩容、收缩、转换)

问题描述
在虚拟机的日常维护与管理中,我们可能会遇到以下场景: 收缩:分配过量VMDK空间,日后需要进行空间回收,以防止磁盘浪费; 扩容:虚拟磁盘空间不足,需要进行扩容; 转化:针对虚拟磁盘,在Thin与Thick类型之间转换;
本文将逐渐整理(目前还不够完善)相关问题解决方案、操作方法。
注意事项
VMware vCenter Converter Standalone
在初次使用该工具使用时,发现没有办法调整大小,但是很多“文章”说可以。经过调查发现,磁盘大小调整只适用于Windows虚拟机。如果是Linux虚拟机,则无法调整大小(“因为改变引导之间参数会导致系统无法启动”…………我没有理解这句话)。所以,如果你选择Linux虚拟机,将无法看到「Select volumes to copy」按钮。
因此不同类型虚拟机需要采用不同方法。本文不会整理所有解决方法,只会整理我们遇到的问题及问题的解决思路。
#(收缩)使用VMware vCenter Converter Standalone缩小Windows磁盘
本部分我们将使用VMware vCenter Converter Standalone缩小Windows磁盘。操作并不复杂,但要满足以下要求: 1)需要对虚拟机进行关机; 2)该方法将复制VMDK文件,而不是直接调整原VMDK文件大小; 3)它是在复制VMDK文件的过程中调整大小,因此目标位置需要有足够空间容纳新文件;
下面是张关键截图,含有该操作的关键步骤:

大致操作步骤如下(难度适中,因此简述): 1)连接源主机,选择虚拟机 => 下一步 => 连接目的主机,选择位置 => 在Destination Localtion/Data to Copy/Edit/Data copy type中选2)择Select volumes to copy选项 => 在Destination Size中调整大小
正如「注意事项」部分所述,使用VMware vCenter Converter Standalone工具调整大小只适用于Windows主机。
#(收缩)通用方法
-「SHRINK A VMWARE VIRTUAL MACHINE DISK (VMDK)」
该方法不借助工具,手工操作,直接修改虚拟机配置文件。分为两步:

(1)在操作系统中,缩小操作系统磁盘空间(这在操作系统中即可完成);
(2)登录物理机磁盘,找到虚拟机配置目录,修改*.vmdk文件中的RW xxxxx VMFS “xxx-flat.vmdk”行,以修改大小;
(3)关机进行迁移,开机后你会发现虚拟机磁盘已经被缩小;[……]

READ MORE

「libvmdk」

问题描述
该笔记将记录:介绍 libvmdk 的安装、使用,以及常见问题处理。
libvmdk 是用于访问 VMware Virtual Disk (VMDK) 格式文件的库。
Homepage: https://github.com/libyal/libvmdk
Docs: https://github.com/libyal/libvmdk/wiki
安装

git clone https://github.com/libyal/libvmdk
cd libvmdk

./synclibs.sh

./autogen.sh

./configure && make && make install

安装的命令
vmdkmount
vmdkinfo
常见错误整理
Error #1

如果源码是github上检出的,要先运行源码目录下autogen.sh,然后产生错误:
configure.ac:208: error: required file ‘libcerror/Makefile.in’ not found
configure.ac:209: error: required file ‘libcthreads/Makefile.in’ not found
……
configure.ac:219: error: required file ‘libfdata/Makefile.in’ not found
configure.ac:220: error: required file ‘libfvalue/Makefile.in’ not found
Makefile.am:3: error: required directory ./libcerror does not exist
……
Makefile.am:3: error: required directory ./libfvalue does not exist
libvmdk/Makefile.am: installing ‘./depcomp’
parallel-tests: installing ‘./test-driver’
autoreconf: automake failed with exit status: 1

Solved #1

先运行源码目录下的synclibs.sh
然后运行源码目录下的autogen.sh
然后得到configure

Error #2

vmdkmount[……]

READ MORE

「Linux」- 挂载 VMDK 文件

下面介绍两种方法是类似的,只是使用的工具不同。
方法一,使用 vmdkmount 命令(推荐)
第一步、vmdkmount
安装 libvmdk 工具:

apt-get install libvmdk-utils

使用 vmdkmount 进行挂载:

vmdkmount Win7_64/Win7_64.vmdk /mnt/vmdk/

挂载后,在 /mnt/vmdk 下生成了 vmdk1 文件;
第二步、计算偏移量
使用 mmls 命令,该命令属于 sleuthkit 软件包。
对 vmdk1 文件执行如下操作,查看扇区分布:

mmls vmdk1

会得到类似下面的输出:

# DOS Partition Table
# Offset Sector: 0
# Units are in 512-byte sectors
#
# Slot Start End Length Description
# 000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
# 001: ——- 0000000000 0000002047 0000002048 Unallocated
# 002: 000:000 0000002048 0000206847 0000204800 NTFS / exFAT (0x07)
# 003: 000:001 0000206848 0220198911 0219992064 NTFS / exFAT (0x07)
# 004: ——- 0220198912 0220200959 0000002048 Unallocated

计算偏移量:

echo 512*206848 | bc
# 输出:105906176
# 其实,用 fdisk 查看也是可以的;

第三步、mount

# 执行挂载操作;
mount -o ro,offset=105906176 /mnt/vmdk/vmdk1 /mnt/vmdk1

# 到此挂在成功,移步到/mnt/vmdk1目录下查看内容;

error log
# 日期:02/27/2017 # VirtualBox + Debian8,我挂载时候出现了一个错误:“vmdk write access unavailable, cannot proceed”,其实我也不是很懂,下面命令解[……]

READ MORE

「QEMU and KVM」

QEMU – Quick Emulator
QEMU是一个管理程序(Virtual Machine Monitor),一个管理和分配硬件资源的程序。QEMU通过动态二进制转换来模拟CPU,并提供一系列的硬件模型,使客户操作系统认为自己和硬件直接打交道,其实是同QEMU模拟出来的硬件打交道,QEMU再将这些指令翻译给真正硬件进行操作。通过这种模式,客户操作系统可以和主机上的硬盘、网卡、CPU、CD-ROM、音频设备、USB设备进行交互。但由于所有指令都需要经过QEMU来翻译,因而性能会比较差。
所以说,QEMU是一个模拟器。
http://wiki.qemu.org/Main_Page http://wiki.qemu.org/Contribute http://wiki.qemu.org/Documentation
KVM – Kernel-based Virtual Machine
KVM实际是Linux内核提供的虚拟化架构,可将内核直接充当Hypervisor来使用。KVM需要处理器硬件本身支持虚拟化扩展,如intel VT和AMD AMD-V技术。KVM自2.6.20版本后已合入主干并发行,除此之外,还以模块形式被移植到FreeBSD和illumos中。除了支持x86的处理器,同时也支持S/390、PowerPC、IA-61以及ARM等平台。
KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块(如kvm-intel.ko或kvm-amd.ko)。KVM本身不实现任何模拟,仅仅是暴露了一个/dev/kvm接口,这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配,vCPU寄存器的读写以及vCPU的运行。有了KVM以后,guest os的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术。
QEMU-KVM
从前面的介绍可知,KVM负责CPU虚拟化+内存虚拟化,实现了CPU和内存的虚拟化,但kvm并不能模拟其他设备,还必须有个运行在用户空间的工具才行。KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了QEMU-KVM。
从前面的介绍可知,KVM负责CPU虚拟化+内存虚拟化,实现了CPU和内存的虚拟化,但kvm并不能模拟其他设备,还必须有个运行在用户空间的工具才行。KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了QEMU-KVM。
在QEMU-KVM中:[……]

READ MORE

「KVM」- 安装,更新

CentOS or Debian
Setting Up a KVM VM Host Server
Kylin v4

apt-get install qemu-* -y –allow-unauthenticated
apt-get install libvirt* -y –allow-unauthenticated
apt-get install virt-manager -y –allow-unauthenticated

安装的可执行程序
# dpkg –get-selections | grep libvirt | awk ‘{print $1}’ | xargs dpkg -L | grep -E ‘(/(s)*)bin/’ | xargs dpkg -S
客户端
virsh | management user interface virt-admin | daemon administration interface virt-host-validate | validate host virtualization setup virt-login-shell | tool to execute a shell within a container matching the users name virt-pki-validate | validate libvirt PKI files are configured correctly virt-xml-validate | validate libvirt XML files against a schema
服务端
libvirtd | libvirtd management daemon virt-sanlock-cleanup | remove stale sanlock resource lease files virtlockd | libvirt lock management daemon virtlogd | libvirt log management daemon[……]

READ MORE

「KVM」- 虚拟化环境搭建

问题描述
最然现在 Docker 非常方便,也成为我们运行及部署应用的主要方式,但是某些场景还是需要使用虚拟化方案。
该笔记将记录:在 Linux 中,如何部署及使用 KVM 虚拟化环境,以及部署相关的问题处理。
解决方案
第一步、检查硬件虚拟化
检查是否支持硬件虚拟化:

grep –color -E ‘(vmx|svm)’ /proc/cpuinfo

输出中应该出现 vmx 或 svm 等内容,否则就是不支持硬件虚拟化。
第二步、检查内核模块
检查内核是否加载 KVM 模块,:

# lsmod | grep kvm
kvm_amd 2176416 0
kvm 578558 1 kvm_amd
irqbypass 13503 1 kvm

类似如上输出则表示加载成功。
第三步、安装依赖及服务
安装相关的软件包及依赖:

# Debian 10 / Ubuntu 20.04 LTS
apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils \
libguestfs-tools genisoimage virtinst libosinfo-bin

# CentOS
yum install -y qemu-kvm qemu-img libvirt libvirt-python libvirt-client virt-install bridge-utils

第四步、启动 libvirtd 服务
启动 libvirt 服务并开机启动:

systemctl enable libvirtd.service
systemctl start libvirtd.service

systemctl stop libvirtd.service

它主要用于虚拟机的管理工作,而KVM的作用是提供虚拟化。例如虚拟机的定义、网络管理等等这些都是通过libvirt进行管理的。如果不使用libvirt工具,那你就要直接从命令行里使用qemu有关的命令来管理虚拟机,不好。
第五步、重启操作系统
如果允许重启服务器,我们还是建议重启。因为,我们部署服务之后,并没有重启主机,我们认为没有必要。但是,在使用的过程中遇到一个问题,在重启之后该问题得以解决。
参考文献
KVM – Debian Wiki Install K[……]

READ MORE

「virsh」-

management user interface
domrename
domrename domain new-name 重命名域。该命令将当前域的名字(domain)就该为新的名称(new-name)。
注意:域必须是未活动的,并且不能由快照。
edit
edit domain 修改域的XML配置文件,在下次启动Guest时生效。
该命令等价于如下操作:

virsh dumpxml –inactive –security-info domain > domain.xml
vi domain.xml # (or make changes with your other text editor)
virsh define domain.xml

唯一的不同是,该命令还会校验XML内容。
可以使用$VISUAL或$EDITOR环境变量指定使用的编辑器,默认为vi。
undefine
undefine domain [–managed-save] [–snapshots-metadata] [–nvram] [–keep-nvram] [ {–storage volumes | –remove-all-storage [–delete-snapshots]} –wipe-storage] 取消域定义。如果域正在运行,则会将其转换为临时域,而不会停止它。如果域处于非活动状态,域配置将被删除。
标志–managed-save保证还清除了任何托管保存镜像(请参阅managedsave命令)。 如果没有该标志,尝试取消使用托管保存镜像域定义将失败。
标志–snapshots-metadata可确保在取消定义非活动域时也清除任何快照(请参阅snapshot-list命令)。如果没有该标志,尝试取消定义使用快照元数据的非活动域将失败。如果域处于活动状态,则忽略此标志。
标志–nvram和–keep-nvram相应地指定删除或保留nvram文件(/domain/os/nvram/)。 如果域具有nvram文件并且省略了标志,则undefine将失败。
标志–storage指定要与取消定义域一起删除的卷,该参数volumes是以逗号分隔的卷目标名列表,或存储卷的源路径。可以取消卷定义,因此仅在非活动域上删除。仅在取消定义域之后,才尝试删除卷;如果不能删除所有请求的卷,则错误消息会指示仍然存在的内容。如果在域定义中找不到卷路径,则将其视为已成功删除卷。只能通过这种方式删除存储池中由libvirt管理的卷。(有关与域关联的目标名称列表,请参阅domblklist指令)。示例:–storage vda,/path/to/stora[……]

READ MORE

「libvirt」- 运维管理

参考文献
libvirt/Connection URIs libvirt/Remote support[……]

READ MORE

「KVM」- 虚拟化管理平台

问题描述
该笔记将记录:管理 KVM 虚拟机的的工具及平台、我们的选择,以及常见问题的解决办法;
解决方案
管理 KVM 的工具,参考如下文档,文档已经对工具进行简单对比,分为两类: 1)直接管理 KVM 虚拟机:Management Tools – KVM 2)通过 libvirt 来管理:libvirt: Applications using libvirt
管理工具的概述
oVirt 和 OpenStack 的区别 实验环境下 oVirt 的部署
该部分将概述 我们接触过的、基于 KVM 的 虚拟化管理平台,及各自相关的内容;
VMmanager,分商业和免费的,免费的有限制。如果不打算付费,那这辈子估计都用不到; op5,这个是做监控的; Mist.io,这是一个站点,提供在线服务,不能在本地部署; UVMM, Eucalyptus,官网访问不了…… Archipel,官网访问不了…… Abiquo/AbiCloud,官网上没有找到下载的地方; Ravada,这个要安装数据库,暂时不考虑; Virtlyst,这个也不考虑了; OpenStack,面向多种系统虚拟机,通过抽象虚拟资源和虚拟机来实现一整套数据中心方案; Apache Mesos,像用一台电脑(一个资源池)一样使用整个数据中心;
oVirt, POWERFUL OPEN SOURCE VIRTUALIZATION
提供整套套符合市场规范的 KVM 虚拟化管理软件,尽可能的开发和利用 KVM 的特点;
oVirt 以 web 界面的方式管理 KVM 虚拟化环境,主要由 Engine 和 Node 两部分组成: 1)Engine 是 oVirt 中的管理节点,提供 web 界面与用户交互,使 Node 节点管理可视化; 2)Node 是 oVirt 中的计算节点,底层专注 KVM 虚拟化,并为虚拟机运行提供计算资源;
鉴于需要部署管理节点与工作节点,所以我们没有采用才工具来进行虚拟化管理;
Kimchi
这是我们曾经选择使用的 KVM 管理软件,但是后来因为诸多需求便不再使用该工具;
MASS + Multipass
https://maas.io/ Build a MAAS and LXD environment in 30 minutes with Multipass on Ubuntu
我们选择的方案
在桌面环境中,如果使用 KVM 虚拟化,建议选择桌面管理工具; 在远程管理中,如果需要 KVM 虚拟化,建议使用基于 Web 管理的工具,具体情况还要根据需求来确定;
桌面环境
# 03/08/2019 我们将 KVM 用作桌面虚拟化(及学习环境),所以对于 KVM 的[……]

READ MORE

「KVM」- Kimchi(Web管理工具)

什么是Kimchi?
Kimchi是一个基于HTML5的KVM管理工具。旨在让您尽可能轻松地开始使用KVM并创建虚拟机。
Kimchi作为Wok插件运行。
Kimchi通过libvirt管理Guest虚拟机。可以使用支持HTML5的浏览器访问管理界面。
安装工具
方法一、使用源码安装
不介绍,参考GitHub中的说明:GitHub/kimchi-project/kimchi
方法二、从源中安装

#!/bin/sh

# ClearOS(RHEL 7.5)
yum install -y kimchi.noarch
yum install -y app-kimchi app-kimchi-core kimchi.noarch wok.noarch

启动服务

#!/bin/sh

systemctl start wokd.service
systemctl enable wokd.service

使用方法
如果是从发行版的源中安装的,直接访问https://172.31.253.238:8001登录,使用操作系统帐号进行登录,也可以接入ldap认证。
!!!从发行版的源中安装的Kimchi软件包中,包含了Nginx的配置,因此可以直接使用该配置。
注意事项
重启以下机器吧…………安装结束后,「Virtualization」选项卡怎么也显示不了,使用/usr/bin/wokd –environment=dev进入调试模式,发现连接日志中出现了:

Could not access KVM kernel module: Permission denied

然后去看libvirtd的日志,日志中出现了:

qemuMonitorOpenUnix:385 : failed to connect to monitor socket: No such process

在Google上搜索了一顿,也没找到结果,抱着试一试的心态,重启了一下,好了……好了……好了……
以前部署服务,一般也不会重启机器,今天学了一条「如果条件允许,前提是条件允许,部署服务后,还是重启一下吧,尤其和内核或者硬件有关的服务」。
参考文献
GitHub/kimchi-project/kimchi[……]

READ MORE

「KVM」- 通过 multipass 创建 Ubuntu 实例

问题描述
该笔记将记录:在 Ubuntu 中,如何使用 multipass 快速创建虚拟机实例,以及常见问题处理。
解决方案
multipass 是创建虚拟机的工具,能够快速安装 Ubuntu 虚拟机(暂时不支持其他 Linux 发行版)。
优点: 1)能够使用 Cloud-init 快速完成虚拟机初始化; 2)除了通过 multipass 管理虚拟机,还能使用 libvirt Virtualbox 作为后端来管理虚拟机(但可能存在问题);
缺点: 1)仅能用于安装 Ubunut 系统。但是对我们来说是好消息:我们的测试环境以 Ubuntu 为主,所以该方法适合我们;
快速开始
Multipass orchestrates virtual Ubuntu instances
1)安装 multipass 命令 2)通过 multipass 命令快速创建 Ubuntu 虚拟机实例;且能够通过 Cloud-init 进行初始化;

# snap install –candidate multipass # 安装工具
multipass (candidate) 1.8.0 from Canonical✓ installed

# multipass find # 查看所有镜像
Image Aliases Version Description
18.04 bionic 20220411 Ubuntu 18.04 LTS
20.04 focal,lts 20220411.2 Ubuntu 20.04 LTS
21.10 impish 20220309 Ubuntu 21.10
daily:22.04 devel,jammy 20220413 Ubuntu 22.04 LTS
anbox-cloud-appliance latest Anbox Cloud Appliance
charm-dev[……]

READ MORE

「KVM」- Virt-Manager

问题描述
Virt-Manager 是个 GUI 程序,基于 libvirtd 服务来管理 KVM 虚拟机;
该笔记将记录:在 Linux 中,安装及使用 Virt-Manager 程序,以及常见问题处理;
解决方案
官方站点:Virtual Machine Manager Home 仓库地址:virt-manager/virt-manager: Desktop tool for managing virtual machines via libvirt
安装最新版本(v3.2.0)
Debian GNU/Linux 10 (buster)

# 安装依赖
# gettext >= 0.19.6
# python >= 3.4
# gtk3 >= 3.22
# libvirt-python >= 0.6.0
# pygobject3 >= 3.22
# libosinfo >= 0.2.10
# gtksourceview >= 3

# 安装 Virt Manager 工具
git clone https://github.com/virt-manager/virt-manager.git
cd virt-manager
git checkout v3.2.0 -b v3.2.0

virtinst/build.cfg # prefix = /usr/local

./setup.py install –reocrd install.logs

# virtinst/build.cfg:默认会安装到 /usr 目录下,但它会安装某些模块(这会修改系统的原有模块),所以我们修改安装目录
# –reocrd install.logs:记录安装文件,将来在卸载时使用;

on macOS Big Sur 11.2.3(失败)
参考 GitHub – jeffreywildman/homebrew-virt-manager 仓库
我们遇到 Given no hashes to check 131 links for project ‘pip’: discarding no candidates 问题,简单折腾之后并未解决,所以我们不弄了(毕竟想安装试试,不行就算了);
安装的可执行程序
Manage virtual machines with virt-manager
virt-install,安装新的虚拟机,a command line tool which provides an easy way to provision operating systems into virtual machines.
virt[……]

READ MORE

「virt-clone(1)」-

克隆已经存在的虚拟机镜像
命令语法格式
virt-clone [OPTION]…
命令描述
virt-clone是一个命令行工具,用于克隆现有虚拟机映像,它使用“libvirt”库。它将复制任何现有虚拟机的磁盘映像,并定义具有相同虚拟硬件配置的新GuestVM。并将更新要求唯一性的元素,以避免新老GuestVM之间的冲突。
默认情况下,如果未提供克隆GuestVM的必要信息,virt-clone将显示错误。除了要复制的源GuestVM之外,选项–auto-clone将生成所有需要的输入。
请注意,virt-clone不会更改GuestVM的任何内容,它只复制磁盘,并进行主机端更改。因此,更改密码、更改静态IP地址等内容超出了此工具的范围。有关这些类型的更改,请参阅virt-sysprep。
命令支持的选项及含义
大多数选项都不是必需的。最低要求是–original或–original-xml(用于指定要克隆的GuestVM),–name,通过–file指定的相应存储选项。
必须选项
-o ORIGINAL_GUEST, –original ORIGINAL_GUEST 要克隆的原始GuestVM的名称。必须关闭或暂停此GuestVM,因为现在还无法安全克隆出于活动中的GuestVM。
-n NAME, –name NAME 新GuestVM实例的名称。这在Hypervisor连接中已知的所有GuestVM中必须是唯一的,包括那些当前不活动的GuestVM。
–original-xml ORIGINAL_XML 将Libvirt的GuestVM的xml文件用作原始GuestVM。不需要在libvirt连接上定义GuestVM。该选项取代了“–original”参数。
-f DISKFILE, –file DISKFILE 到文件、磁盘分区、逻辑卷的路径,用作新GuestVM虚拟磁盘的后备存储。如果原始GuestVM具有多个磁盘,则此参数必须重复多次,原始虚拟机中的每个磁盘一次。
非必须选项
–connect URI 连接到非默认Hypervisor。有关详细信息,请参阅virt-install(1)。
–auto-clone 生成新的GuestVM名称,以及新存储的路径。示例或可能生成的输出如下:

Original name : MyVM
Generated clone name : MyVM-clone

Original disk path : /home/user/foobar.img
Generated disk path : /home/user/f[……]

READ MORE