一、为什么会 “扫出来但删不掉”(最常见 4 点)
文件被占用(90% 场景)
虚拟机已删除,但光驱还挂着 ISO、或磁盘句柄没释放
有僵死进程、备份 / 快照进程还在读写该文件
权限不足 / 文件属主异常
前台用普通 admin,实际文件是 root / 其他用户创建
存储目录权限被改,导致 www-data/cas 用户删不了
清理策略把它 “误放行”
存储 → 清理策略:零段文件 / 快照残留没勾选
排除规则里把这些后缀(.qcow2/.raw/.iso)加进去了
存储池 / 文件系统异常
存储池降级、坏块、只读
共享存储(如 ONEStor)LUN 未释放、 Thin 回收没做
二、先看日志,定位具体报错(必做)
1)前台看
云资源 → 存储管理 → 清理任务 → 找到最近一次 “一键清理”→ 查看日志
重点关键词:Permission denied、Device or resource busy、Read-only、No space
2)后台 CLI 看(更准)
bash
运行
# 登录CVM或CVK
cas-log -t storage_clean | tail -200
# 或直接看存储相关日志
tail -f /var/log/cas/storage_clean.log
三、分步排查(从简单到深入)
1. 检查清理策略
云资源 → 存储 → 清理策略
勾选:零段文件、无效快照、残留磁盘
排除规则:不要加 .qcow2/.raw/.iso/.img 这些
2. 确认没有虚拟机在占用
(1)检查所有虚拟机光驱 / 磁盘
bash
运行
# 列出所有虚机及其磁盘
virsh list --all
virsh domblklist 虚拟机名称
看是否还挂着要清理的存储上的 ISO、磁盘文件
有就卸载光驱、分离磁盘,再删
(2)检查是否有僵死 / 迁移残留
bash
运行
# 查看是否有blockjob(快照合并/迁移)
virsh qemu-monitor-command 虚拟机名 '{"execute":"query-block-jobs"}'
有任务就等它结束,或按官方文档安全取消
3. 检查文件是否被进程锁定(非常关键)
登录对应 CVK 主机(文件所在节点):
bash
运行
# 替换为你的存储池路径,如 /vms/defaultpool
lsof +d /vms/defaultpool
# 或查整个目录
fuser -m /vms/defaultpool
看到 PID 就干掉:
bash
运行
kill -9 PID
再重新一键清理
4. 权限与属主检查
bash
运行
# 看目录权限
ls -ld /vms/defaultpool
# 看文件属主
ls -l /vms/defaultpool/*.qcow2
正常:root:root、cas:cas
异常:改成正确权限
bash
运行
chown root:root /vms/defaultpool/*
chmod 755 /vms/defaultpool
5. 存储池状态
bash
运行
cas-storage-pool list
状态必须是 正常 / 健康
不要是 降级、只读、故障
四、一键清理仍失败:手动强制清理(安全版)
务必确认:没有任何虚拟机 / 进程在用这些文件
1)先在 virsh 里删除卷(推荐)
bash
运行
# 查看存储池里所有卷
virsh vol-list --pool defaultpool
# 删除指定卷
virsh vol-delete --pool defaultpool 文件名.qcow2
2)再到文件系统删(最终手段)
bash
运行
rm -f /vms/defaultpool/文件名.qcow2
3)共享存储(ONEStor/FC)额外一步
在存储侧做空间回收 / Thin Provisioning Unmap,否则存储阵列上空间不释放
五、你可以直接把这 3 个信息发我,我帮你精准定位
CAS 版本(如 7.0/7.1)
一键清理日志里的完整报错行
存储类型:本地 / 共享(ONEStor/FC/iSCSI)
暂无评论
.qcow2 或 .vhd)。您可以登录 CAS-CVM(管理节点)进行手动核查与删除:virsh list --all # 确认虚拟机状态
virsh vol-list --pool <存储池名> # 检查磁盘文件是否残留
virsh vol-delete --pool <存储池名> <磁盘文件名>
show lun # 查看LUN列表
delete lun <LUN_ID> # 删除残留LUNdisk_reclaim.sh 脚本来强制回收存储未释放的空间:/opt/cloud/ 目录下。若不存在,请联系 H3C 技术支持获取对应版本的脚本。cd /opt/cloud/
./disk_reclaim.sh -p <存储池名称> # 指定存储池进行回收-f 为强制模式,请谨慎使用)virsh pool-info <存储池名>
df -h /dev/mapper/<存储池路径> 暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论