glance-0.1.7 分析(五)—— glance/registry/db 和 glance/registry/db/sqlalchemy

Glance镜像服务元数据管理
本文介绍Glance如何使用SQLAlchemy实现镜像元数据的存储管理。具体包括db目录下不同文件的作用,如models.py中定义的镜像及属性数据模型,以及api.py提供的镜像操作方法。

glance 要对镜像的元数据进行存储管理,这需要后台数据引擎的支持。不同的引擎对应不同的

目录。


db 目录下包含了管理元数据所需要的数据引擎,当前只有 sqlalchemy 数据引擎。db/api.py 则

提供了统一的接口,db/sqlalchemy/api.py 也基于 sqlalchemy 数据引擎实现了这种接口。


glance/registry/db/sqlalchemy 主要是通过封装 SQLAlchemy 来对镜像存储提供数据库访问支持。

__init__.py    导入即注册 SQLAlchemy 引擎对数据模型的支持


models.py    基于 SQLAlchemy 定义的 glance 中的数据模型
    class ModelBase(object)        
        基础数据模型,包括一些诸如创建时间的字段,没有有关镜像等的字段信息
    class Image(BASE, ModelBase)
        描述存储的镜像,添加的字段有
            id
            type
            size
            status
            is_public
            location
    class ImageProperty(BASE, ModelBase)
        描述镜像属性
      
api.py
    内部利用 SQLAlchemy 提供对外的镜像操作方法集合


