news 2026/10/31 22:23:15

OpenStack 存储管理实操:卷类型 QoS、卷全生命周期与 NFS 第二后端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenStack 存储管理实操:卷类型 QoS、卷全生命周期与 NFS 第二后端

卷建好只是开始——挂载、扩容、打快照、传成镜像、拿去发实例,每一步都有前置条件;删卷删不掉更是三条依赖链叠出来的经典现场。这篇按卷的一生走完 Dashboard 与 CLI 两套操作:卷类型与 QoS → 创建挂载 → 快照/镜像/扩容 → 基于卷发实例 → 更新状态 → 删除依赖链,最后把NFS 作为第二后端接进 cinder-volume。全部命令在192.168.108.10环境(admin 项目、shared网络、镜像Img_web/Img_cli)验证过,可直接照抄。

本文概要:

项目内容
文章主题卷类型/QoS 管理 + 卷从创建到删除的全生命周期操作 + NFS 第二后端接入
所属类别云计算 → 私有云平台 → OpenStack 存储管理
知识关键字volume type·QoS·server add volume·volume snapshot·--bootable·volume set --state·enabled_backends·nfs_shares

主线的因果只有一条:卷的每个状态(available / in-use / error)决定了它能做什么、不能做什么——挂载要在 available、扩容快照要在 available、删除要先把快照和挂载清干净。操作顺序错一步,报错就找上门。

一、卷类型与 QoS:先定规格再建卷

卷类型(volume type)是卷的「规格标签」,QoS(Quality of Service,服务质量)挂到卷类型上,建卷时选了类型就同时吃到这组策略。

1.1 Dashboard 路径

以 admin 登录,走「管理员 → 卷 → 卷类型」:

步操作关键点
1点「创建卷类型」,名称VolumeType_web勾选「公有」让所有项目可用
2点「创建 QoS 规格」,名称QoS_web「消费者」选「后端」(back-end)
3卷类型行操作里选「管理 QoS 规格关联」把QoS_web关联到VolumeType_web
4回到列表确认 QoS 规格已挂上之后按此类型建的卷都生效

1.2 CLI 六条命令

[root@controller ~(keystone_admin)]# source keystonerc_admin # 中文:导入 admin 环境变量[root@controller ~(keystone_admin)]# openstack volume type create --public VolumeType_cli# 中文:创建公有卷类型 VolumeType_cli[root@controller ~(keystone_admin)]# openstack volume type list # 查看卷类型列表[root@controller ~(keystone_admin)]# openstack volume qos create --consume back-end QoS_cli# 中文:创建 QoS 规格 QoS_cli,消费者为后端[root@controller ~(keystone_admin)]# openstack volume qos list # 查看 QoS 列表[root@controller ~(keystone_admin)]# openstack volume qos associate QoS_cli VolumeType_cli# 中文:把 QoS_cli 关联到卷类型 VolumeType_cli[root@controller ~(keystone_admin)]# openstack volume qos show QoS_cli # 查看该 QoS 关联的卷类型

二、创建卷与挂载/卸载

2.1 创建卷

一条命令带齐五个要素——来源、类型、大小、可用分区、是否启动卷:

[root@controller ~(keystone_admin)]# openstack volume create --image Img_cli --type VolumeType_cli \>--size1--availability-zone nova--bootableVolume_cli_01# 中文:从镜像 Img_cli 创建 1GB 启动卷,类型 VolumeType_cli,AZ 为 nova[root@controller ~(keystone_admin)]# openstack volume list # 中文:查看卷列表,状态 available 即可用

Dashboard 对应「项目 → 卷 → 卷 → 创建卷」:卷来源选「镜像」、类型选VolumeType_web、大小 1 GB、可用分区nova,创建后状态「可用」。

2.2 挂载与卸载

# 前置:先有一台实例[root@controller ~(keystone_admin)]# openstack server create --availability-zone nova --image Img_cli \>--flavorFlavor_cli--networkshared --key-name KeyPair_cli Instance_cli_01[root@controller ~(keystone_admin)]# openstack server add volume Instance_cli_01 Volume_cli_01# 中文:把卷 Volume_cli_01 挂载给实例 Instance_cli_01,卷状态变 in-use[root@controller ~(keystone_admin)]# openstack server remove volume Instance_cli_01 Volume_cli_01# 中文:卸载——把卷从实例上摘下来,卷状态回到 available

⚠️注意:挂载后卷状态in-use,此时扩容、删除都不行;先卸载回available再操作。挂载在实例里看是/dev/vdb这类块设备,分区格式化后才真正能用。

三、卷的三个衍生操作:传镜像、打快照、扩容

3.1 上传卷到镜像

