擴增 aws ec2 的硬碟空間

Justin Hsu
Aug 7, 2018 · 7 min read

其實網路很容易查到做法,只是想知道是不是會有意想不到的困難,所以來實際實作看看。

先去 aws 開一個 ec2 的 instance 吧。

選擇那個藍色斗大的 Launch Instance 按鈕。

AMI 我選擇了 Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type,Instance type 我選了 free tier 的 t2.micro,其他設定都不管,反正我只是想實驗擴增硬碟空間這件事而已。

ssh 進去新開的 instance 之後,先來確定空間大小,在 command line 輸入指令 lsblk ,就可以看到現在硬碟的磁碟分佈狀態:

[ec2-user@ip-172-30-0-175 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
[ec2-user@ip-172-30-0-175 ~]$

恩,是扎扎實實的小8G,來試著擴充到 16G 看看吧。

回到 ec2 的後台,點擊左側列表中 ELASTIC BLOCK STORE 下的 Volumes:

就是左下角那個 Volumes,點擊他。

進入之後在這裡你就會看到所有跟 ec2 instance 綁定的 volume,其實大部分方案 ec2 的硬碟都是連接在 aws 自己的服務 EBS 上,而 EBS 有個特色是可以在 zero downtime 的情況下達成擴充硬碟空間的任務,那我們就來試試看吧。

在剛剛建立的 ec2 instance 綁定的 volume 上按下右鍵,選擇 Modify Volume,之後你就會看到這個視窗:

我們調整其中的 Size 欄位,將其中的數值調整你想要的硬碟大小,這邊我把它改成 16,調整好之後按下 Modify 按鈕,之後你就會看到一個提示訊息:

按下 yes 吧。

剛完成的時候你可能會發現 volume 清單中的空間並沒有變大,這個時候你只要點擊一下右上角的 Refresh 按鈕就好了:

就是那個雙箭頭按鈕。

畢竟調整的動作是需要時間的,我猜需要的時間跟擴充的大小有關,所以如果發現沒有變化的話,就稍微等一下再看看吧。

Refresh 之後發現變 16G 惹:

整整大了一倍呢。

回到 ec2,再執行一次 lsblk

[ec2-user@ip-172-30-0-175 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 8G 0 part /
[ec2-user@ip-172-30-0-175 ~]$

發現硬碟已經變成 16G 了,但是實際分配到的空間依然是 8G,這就像是你在 pc 上買了一個 500G 的硬碟,但是你 C 槽只分配了 120G 一樣,那接下來就來把這新8G挪過來用吧!

我們利用 growpart 工具來把硬碟沒使用到的空間分配給我們的 parition1:

sudo growpart /dev/xvda 1

注意要加 sudo 利用 root 權限執行,不然會顯示錯誤訊息:

FAILED: unable to determine partition type

執行完畢之後會看到訊息:

[ec2-user@ip-172-30-0-175 ~]$ sudo growpart /dev/xvda 1
CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=16773086,end=16777182 new: size=33550302,end=33554398
[ec2-user@ip-172-30-0-175 ~]$

這樣就代表 /dev/xvda 沒使用到的 8G 已經都分配到 parition 1 了,我們再次執行 lsblk 看看:

[ec2-user@ip-172-30-0-175 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 16G 0 part /
[ec2-user@ip-172-30-0-175 ~]$

parition 1 (訊息中的 xvda1) 確實地長大成 16G 了,可喜可賀。

於是我們滿心期待的執行 df -h 來看看容量,卻看到了這個:

[ec2-user@ip-172-30-0-175 ~]$ df -h
檔案系統 容量 已用 可用 已用% 掛載點
devtmpfs 484M 56K 484M 1% /dev
tmpfs 494M 0 494M 0% /dev/shm
/dev/xvda1 7.8G 1.1G 6.7G 14% /
[ec2-user@ip-172-30-0-175 ~]$

咦?可用空間怎麼還是沒有變多?

原來是因為檔案系統也需要執行 resize 的動作,才能完整的使用到整個 partition 的空間,我們利用工具 resize2fs 來達成目的:

[ec2-user@ip-172-30-0-175 ~]$ sudo resize2fs /dev/xvda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/xvda1 is now 4193787 (4k) blocks long.

完成之後,在執行一次 df -h 看看:

[ec2-user@ip-172-30-0-175 ~]$ df -h
檔案系統 容量 已用 可用 已用% 掛載點
devtmpfs 484M 56K 484M 1% /dev
tmpfs 494M 0 494M 0% /dev/shm
/dev/xvda1 16G 1.1G 15G 7% /
[ec2-user@ip-172-30-0-175 ~]$

可用空間終於變大了,大功告成。


整個過程不到五分鐘,真的,很簡單。

ba傑ross:真的,很簡單。

註1:畢竟是調整硬碟多少還是有風險在,如果是存放重要資料的 volume 在調整前還是先進行備份比較好。

註2:我發現一個 EBS volume 六個小時內只能 modify 一次,沒辦法讓你一直伸縮自如的玩。

註3:調整不一定要在 ec2 的 web 介面進行,也可以在 command line 進行。

參考:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modify-volume.html

https://medium.com/@kenichishibata/resize-aws-ebs-4d6e2bf00feb

Justin Hsu

Written by

明明掛的職位是前端工程師,但是工作的時候煩惱的大多是後端的事。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade