疑难杂症——解决 Cinder 僵尸卷问题
目录
问题描述
Cinder 的僵尸卷一般是因为操作不当导致分配的卷无法正常使用且无法正常分离或删除.
问题解决
解决僵尸卷问题的思路类似解决 Linux 系统中的僵尸进程, 需要手动的通过修改数据库和执行 CLI 来实现.
- 使用 CLI 定位僵尸卷的基本信息
最主要的是要获取其 id, 然后到数据库中查看其详细信息.
stack@fanguiju-dev:~$ openstack volume list
+--------------------------------------+--------------+--------+------+-----------------------------------------------------------+
| ID | Display Name | Status | Size | Attached to |
+--------------------------------------+--------------+--------+------+-----------------------------------------------------------+
| 0d71a98a-0d2c-4b73-9886-a98005d9f969 | mysql-vol | in-use | 5 | Attached to e1fd229f-413e-49dd-a741-1bbffa7f249c on /mnt |
+--------------------------------------+--------------+--------+------+-----------------------------------------------------------+
可以看出这次的问题的原因是因为使用 openstackclient 挂载卷到 Instance 的时候指定了错误设配(/mnt), 应该指定挂载设备为(/dev/vdX). 而且使用 CLI 的 –force 也无法强制删除:
stack@fanguiju-dev:~$ openstack volume delete 0d71a98a-0d2c-4b73-9886-a98005d9f969 --force
Invalid volume: Volume must not be migrating, attached, belong to a consistency group or have snapshots. (HTTP 400) (Request-ID: req-8ec31dac-591a-4895-942d-3e4998c5407d)
- 手动的修改 cinder 数据库的表 volumes 的 status 字段为 deleted
在挂载完卷之后该记录的字段 status 的值为 in-use.
*************************** 2. row ***************************
created_at: 2017-01-18 14:59:38
updated_at: 2017-01-18 16:12:09
deleted_at: NULL
deleted: 0
id: 0d71a98a-0d2c-4b73-9886-a98005d9f969
ec2_id: NULL
user_id: b03df4585b7d41cca635ec341217404d
project_id: d0f2734c0cd3421eaab8e7d3da5b61d1
host: fanguiju-dev@lvmdriver-1#lvmdriver-1
size: 5
availability_zone: nova
status: in-use
attach_status: attached
scheduled_at: 2017-01-18 14:59:39
launched_at: 2017-01-18 14:59:40
terminated_at: NULL
display_name: mysql-vol
display_description: backup volume of mysql server.
provider_location: 200.21.18.30:3260,2 iqn.2010-10.org.openstack:volume-0d71a98a-0d2c-4b73-9886-a98005d9f969 1
provider_auth: CHAP xvATFN4UYj3ueGXZBW5P aTsMksaXX6KSsw8n
snapshot_id: NULL
volume_type_id: 2fac34b8-f25c-490c-b0bb-6989d4778432
source_volid: NULL
bootable: 0
provider_geometry: NULL
_name_id: NULL
encryption_key_id: NULL
migration_status: NULL
replication_status: disabled
replication_extended_status: NULL
replication_driver_data: NULL
consistencygroup_id: NULL
provider_id: NULL
multiattach: 0
previous_status: NULL
手动修改其 status 字段值:
mysql> update volumes set status='deleted' where id='0d71a98a-0d2c-4b73-9886-a98005d9f969';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
- 执行指令删除卷
同样的, 在删除之前先要查看现在逻辑卷的使用情况.
stack@fanguiju-dev:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
cinder-volumes-default 1 0 0 wz--n- 50.00g 50.00g
cinder-volumes-lvmdriver-1 1 1 0 wz--n- 50.00g 45.00g
ubuntu-dev-fanguiju-vg 1 2 0 wz--n- 99.76g 20.00m
stack@fanguiju-dev:~$ sudo lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
volume-0d71a98a-0d2c-4b73-9886-a98005d9f969 cinder-volumes-lvmdriver-1 -wi-a---- 5.00g
root ubuntu-dev-fanguiju-vg -wi-ao--- 95.74g
swap_1 ubuntu-dev-fanguiju-vg -wi-ao--- 4.00g
通过 volume 的 id(0d71a98a-0d2c-4b73-9886-a98005d9f969) 我们不能判断出现问题的 lv 就是 /dev/cinder-volumes-lvmdriver-1/volume-0d71a98a-0d2c-4b73-9886-a98005d9f969.
但是在删除该 lv 之前, 我们需要保证该 lv 没有被任何的进程占用.
stack@fanguiju-dev:~$ lsof /dev/cinder-volumes-lvmdriver-1/volume-0d71a98a-0d2c-4b73-9886-a98005d9f969
使用 lsof 指令可以获取使用该设备的进程列表, 如果被占用的话, 需要使用 kill 指令来将这些进程杀掉. 之后再将该 lv remove 掉.
stack@fanguiju-dev:~$ sudo lvremove /dev/cinder-volumes-lvmdriver-1/volume-0d71a98a-0d2c-4b73-9886-a98005d9f969
Do you really want to remove and DISCARD active logical volume volume-0d71a98a-0d2c-4b73-9886-a98005d9f969? [y/n]: y
Logical volume "volume-0d71a98a-0d2c-4b73-9886-a98005d9f969" successfully removed
因为该僵尸卷在数据库中记录的状态已经修改为了 deleted, 所以 dashboard 不会读取该记录, 而且又使用了 lvremove 来将该逻辑卷删除了, 所以也算彻底的解决了这个问题.
最后
最后记录一下, 如果使用 cinderclient 包提供的 cinderclient.v2.volumes:VolumeManager.attach 来挂载卷的话, 其参数 mountpoint 的含义是指定该卷挂载到 Instance 的那一个设备文件上, 而不是指定挂载目录路径.
疑难杂症——解决 Cinder 僵尸卷问题的更多相关文章
- openstack 后期维护(四)--- 删除僵尸卷
前言: 在长时间使用openstack之后,删除虚机后,经常会有因这样那样的问题,导致卷处于僵尸状态,无法删除! 状态一: 虚机已近删除,然而卷却挂在到了 None上无法删除 解决办法: 1.# ci ...
- openstack删除僵尸卷
问题描述: 最近在清理openstack环境,在删除cinder云硬盘时,一直发现有两个卷在删除中. 解决方法如下: 首先我们去cinder的数据库中找到这个卷,命令为: MariaDB [(none ...
- [疑难杂症]解决实际开发中各种问题bug
我有一个习惯就是遇到问题找到解决方案后收藏网页.后来遇到问题越来越多,收藏就多得有点离谱了.我反思了一下,其实有用的信息就那么点,那我干脆还是做成网页剪报好了. 关于VS的 Problem:未能正确加 ...
- cinder 挂载卷和 iSCSI原理
LVM名称介绍 PV:物理磁盘 VG:卷组,多个PV可以组成一个VG,一个VG可以划分成多个LV(逻辑卷). PP:物理区块,将一个VG逻辑的划分成连续的小块. LP:逻辑区块,若干个PP组成一个LP ...
- Tomcat疑难杂症解决记录
1. startup.bat闪退 cmd中运行startup.bat报错: The JRE_HOME environment variable is not defined correctly Thi ...
- cinder挂载卷的过程原理
LVM名称介绍 PV:物理磁盘 VG:卷组,多个PV可以组成一个VG,一个VG可以划分成多个LV(逻辑卷). PP:物理区块,将一个VG逻辑的划分成连续的小块. LP:逻辑区块,若干个PP组成一个LP ...
- Hadoop _ 疑难杂症 解决1 - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat
最近博主在进行Hive测试 压缩解压缩的时候 遇到了这个问题, 该问题也常出现在日常 hdfs 指令中, 在启动服务 与 hdfs dfs 执行指令的时候 : 都会显示该提示,下面描述下该问题应该如何 ...
- APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)
本文转自下面博主 https://blog.csdn.net/junzixing/article/details/79310159 APM/Pixhawk常用链接汇总(持续更新) https://bl ...
- 转载 linux 僵尸进程,讲的很透彻
僵尸进程的产生和避免,以及wait,waitpid的使用 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitp ...
随机推荐
- 实验报告2&&第四周课程总结
实验报告: 写一个名为Rectangle的类表示矩形.其属性包括宽width.高height和颜色color,width和height都是double型的,而color则是String类型的.要求该类 ...
- win10创建扩展分区
1.开始菜单中选择命令提示符,以管理员身份运行. 2.运行“diskpart”命令. 3.DISKPART>后面输入list disk命令,显示磁盘列表. 4.选择磁盘,select disk ...
- Oracle创建表 创建库 数据恢复
--建用户CREATE USER szs IDENTIFIED BY szs DEFAULT TABLESPACE NN_DATA01 TEMPORARY TABLESPACE temp;--用户赋权 ...
- 树莓派Pi账户密码简单重置
由于经常忘记树莓派Pi账户的密码而导致无法正常的玩树莓派,本篇文章综合网上的教程,总结了两种快速重置树莓派Pi账户密码的方法,以下一切操作都需在树莓派本机上进行操作. 方法一: 打开终端,执行 sud ...
- Vue slot-scope的理解(适合初学者)
百度上已经有很多的关于slot-scope的文章,但我感觉都是那些以前没学好,又回头学的人,他们都使用了.Vue文件,我觉得有点不适合初学者,所以我就写一篇适合初学者的. 先抛例程: <!DOC ...
- win32 socket 编程(一)——TCP/IP
一.基本概念 a) 同步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式. nb)异步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式. c) 阻塞:指调用某函数时, ...
- MiniUI学习笔记1-新手必读
1.mini的全局方法 2.Ajax jQuery 拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. 详细jQuery Ajax教程,可参考这里. 3. ...
- IPC之套接字
IPC(Inter-Process Communication,进程间通信)实现方式 1)管道: - 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用(进程的亲缘关系 ...
- UNIX网络编程总结四
socket: 为了执行网络I/O,一个进程做的第一件事就是调用socket函数. family指明协议族,type指明类型,除非在原始套接口,protocol一般为0,并非所有的family,typ ...
- MacOS系統Flutter打包apk
一.打包前需要做一些基本设置的确认 1.应用名 2.权限设置 3.applicationId:应用唯一标识符 4.versionCode:版本号 5.versionName:版本名称 6.APP应用图 ...