[root@controller ~(keystone_admin)]# openstack image create --volume Volume_cli_01 --disk-format qcow2 Volume_Img_cli# 中文:把卷 Volume_cli_01 转成 qcow2 格式的镜像 Volume_Img_cli

Dashboard 里是卷行操作的「上传镜像」,磁盘格式选 QCOW2;完成后在「项目 → 计算 → 镜像」能看到新镜像(可见性为「共享的」)。这一步常用来把配好环境的系统盘固化成模板。

3.2 创建卷快照

[root@controller ~(keystone_admin)]# openstack volume snapshot create --volume Volume_cli_01 Volume_Snap_cli# 中文:为卷 Volume_cli_01 创建快照 Volume_Snap_cli[root@controller ~(keystone_admin)]# openstack volume snapshot list # 查看快照列表

基于快照可以再拉出新卷,新卷内容就定格在打快照那一刻:

[root@controller ~(keystone_admin)]# openstack volume create --snapshot Volume_Snap_cli Volume_cli_02# 中文:基于快照 Volume_Snap_cli 创建新卷 Volume_cli_02

3.3 卷扩容

[root@controller ~(keystone_admin)]# openstack volume set --size 2 Volume_cli_01# 中文:把卷扩容到 2GB——只允许变大,不允许缩小[root@controller ~(keystone_admin)]# openstack volume show Volume_cli_01 # 核对 size 字段

⚠️注意:扩容只放大了块设备,实例内的分区和文件系统还要自己扩;且卷挂载着(in-use)时扩容行为受后端限制,稳妥做法是卸载后再扩。

四、基于卷发放实例:bootable 是道闸门

[root@controller ~(keystone_admin)]# openstack server create --volume Volume_cli_02 --flavor Flavor_cli \>--networkshared Instance_cli_02# 中文:直接以卷 Volume_cli_02 为源发放实例(不再需要镜像)# 把卷改成非启动卷再试:[root@controller ~(keystone_admin)]# openstack volume set --non-bootable Volume_cli_02[root@controller ~(keystone_admin)]# openstack server create --volume Volume_cli_02 --flavor Flavor_cli Instance_cli_03# 中文:发放失败——非启动卷不能作为实例的源

结论:卷的bootable标志为否(非启动卷)时,无法基于该卷发放虚拟机实例。Dashboard 里对应卷行「编辑卷 → 可启动」的勾选框。不是所有 available 的卷都能发实例,先看这个标志。

五、更新卷状态:管理员的后门

卷卡在异常状态时,admin 可以手工改状态(管理员 → 卷 → 卷 → 更新卷状态):

[root@controller ~(keystone_admin)]# openstack volume set --state error Volume_cli_01# 中文:把卷状态强行改成 error——用于排障演练,正常环境别乱用

六、删不掉的卷:三条依赖链

删除卷(openstack volume delete/ Dashboard 删除卷)报错时,按顺序排查:

#报错原因解法
1卷有快照先删快照:openstack volume snapshot delete Volume_Snap_cli,再删卷
2卷in-use先卸载:openstack server remove volume <实例> <卷>,回 available 再删
3卷是系统卷(实例正以它为根)系统卷无法卸载——只能先删实例:openstack server delete Instance_cli_02

三条全占的卷,就按 1 → 2 → 3 一层层拆。实验里Volume_cli_02(挂给Instance_cli_02的系统卷)就是典型:删卷被拒 → 卸载被拒(系统卷)→ 删实例 → 再删卷才成功。

七、NFS 第二后端:cinder-volume 一拖二

实验新增一台 NFS 节点(IP192.168.108.12),三步接入。

7.1 NFS 节点:把目录共享出去

mkdir/nfs_share# 中文:创建共享目录chmod-R777/nfs_share# 中文:放开权限(实验环境图省事)yum-yinstallnfs-utils# 中文:安装 NFS 工具包echo"/nfs_share *(rw,sync,no_root_squash)">/etc/exports# 中文:把共享规则写入 exports——所有客户端可读写同步、不映射 rootsystemctl stop firewalld.service# 中文:关防火墙(实验环境)systemctl restart nfs-server&&systemctlenablenfs-server# 中文:重启并开机自启

controller / compute 节点先建挂载点并验证能挂:mkdir /mnt/nfs_share。

7.2 controller 节点:cinder.conf 加 [nfs] 段

[DEFAULT] enabled_backends = lvm,nfs # 中文:cinder-volume 同时启用两个后端 [nfs] volume_backend_name = nfs # 后端名,卷类型靠它认门 nfs_shares_config = /etc/cinder/nfs_shares # 共享清单文件 nfs_mount_point_base = /mnt/nfs_share # 本机挂载点基目录

