无法下载AWS S3 Glacier对象,如何修改命令实现成功复制?
解决S3 GLACIER存储类文件无法复制的问题
你碰到的这个错误很常见——GLACIER是S3的归档存储类,这类文件默认处于“归档”状态,不能直接下载,必须先恢复(解冻)才能访问,或者你可以选择跳过这些归档文件继续复制其他内容。下面给你两种具体的解决方案:
方案1:跳过GLACIER文件,只复制可直接访问的内容
如果那些归档文件不是你当前需要的,可以直接在命令里添加--ignore-glacier-warnings参数,这样遇到GLACIER对象时会自动跳过,不会报错中断整个复制流程。另外别忘了加--recursive(如果是复制整个目录/桶的话),否则只会复制顶层文件:
aws s3 cp s3://${s3Location} ${localDumpPath} --recursive --ignore-glacier-warnings
方案2:恢复GLACIER文件后再复制
如果你确实需要这些归档文件,就得先把它们恢复到可访问状态,步骤如下:
1. 批量恢复GLACIER对象
先筛选出存储类为GLACIER的文件,然后批量发起恢复请求:
# 替换成你的桶名和前缀(如果有子路径的话) BUCKET_NAME="your-bucket-name" PREFIX="your-prefix-if-needed" aws s3api list-objects --bucket $BUCKET_NAME --prefix $PREFIX --query 'Contents[?StorageClass==`GLACIER`].Key' --output text | while read -r OBJECT_KEY; do # 发起恢复请求,设置7天可访问期,用标准恢复层级(几小时内完成) aws s3api restore-object --bucket $BUCKET_NAME --key "$OBJECT_KEY" --restore-request '{"Days": 7, "GlacierJobParameters": {"Tier": "Standard"}}' done
这里的参数说明:
Days:设置恢复后文件保持可访问的天数(比如7天,到期会自动回到归档状态)Tier:恢复速度选项,Standard是标准速度(性价比最高,3-5小时完成),Expedited是加急(1-5小时,费用更高),Bulk是批量(12-48小时,最便宜)
2. 等待恢复完成
恢复需要时间,你可以用以下命令检查单个文件的恢复状态:
aws s3api head-object --bucket $BUCKET_NAME --key "path/to/glacier-file"
如果返回结果里包含Restore: ongoing-request="false", expiry-date="...",就说明这个文件已经恢复完成,可以下载了。
3. 执行复制命令
等所有需要的文件恢复完成后,用带--recursive的原命令即可复制所有内容:
aws s3 cp s3://${s3Location} ${localDumpPath} --recursive
如果想确保只尝试下载已恢复的GLACIER文件,也可以加上--force-glacier-transfer参数,它会允许下载已恢复的归档对象:
aws s3 cp s3://${s3Location} ${localDumpPath} --recursive --force-glacier-transfer
内容的提问来源于stack exchange,提问作者SnehaB
相关产品推荐
相关产品推荐

