前言
最近收到AWS的個人帳單以後, 突然發現我帳單上的金額與我的想像有些落差, 也因為這樣子, 開始來對一下是哪些項目在吃錢…
大概對了一下, 發現主要的花費在EC2 instance 與 EBS 兩個項目上面, EC2 instance 這邊的花費就是題外話了, 但EBS這邊就慢讓我意外的… 細看了以後才發現當初不知道為什麼把使用的EBS 成 使用30GB, 但我實際上的使用也才6GB左右…
(雖然這也不是什麼大錢, 但每個月給它這樣扣也是覺得還不如把錢省下來去訂閱其他有用服務….)
第一次實驗
原本想說把root volume EBS 調低應該不是件難事, 結果沒想到AWS預設上是不支援這件是的, 它可以往上調高, 但不支援調低…
在網路上找了不少相關的教學文, 主要的作法都是, 大概都是…
- 先建立一個較小的EBS volume
- 再把這個新的 EBS volume 掛到我們的EC2上面以後, 做好格式化以及
rsync
的資料拷貝 - 最後設定好
/boot
以後, 就可以把新的EBS volume來取代原有的 EBS root volume.
(題外話, 要把EBS volume 設定為 EC2 上面的/dev/sda1
才會成為那台EC2上的root volume)
第一次實驗結果
經由上述步驟的教學文實際嘗試以後, 都會卡再做出來的EBS volume是無法當成是原本這一台EC2的root volume, 它會直接讓那台EC2開不起來. (機器顯示 running
, 但是ssh 連不到…)
上述的測試其實我參考了不少文章, 但最後卡的點都是一樣的, 做出來的 EBS volume是不能用的… (我這邊使用的EC2 t4g family, 不太確定跟ARM 版本的 grub-install
有關??? 也許今天使用的是x86的機器就可以? 之後有機會再來試試)
另一種Workaround的方式
因為上面測試也花了不少時間, 所以最後就自己做了一些流程上的調整如下:
- 建立一台新的EC2, 並設定root volume為我想要的大小 (6GB), 並且OS的版本也是用與就機器一樣的 ubuntu 20.04
- 接著, 將舊機器的EBS 掛到新的EC2機器上.
- 透過
rsync
將舊的EC2 資料都複製到新的EC2上. (基本上除了/boot, /tmp, /mnt, /dev
以外, 都要sync 到新的EC2的對應資料夾) - 如果先前有設定route53, elastic IP 等等相關的設定, 最後都指定到這台新的EC2機器上.
最後靠這個方式成功把 EBS size降下來了, 不過靠這個方式比較像是duplicate出一台新的EC2, 而不是clone出一模一樣的機器…
Reference:
- https://superuser.com/questions/1053388/grub2-install-error-boot-efi-doesnt-look-like-an-efi-partition-on-a-fresh-ge
- https://medium.com/@m.yunan.helmy/decrease-the-size-of-ebs-volume-in-your-ec2-instance-ea326e951bce
- https://medium.com/fabhotels/aws-ec2-modifying-the-size-and-type-of-the-ebs-disk-volume-5bc6463109b4
- https://unix.stackexchange.com/questions/405472/cannot-find-efi-directory-issue-with-grub-install
- https://www.daniloaz.com/en/partitioning-and-resizing-the-ebs-root-volume-of-an-aws-ec2-instance/
- https://medium.com/@andtrott/how-to-downsize-a-root-ebs-volume-on-aws-ec2-amazon-linux-727c00148f61
- https://cloudacademy.com/blog/amazon-ebs-shink-volume/
- https://www.linuxcool.com/grub-install
- https://askubuntu.com/questions/201164/proper-alignment-of-partitions-on-an-advanced-format-hdd-using-parted
- https://phoenixnap.com/kb/linux-create-partition