EC2 Windows 对 EBS 根卷和数据卷进行缩容:根卷与数据卷安全缩容
EC2 Windows 对 EBS 根卷和数据卷进行缩容:根卷与数据卷安全缩容
EBS 卷仅支持单向扩容,不允许直接缩容。对于非 Windows 系统所在的数据卷,可以直接创建一个新的小容量 EBS 卷挂载到实例后进行文件级别的复制(如 robocopy)。而对于 Windows 系统所在的根卷,或者数据卷中存在持续读写的文件(例如 SQL Server 的数据库),就需要关机后进行冷处理。
本文使用 Windows Server 2012 R2,原始根卷和数据卷各 100GB gp3,目标缩容到各 50GB gp3。
在开始操作前请务必对实例创建 AMI 进行备份,并在测试环境中启动实例进行测试,再应用到生产环境。复制根卷需要停止实例,建议在业务低谷期进行。停止实例会导致实例存储数据丢失以及自动分配的公网 IP(非 EIP)丢失。
AWS 文档:EBS 卷修改限制





一、迁移数据卷(D: → 新 50GB 卷)
数据盘用 robocopy 在线复制,不需要停机。
1. 创建并挂载新 EBS 卷
在 EC2 控制台创建一个 50GB EBS 卷,与实例在同一可用区,挂载到实例上。
在 Windows 磁盘管理中对新卷联机 → 初始化(MBR 或 GPT,与原卷保持一致)→ 新建简单卷 → 格式化为 NTFS → 分配盘符 E:。


2. robocopy 复制数据
robocopy D:\ E:\ /MIR /COPYALL /R:1 /W:1 /LOG:C:\robocopy-d.log参数说明:
/MIR:镜像模式,完整复制目录结构/COPYALL:等同于/COPY:DATSOU,复制 Data、Attributes、Timestamps、Security(ACL)、Owner、aUditing/R:1 /W:1:失败重试 1 次,等待 1 秒(避免对锁定文件反复重试浪费时间)/LOG:输出日志供检查
/COPYALL 会完整复制 NTFS 权限(DACL + SACL)、所有者信息和审计设置,不需要额外操作。
3. 验证数据盘
:: 查看 robocopy 日志,确认无失败文件
type C:\robocopy-d.log | findstr /i "FAILED"
:: 对比权限
icacls E:\PermTest\*
:: 检查文件内容完整性
dir E:\PermTest
type E:\PermTest\admin-only.txt4. 在线替换盘符
不需要停机。在磁盘管理中直接换盘符:
- 右键原 D: 卷 → 更改驱动器号和路径 → 将 D: 改为 X:(或其他临时盘符)

- 右键新卷 E: → 更改驱动器号和路径 → 将 E: 改为 D:
- 验证应用程序访问 D: 正常
此时新 50GB 卷已接管 D: 盘符,原 100GB 卷挂在 X: 上。确认业务正常后:
# 确认新 D: 大小正确
Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='D:'" | Select Size, FreeSpace- 在磁盘管理中将 X:(原卷)脱机
- 在 EC2 控制台分离原 100GB EBS 卷(在确认业务正常后再将其删除)
二、迁移系统盘(C: → 新 50GB 卷)
系统盘运行时文件被锁定,无法用 robocopy 或 DiskGenius 在线克隆自身。需要停机后通过工具实例冷操作。
1. 记录原实例信息
在 EC2 控制台记录:
- 原实例所在可用区(AZ)
- 根卷 Volume ID(在实例详情 → 存储 → 根设备中查看)
2. 准备工具实例
在同一 AZ 启动一台 Windows Server 实例作为工具机。可以用 Windows Server 2012 R2 / 2019 / 2025 均可,只要能运行 DiskGenius。
工具实例启动后,RDP 连接进去,下载并解压 DiskGenius(免费版即可)。
下载地址:DiskGenius 下载地址
3. 停止原实例并分离根卷
停止原实例,等待状态变为 Stopped 后,在控制台分离根卷。
注意事项:
- 如果原实例使用自动分配的公网 IP,再次启动时 IP 会变。有 EIP 则不影响。
- 如果原实例有实例存储,数据会丢失,提前备份。
4. 创建新 50GB 卷
创建一个 50GB gp3 卷,AZ 与原实例和工具实例保持一致。记录新卷的 Volume ID。
5. 挂载原根卷和新 50GB 卷到工具实例
等原根卷状态变为 available 后,将它和新建的 50GB 卷都挂载到工具实例作为数据盘。
RDP 连接到工具实例,打开磁盘管理:
- 原 100GB 根卷会显示为一块已有分区的磁盘 → 右键磁盘 → 联机(不做其他操作)
- 新 50GB 卷会弹出初始化向导 → 直接取消,不要初始化、不要创建分区、不要格式化。DiskGenius 克隆整盘时会直接写入目标磁盘,不需要预先分区

