ブラックボックス

プログラミングのノウハウやライフハックをどんどん投稿していきたい

Jun 28, 2019 - 4 minute read - ノウハウ

【AWS】Windows ServerにアタッチしたEBSの容量を縮小する

Linuxで減らす方法はいくつかありましたが、Windows Serverではあまり見かけなかったので。
ただし、自己責任でお願いします。
また、事前にAWSマネジメントコンソールでスナップショットを取得しておくことをオススメします。
環境:

  • Windows Server2012 R2 Standard

参考:
小さくなって欲しいときもあります

今回、1000GBだったEBSを240GBに縮小しています。
手順としては
Windows Serverでパーティションを縮小
 ↓
作業用Linuxで縮小後のEBSにクローン
 ↓
縮小後のEBSをWindows Serverにアタッチ
といった流れとなります。

コントロールパネル > コンピューターの管理 > ディスクの管理 へ移動

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

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

また、全て縮小してしまうとディスクに余裕がなくなるので、ある程度は余裕を持たせた方が良いです。
ひとまず下記のように50,000MBの余裕を持たせて設定することとしました。

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

マイコンピュータを確認しても同様。

当然ですが、縮小後のEBSの容量は上記ディスク容量よりも大きい必要があるので注意。

その後AWSマネジメントコンソールへ行き、縮小後のEBS(240GB)を作成します。
EBSのアベイラビリティゾーンは、Windows ServerのEC2のアベイラリティゾーンと合わせる必要があります。

EBS作成後、作業用のLinuxのEC2を作成します。
AMIは「Amazon Linux 2 AMI (HVM), SSD Volume Type」としました。
インスタンスタイプはt2.micro、EBSはデフォルトの8GBとしています。

作業用EC2作成後、作業用EC2に縮小前(1000GB)・縮小後(240GB)のEBSをアタッチします。
/dev/sdfが縮小前のEBS、/dev/sdgが縮小後のEBSとなります。

アタッチ後、SSHにて作業用EC2に接続し、ddコマンドにてクローンを行います。
確認用のコマンドも含め下記のように操作をしました。

$ lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
xvda    202:0    0     8G  0 disk
mqxvda1 202:1    0     8G  0 part /
xvdf    202:80   0  1000G  0 disk
tqxvdf1 202:81   0   350M  0 part
mqxvdf2 202:82   0 186.7G  0 part
xvdg    202:96   0   240G  0 disk

$ sudo fdisk -l -u /dev/sdf
Disk /dev/sdf: 1000 GiB, 1073741824000 bytes, 2097152000 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: 0xaa53c8bf

Device     Boot  Start       End   Sectors   Size Id Type
/dev/sdf1  *      2048    718847    716800   350M  7 HPFS/NTFS/exFAT
/dev/sdf2       718848 392294399 391575552 186.7G  7 HPFS/NTFS/exFAT

$ sudo fdisk -l -u /dev/sdg
Disk /dev/sdg: 240 GiB, 257698037760 bytes, 503316480 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

$ sudo dd if=/dev/sdf of=/dev/sdg bs=512 count=1

$ sudo dd if=/dev/sdf1 of=/dev/sdg1 bs=1M
350+0 records in
350+0 records out
367001600 bytes (367 MB) copied, 5.28796 s, 69.4 MB/s

$ sudo dd if=/dev/sdf2 of=/dev/sdg2 bs=1M
191199+0 records in
191199+0 records out
200486682624 bytes (200 GB) copied, 3134.87 s, 64.0 MB/s

$ lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
xvda    202:0    0     8G  0 disk
mqxvda1 202:1    0     8G  0 part /
xvdf    202:80   0  1000G  0 disk
tqxvdf1 202:81   0   350M  0 part
mqxvdf2 202:82   0 186.7G  0 part
xvdg    202:96   0   240G  0 disk
tqxvdg1 202:97   0   350M  0 part
mqxvdg2 202:98   0 186.7G  0 part

$ sudo fdisk -l -u /dev/sdg
Disk /dev/sdg: 240 GiB, 257698037760 bytes, 503316480 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: 0xaa53c8bf

Device     Boot  Start       End   Sectors   Size Id Type
/dev/sdg1  *      2048    718847    716800   350M  7 HPFS/NTFS/exFAT
/dev/sdg2       718848 392294399 391575552 186.7G  7 HPFS/NTFS/exFAT
※28行目の sudo dd if=/dev/sdf of=/dev/sdg bs=512 count=1 の結果が取得出来ていませんでした……

上記作業完了後、AWSマネジメントコンソールから作業用EC2を停止させ、縮小後のEBSをデタッチし、そのまま縮小後のEBSをWindows Serverにアタッチを行います。
アタッチ先は下記。
/dev/sda1

縮小前のEBSはアタッチする必要はありません。

アタッチ後、Windows Serverを起動し、リモートデスクトップ接続が行えることを確認。
接続後、再度ディスクの管理を確認すると未割当の領域が少なくなっていることが分かります。

未割当の領域をCドライブに追加する為、(C:)のパーティションを右クリック>ボリュームの拡張を選択します。

そのまま全て「次へ」を選択し、ディスクの拡張を行います。
拡張後にマイコンピュータを確認すると、240GB(一部システム領域があるので若干不足しているが)となっていることを確認します。

多分この手順で問題ないと思いますが……しばらくはスナップショットを保持して様子見してみます。