<think>我们已知用户已准备好一个包含Virtio驱动的Windows 11镜像(假设镜像文件名为win11-virtio.qcow2),现在要使用virt-install命令创建KVM虚拟机实例。 步骤分解: 1. 确保环境:KVM、libvirt、virt-install等已安装(如引用[3]所述) 2. 准备镜像:将准备好的镜像放在合适的位置(例如:/var/lib/libvirt/images/win11.qcow2) 3. 使用virt-install命令创建虚拟机,并指定镜像、配置资源等 4. 考虑到Windows 11的安装要求,需要特别注意以下参数: - 启用UEFI启动(Windows 11要求) - 分配足够的RAMCPU - 设置正确的磁盘总线网络驱动为virtio(但镜像已包含驱动,所以可以直接使用virtio) - 可能需要设置TPM(Windows 11要求)Secure Boot 具体命令示例: ```bash virt-install \ --connect qemu:///system \ --virt-type kvm \ --name win11-vm \ --memory 4096 \ --vcpus 4 \ --os-variant win10 # 注意:目前virt-install的os-variant可能没有win11,可用win10代替(或使用win11的兼容模式) --disk path=/var/lib/libvirt/images/win11.qcow2,format=qcow2,bus=virtio \ --disk path=/usr/share/OVMF/OVMF_CODE.fd,format=raw,device=cdrom \ # 使用UEFI固件(需预先安装OVMF包) --network network=default,model=virtio \ --graphics spice,listen=0.0.0.0 \ --video qxl \ --boot uefi \ --tpm backend.type=emulator,backend.version=2.0,model=tpm-tis \ --features smm.state=on,kvm_hidden=on,hyperv_relaxed=on,hyperv_vapic=on,hyperv_spinlocks=on,hyperv_spinlocks_retries=8191 \ --console none ``` 参数说明: - `--name`: 虚拟机名称 - `--memory`: 内存大小(MB) - `--vcpus`: CPU核心数 - `--os-variant`: 指定操作系统变体,可以使用`osinfo-query os`查看支持列表,如果没有win11,选择win10或win8.1 - `--disk`: 指定系统磁盘,使用准备好的镜像,总线类型为virtio(因为镜像已包含驱动) - 第二个`--disk`: 指定UEFI固件文件(通常安装OVMF包后,固件文件位于/usr/share/OVMF/OVMF_CODE.fd),注意:有些系统可能路径不同(如Fedora可能在/usr/share/edk2/ovmf/) - `--network`: 网络使用默认的default网络,模型为virtio(需要驱动,但镜像已包含) - `--graphics`: 图形设置为spice,并监听所有IP(可根据需要调整) - `--video`: 视频设备使用qxl(兼容性好) - `--boot uefi`: 启用UEFI启动(必须) - `--tpm`: 添加TPM 2.0仿真器(Windows 11要求) - `--features`: 启用一些必要的特性,包括隐藏KVM状态(避免Windows检测到虚拟机而影响性能),以及一些Hyper-V特性(提高兼容性) - `--console none`: 不创建控制台 注意:上述命令中,UEFI固件文件的路径可能因发行版而异,请根据实际情况调整。例如,在Ubuntu上,可能需要安装`ovmf`包,然后路径可能是`/usr/share/OVMF/OVMF_CODE.fd`;在CentOS上,安装`edk2-ovmf`包,路径可能是`/usr/share/edk2/ovmf/OVMF_CODE.fd`。 如果执行命令时提示缺少UEFI固件,请先安装相应软件包: - Ubuntu/Debian: `sudo apt install ovmf` - CentOS/RHEL: `sudo yum install edk2-ovmf` 另外,TPM仿真需要swtpm支持,确保已安装: - Ubuntu/Debian: `sudo apt install swtpm` - CentOS/RHEL: `sudo yum install swtpm swtpm-tools` 创建后,虚拟机将启动并进入Windows 11系统。 如果启动过程中遇到问题,可以查看日志: `virsh start win11-vm --console` 或通过virt-manager图形界面查看。 引用说明: - 安装依赖包(如引用[3]) - virt-install命令的基本结构(如引用[2]) - 虚拟机配置参数(如引用[4]) 注意:由于Windows 11对硬件要求较高,如果安装镜像时没有预先配置好驱动,可能需要额外步骤。但用户已说明镜像已包含驱动,所以直接使用virtio总线即可。 如果镜像没有预先安装驱动,则需要在安装过程中加载驱动,但本场景已跳过此步骤。 相关问题: 1. 如何为KVM虚拟机启用UEFI安全启动? 2. 在KVM中如何配置虚拟TPM设备? 3. 如何优化KVM下的Windows 11虚拟机性能? 4. 如何解决Windows 11在KVM中启动时的兼容性问题? 5. 如何为Windows虚拟机安装Virtio驱动?</think>### 使用 virt-install 创建带驱动的 KVM Windows 11 虚拟机 #### 前提条件 1. 已安装 KVM 环境(参考引用[3]): ```bash sudo yum install -y qemu-kvm libvirt virt-install bridge-utils ``` 2. 已准备 Windows 11 镜像(含 Virtio 驱动)如 `win11-virtio.qcow2` 3. 已下载 Virtio 驱动 ISO([最新版下载](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso)) #### 完整创建命令 ```bash virt-install \ --connect qemu:///system \ --name win11-vm \ --memory 4096 \ --vcpus 4 \ --os-variant win11 \ # 指定 Windows 11 优化配置 --disk path=/var/lib/libvirt/images/win11-virtio.qcow2,format=qcow2,bus=virtio \ # 使用含驱动的镜像 --disk path=/path/to/virtio-win.iso,device=cdrom,bus=sata \ # 附加驱动光盘[^2] --network network=default,model=virtio \ # Virtio 网卡 --graphics spice,listen=0.0.0.0 \ # 启用远程访问 --video qxl \ # 优化图形显示 --boot uefi \ # Windows 11 必需 --features smm=on \ # 安全启动支持 --console none \ --install no_install=on # 直接启动现有镜像 ``` #### 关键参数说明 1. **磁盘配置**: ```bash --disk path=/path/win11.qcow2,format=qcow2,bus=virtio ``` - `bus=virtio`:使用 Virtio 磁盘控制器(需驱动支持) - `format=qcow2`:推荐格式,支持快照动态扩容 2. **UEFI 启动**(Windows 11 强制要求): ```bash --boot uefi \ --features smm=on ``` 需确保已安装 OVMF 固件包: ```bash # CentOS/RHEL sudo yum install edk2-ovmf ``` 3. **驱动加载验证**: 启动后进入设备管理器检查: - 存储控制器 → **Red Hat VirtIO SCSI controller** - 网络适配器 → **Red Hat VirtIO Ethernet Adapter** #### 操作流程 ```mermaid graph TD A[准备含Virtio驱动的镜像] --> B[配置UEFI启动环境] B --> C[执行virt-install命令] C --> D[启动虚拟机] D --> E[验证驱动状态] ``` #### 常见问题解决 1. **启动失败**: ```bash # 检查启动日志 virsh console win11-vm # 重置启动顺序 virsh dumpxml win11-vm | grep 'boot order' ``` 2. **驱动未生效**: - 手动加载驱动: ```powershell pnputil /add-driver D:\viostor\w11\amd64\*.inf ``` - 更新磁盘控制器总线类型(XML 配置): ```xml <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <target dev='vda' bus='virtio'/> <!-- 确保是virtio --> </disk> ```[^4] 3. **性能优化**: ```bash --cpu host-passthrough \ --memorybacking hugepages=on ``` > **重要提示**:Windows 11 要求 TPM 2.0,可通过添加虚拟 TPM 实现: > ```bash > --tpm backend.type=emulator,backend.version=2.0 > ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值