6. DiskGenius 克隆磁盘
- 打开 DiskGenius,确认看到三块磁盘:工具实例系统盘、原 100GB 根卷(含系统保留分区 + C:)、新 50GB 空卷

菜单 → 工具 → 克隆磁盘
选择源磁盘:原 100GB 根卷(留意包含 Windows 系统分区)

- 选择目标磁盘:50GB 新卷

克隆方式:由于目标盘比源盘小,"复制所有扇区"和"按文件系统结构原样复制"会灰掉,只能选按文件复制(可消除碎片) — 同样会完整复制所有文件和 NTFS 权限信息
目标磁盘上 DiskGenius 会自动按比例分配分区大小。System Reserved 通常只需要 350-500MB,如果自动分配给了十几 GB,可以拖拽分区边界手动缩小,把空间留给系统分区
点击"开始",提示选择执行方式,选择"锁定后执行"

- 等待克隆完成
7. 修复引导(关键步骤)
DiskGenius "按文件复制"克隆后,新磁盘的磁盘签名与源盘不同,BCD 中记录的分区引用会失效,导致启动时报 0xc0000225 winload.exe 错误。需要用 bcdboot 重建 BCD。
克隆完成后,在工具实例的磁盘管理中将新 50GB 卷联机,Windows 会自动为分区分配盘符。

两种分区情况:
- 有 System Reserved 分区(VM Import 生成的镜像很可能会有):磁盘上有两个分区,System Reserved(小分区,含 bootmgr)和 Windows 系统分区(大分区)。本例中 System Reserved 分配到 F:,Windows 系统分区分配到 G:。
- 没有 System Reserved 分区:整块磁盘只有一个分区,bootmgr 和 Windows 都在同一个分区里(常见于早期手动安装或某些 VM Import 镜像)。此时只会出现一个盘符。
如果 System Reserved 分区没有自动分配盘符,右键 → 更改驱动器号和路径 → 手动添加。
打开管理员命令提示符,根据实际情况执行:
有 System Reserved 分区(F: = 引导分区,G: = 系统分区):
bcdboot G:\Windows /s F: /f BIOS /l zh-cn没有 System Reserved 分区(G: = 唯一分区):
bcdboot G:\Windows /s G: /f BIOS /l zh-cn确认输出"已成功创建启动文件"。
然后用 diskpart 确认引导分区为活动分区:
diskpart
list disk
select disk 2
list partition
select partition 1
active
exit(disk 2 是新 50GB 卷的磁盘编号,以实际 list disk 中看到的为准。如果没有 System Reserved 分区,partition 1 就是唯一的那个分区)
完成后将新卷脱机。
8. 将新卷挂回原实例作为根卷
- 从工具实例分离 50GB 新卷和原 100GB 卷
- 将 50GB 新卷挂载到原实例,设备名选 /dev/sda1(根卷设备位置)
9. 启动原实例并验证
RDP 连接后检查系统盘大小和状态正常。
三、统一验证
# 检查 C 盘和 D 盘大小
Get-WmiObject Win32_LogicalDisk | Select DeviceID, @{N='SizeGB';E={[math]::Round($_.Size/1GB,1)}}, @{N='FreeGB';E={[math]::Round($_.FreeSpace/1GB,1)}}
# 检查系统正常启动
systeminfo | findstr /i "boot"NTFS 权限是否会保留
- 数据盘(robocopy):
/COPYALL参数在文件级复制时完整迁移 DACL、SACL、Owner 和 Auditing 信息。跑完后icacls对比即可验证。 - 系统盘(DiskGenius 克隆):克隆操作在文件系统层面复制数据,NTFS 权限存储在 $MFT 和 $Secure 元数据中,是文件系统的一部分,克隆时完整保留。
两种方式都不需要额外工具或命令来保留权限。经测试,C 盘和 D 盘中的文件权限都和迁移之前一致。
参考文档
- AWS EBS 卷修改限制:https://docs.amazonaws.cn/ebs/latest/userguide/ebs-modify-volume.html#elastic-volumes-limitations
- AWS 将 EBS 卷与实例分离:https://docs.amazonaws.cn/AWSEC2/latest/WindowsGuide/ebs-detaching-volume.html
- DiskGenius Clone Disk:https://diskgenius.com/manual/clone-disk.php
- EC2 Windows EBS 卷缩容实操(CSDN):https://blog.csdn.net/lpwmm/article/details/159769397
