第三シスの趙(@realdapeng)です。

困っていた内容

AWSのマネコンで EBSボリュームのサイズ拡張は容易でできますが、

マネコンでは、EBSボリュームの縮小するのはAWSでサポートしておりません。
Volumeのサイズ縮小について

どう対応すればいいの?

EBSボリュームのサイズを縮小したい場合は、新規にサイズの小さいEBSボリュームを作成して、元のボリュームの中身をコピーして、という方法を紹介します。

前提

縮小対象サーバ情報
OS:Windows2019
EBS: 50GB

目標

50GB → 30GBに縮小

手順

  1. Windows Serverでパーティションを縮小
  2. Windows Serverをシャットダウン
  3. 新規Linuxで縮小後のEBSにクローン
  4. 縮小後のEBSをWindows Serverにアタッチ

やって見る

1. Windows Serverでパーティションを縮小

コマンド「DISKMGMT.MSC」で「ディスクの管理」を起動する
file

パーティションを右クリック>ディスクの縮小 を選択

file

「C: の縮小」ウィンドウでサイズを決定
今回はCドライブなので「C: の縮小」となっています。
file

提示する縮小可能な領域そのまま縮小する。
file

するとディスクが下記のように縮小され、未割当の領域が出来ます。
file

2. Windows Serverをシャットダウン

EBSボリュームをデタッチ
file

デタッチする
file

EBSの状態が「available」になる
file

3. 新規Linuxで縮小後のEBSにクローン

Amazon Linux 2(Amazon Linux 2 AMI (HVM)) 作成
file

EBSのアベイラビリティゾーンは、Windows ServerのEC2のアベイラリティゾーンと合わせる必要があります。
file

縮小後(30GB)のEBS を追加してください。
file

EC2作成後、作業用EC2に縮小前(50GB)をアタッチします。
file

アタッチ
file

EBSの状態が「in-use」になる
file

SSHにて作業用EC2に接続
file

lsblkでEBS確認
file

fdiskで新旧EBS確認
file

dd コマンドでクローン実施
file

file

file

確認用のコマンドも含め下記のように操作をしました。

[root@ip-172-31-33-134 ~]# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    8G  0 disk
mqxvda1 202:1    0    8G  0 part /
xvdb    202:16   0   30G  0 disk
xvdf    202:80   0   50G  0 disk
mqxvdf1 202:81   0 16.4G  0 part
[root@ip-172-31-33-134 ~]# fdisk -l -u /dev/sdb
Disk /dev/sdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@ip-172-31-33-134 ~]# fdisk -l -u /dev/sdf
Disk /dev/sdf: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9fff4844

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdf1  *     2048 34416639 34414592 16.4G  7 HPFS/NTFS/exFAT
[root@ip-172-31-33-134 ~]# dd if=/dev/sdf of=/dev/sdb bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00562221 s, 91.1 kB/s
[root@ip-172-31-33-134 ~]# sudo dd if=/dev/sdf1 of=/dev/sdb1 bs=1M
16804+0 records in
16804+0 records out
17620271104 bytes (18 GB) copied, 276.65 s, 63.7 MB/s
[root@ip-172-31-33-134 ~]# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    8G  0 disk
mqxvda1 202:1    0    8G  0 part /
xvdb    202:16   0   30G  0 disk
mqxvdb1 202:17   0 16.4G  0 part
xvdf    202:80   0   50G  0 disk
mqxvdf1 202:81   0 16.4G  0 part
[root@ip-172-31-33-134 ~]# sudo fdisk -l -u /dev/sdb
Disk /dev/sdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9fff4844

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1  *     2048 34416639 34414592 16.4G  7 HPFS/NTFS/exFAT
[root@ip-172-31-33-134 ~]#

4. 縮小後のEBSをWindows Serverにアタッチ

上記作業完了後、AWSマネジメントコンソールから作業用EC2を停止させ、縮小後のEBSをデタッチ

file

そのまま縮小後のEBSをWindows Serverにアタッチを行います。
ルートデバイス名をメモしてください
file

アタッチする
file

メモしたルートデバイスを設定
file

アタッチ後、Windows Serverを起動し、リモートデスクトップ接続が行えることを確認。
コマンドで「DISKMGMT.MSC」で「ディスクの管理」を起動する
トータルディスク容量が30GBになりました。
file

接続後、再度ディスクの管理を確認すると未割当の領域が少なくなっていることが分かります。
未割当の領域をCドライブに追加する為、(C:)のパーティションを右クリック>ボリュームの拡張を選択します。
file

そのまま全て「次へ」を選択し、ディスクの拡張を行います。
file

容量が30GBのことを確認できました。
file

マイコンピュータでも確認できました。
file

おわりに

どなたかの参考になれば幸いです〜。
以上、最後まで読んでいただきありがとうございました。

参考

https://skworkspace.net/archives/530

Last modified: 2021-03-14

Author