首页/云/云平台与虚拟化速查/libvirt 存储池与卷
虚拟化基础63 条

libvirt 存储池与卷

libvirt 存储池把目录、LVM 卷组、NFS、iSCSI 等后端抽象为统一资源池:池内创建卷(volume)再分配给虚机,便于集中管理与容量盘点。

云平台与虚拟化速查云更新于 2026-10-13

libvirt 存储池是什么

libvirt 存储池把目录、LVM 卷组、NFS、iSCSI 等不同后端抽象成统一的资源池:池内创建卷,再把卷分配给虚机。好处是容量盘点与生命周期管理集中化——虚机迁移或重建时,磁盘来源清清楚楚。

基本信息

支持类型dir、fs、netfs、logical、iscsi、disk 等
模型pool → volume → 挂到 domain
常用命令pool-list、pool-define-as、pool-build、vol-create-as
默认位置/var/lib/libvirt/images
自动启动需要 pool-autostart 才能在宿主重启后自动激活
权限定义与启动池通常需要 root

典型使用场景

  • 把虚机磁盘集中放到独立数据盘目录上
  • 用 logical 池把磁盘建在 LVM 上以获得块设备性能
  • 用 netfs 池挂载 NFS 共享给多台宿主
  • 批量创建同规格的虚机磁盘
  • 盘点各池的剩余容量与卷数量

定义并启用一个目录池

定义并启用一个目录池
sudo virsh pool-define-as diskpool dir --target /data/vmpool   # 定义目录池
sudo virsh pool-build diskpool                                  # 创建目录结构
sudo virsh pool-start diskpool                                  # 激活池
sudo virsh pool-autostart diskpool                              # 宿主重启后自动激活
virsh pool-list --all                                           # 查看池状态
sudo virsh vol-create-as diskpool vm1.qcow2 40G --format qcow2   # 在池内建卷
virsh vol-list diskpool                                         # 列出卷与其路径

池类型与适用

类型后端适用场景
dir本地目录开发与单机环境
logicalLVM 卷组需要块设备性能的宿主
netfsNFS 等网络文件系统共享存储场景
iscsiiSCSI 目标集中式块存储
fs已挂载的文件系统复用现有挂载点
池内创建的卷由 libvirt 记录:绕过 virsh 直接往池目录塞文件不会出现在 vol-list 里。排障时遇到“账实不符”,先想到这一点。定期用 vol-list 与文件系统实际占用对账,能提前发现手工留下的孤儿文件。
池没有设置 autostart 时,宿主重启后池处于未激活状态,依赖它的虚机会因为找不到磁盘启动失败,而报错通常只说文件不存在,容易查错方向。

易错点

  • 池未设置 autostart:宿主重启后虚机因找不到卷启动失败
  • 绕过 virsh 直接往池目录塞文件,vol-list 与实际文件对不上账
  • 池的目录权限或 SELinux 上下文不对,虚机启动被拒绝访问磁盘
  • 在多个宿主上定义同名池但指向不同后端,迁移时磁盘对不上
  • 删除池时不检查依赖的虚机,卷被清理后虚机再也起不来
  • 池容量靠人工估算,没有剩余空间监控,写满时虚机直接 I/O 报错
  • 用 logical 池时未预留 extents 余量,快照与扩容一并执行时空间不足
  • 把池定义与卷命名规则交给个人习惯,团队接手时找不到对应关系

数据来源与参考

  • libvirt 文档:Storage Management
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