You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询EBS卷从EC2实例卸载的具体日期时间

查找EBS卷卸载时间并删除超过一周的未挂载卷

1. 获取未挂载EBS卷的卸载时间

EBS卷的卸载时间记录在卷的挂载历史中,你可以通过AWS工具查询Attachments字段里的DetachTime值,这就是卷从EC2实例卸载的具体日期和时间。

使用AWS CLI查询

执行以下命令筛选所有状态为available(未挂载)的卷,并输出关键信息:

aws ec2 describe-volumes --filters "Name=status,Values=available" --query 'Volumes[*].[VolumeId, Attachments[0].DetachTime, Size, AvailabilityZone]' --output table

提示:如果卷从未被挂载过,Attachments字段会是空数组,这类卷没有卸载时间,你可以根据CreateTime字段判断创建时长,或者按需排除。

2. 筛选并删除卸载超过一周的卷

手动筛选效率低下,推荐用脚本自动处理,以下是两种实用方案:

方案一:AWS CLI + jq(Linux/macOS)

先计算一周前的UTC时间,再对比卷的卸载时间筛选目标卷:

# 生成一周前的UTC时间(ISO格式)
ONE_WEEK_AGO=$(date -u -d "7 days ago" +"%Y-%m-%dT%H:%M:%SZ")

# 查询符合条件的卷ID
aws ec2 describe-volumes --filters "Name=status,Values=available" --query "Volumes[?Attachments[0].DetachTime < '$ONE_WEEK_AGO'].VolumeId" --output text

# 确认无误后执行删除(将上面的查询结果替换<VOLUME_ID>)
# aws ec2 delete-volume --volume-id <VOLUME_ID>

方案二:Python脚本(跨平台)

使用boto3 SDK实现更灵活的逻辑控制:

import boto3
from datetime import datetime, timedelta

# 初始化EC2客户端
ec2 = boto3.client('ec2')

# 获取所有未挂载状态的卷
response = ec2.describe_volumes(Filters=[{'Name': 'status', 'Values': ['available']}])

# 计算一周前的时间(移除时区信息,与DetachTime格式匹配)
one_week_ago = datetime.now().replace(tzinfo=None) - timedelta(days=7)

for volume in response['Volumes']:
    # 跳过从未挂载过的卷(可根据需求删除此判断)
    if not volume['Attachments']:
        continue
    
    detach_time = volume['Attachments'][0]['DetachTime'].replace(tzinfo=None)
    if detach_time < one_week_ago:
        print(f"待删除卷ID:{volume['VolumeId']},卸载时间:{detach_time}")
        # 取消注释下方代码执行删除操作
        # ec2.delete_volume(VolumeId=volume['VolumeId'])

注意事项

  • 确保你的AWS凭证拥有ec2:DescribeVolumes和ec2:DeleteVolume权限
  • 执行删除操作前务必反复核对筛选结果,避免误删仍需使用的卷
  • 针对从未挂载过的卷,可替换逻辑为判断CreateTime是否超过一周

内容的提问来源于stack exchange,提问作者Rohit Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:05:28