共享清单/etc/cinder/nfs_shares每行一条 NFS 导出:

[root@controller ~]# vim /etc/cinder/nfs_shares192.168.108.12:/nfs_share# 想再加共享目录就继续往下写行[root@controller ~]# mkdir -p /mnt/nfs_share[root@controller ~]# chown -R cinder:cinder /mnt/nfs_share # 中文:目录归属 cinder 用户[root@controller ~]# systemctl restart openstack-cinder-volume# 中文:重启 cinder-volume 让新后端生效

7.3 建卷类型绑定后端,再建卷验证

关键一步:按volume_backend_name创建对应卷类型(nfs),否则卷不知道往哪个后端放。建卷时类型选 nfs 的落 NFS 节点,选 iscsi(lvm)的落本地卷组——调度逻辑见姊妹篇第 4.2 节的 Filter/Weigher。最后用 NFS 卷发一台实例,到 NFS 节点上能看到卷数据文件,整条链路才算打通。

附:命令英文全称速查表

命令英文全称含义
volume typevolume type卷类型
qosQuality of Service服务质量(限速策略)
--consumeconsumeQoS 消费端(front-end / back-end)
associateassociate关联
--imageimage以指定镜像为卷来源
--bootable/--non-bootablebootable可启动 / 不可启动
server add volumeserver add volume给实例挂卷
server remove volumeserver remove volume从实例卸卷
snapshotsnapshot快照
--sizesize卷大小(GiB,只增不减)
--statestate强制设置卷状态
--disk-format qcow2disk format磁盘格式(QEMU copy-on-write v2)
nfsNetwork File System网络文件系统
exportsexportsNFS 共享规则配置文件
no_root_squash不压缩 root客户端 root 保持 root 权限
chownchange owner修改文件属主
enabled_backendsenabled backends启用的后端列表
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 22:11:09

stop-slop 完整指南:给 AI 写作做质量自检

stop-slop 完整指南&#xff1a;给 AI 写作做质量自检 【免费下载链接】stop-slop A skill file for removing AI tells from prose 项目地址: https://gitcode.com/GitHub_Trending/st/stop-slop stop-slop 是一款免费的写作技能文件&#xff0c;专门用来清除文章里的 …

作者头像 李华
网站建设 2026/10/31 22:01:55

智能金融系统架构设计:AI驱动的高性能与合规实践

1. 智能金融系统的AI架构革命&#xff1a;从传统到前沿的跃迁金融行业正经历着前所未有的数字化转型浪潮&#xff0c;而AI技术的深度应用正在重塑整个金融系统的架构设计范式。作为一名长期深耕金融科技领域的架构师&#xff0c;我亲眼见证了传统金融系统从集中式单体架构向分布…

作者头像 李华
网站建设 2026/10/31 22:01:00

牛几判定:五选三组合枚举与O(1)查表优化

“牛几”这三个字&#xff0c;第一次看到的人多半会愣一下&#xff0c;以为是某种方言或者暗语&#xff0c;其实它就是纸牌游戏里最常被问的那句话——“这手牌是牛几&#xff1f;”背后对应的是一个相当经典的组合判定问题&#xff1a;五张牌&#xff0c;从中挑三张&#xff0…

作者头像 李华
网站建设 2026/10/31 21:57:19

Shell 基础精讲:从命令行到自动化脚本的核心语法与避坑指南

我刚上手命令行那会儿&#xff0c;第一次在终端里敲下ls&#xff0c;屏幕刷出一屏文件名&#xff0c;第一反应是"这玩意儿有什么意义&#xff0c;图形界面点两下不就完事了"。真正让我改变看法的是一个批量改名的活儿&#xff1a;几百个文件要按统一规则重命名&#…

作者头像 李华
网站建设 2026/10/31 21:52:34

微信小程序商城毕业设计全链路实战:从数据库到前端联调

简介&#xff1a;这份资源面向计算机相关专业学生与初学者&#xff0c;提供一套可直接用于毕业设计或课程设计的微信小程序商城完整方案&#xff0c;解决从选题到落地缺少可运行项目与配套文档的问题。压缩包共68个文件&#xff0c;约3.31MB&#xff0c;以png、jpg等界面截图与…

作者头像 李华
网站建设 2026/10/31 21:52:26

多微网电能共享优化:非对称纳什谈判策略解析

1. 项目概述&#xff1a;多微网电能共享优化策略这个项目标题涉及两个核心概念&#xff1a;非对称纳什谈判和微网电能共享。我们先拆解一下基本概念&#xff1a;微网&#xff08;Microgrid&#xff09;是指由分布式电源、储能装置、能量转换装置、负荷监控和保护装置等组成的小…

作者头像 李华