###### tags: `DevOps`
# Decrease the size of EBS volume in your EC2 instance
AWS的磁碟(EBS)只提供增大磁碟, 不提供縮小磁碟的方法
主要原因是怕掉資料
但還是可以透過轉移 更換開機磁碟的方法達成
1. 建立一個新EBS當作開機磁碟 (大小要自己衡量)
2. attach到ec2上面,準備做資料轉移
3. ssh to ec2
4. 這時候已經attach上去,可以下`lsblk`查看新磁碟的filesystem名稱(以下假設為xvdf)
5. 確保該新磁碟為空 可下`sudo file -s /dev/xvdf`指令查看 如果return data則為空磁碟
6. 接著format磁碟 `sudo mkfs -t ext4 /dev/xvdf`
7. 創立空資料夾讓新磁碟可以mount上去 `sudo mkdir /mnt/new-volume`
8. mount新資料夾 `sudo mount /dev/xvdf /mnt/new-volume` 可下 df -h查看是否成功
9. 接下來就開始丟資料到新磁碟 `nohup sudo rsync -axv / /mnt/new-volume/ &` 使用nohup跑要不然會跑很久。(全部跑完後 網路上的建議是用grub來設定開機磁碟的uuid, 但Server裝不起來該套件 所以用手動方式修改)
-------以下步驟出錯可能會導致無法開機, 建議先把磁碟做快照備份!!!--------
10. blkid 查看所有磁碟的uuid
11. ubuntu有兩個檔案是跟開機磁碟有關 `/boot/grub/grub.cfg & /etc/fstab`, 這邊先設定fstab, 正常來講fstab是用認寫入uuid去做開機,但AWS的ubuntu是用label來認,所以進去之後會看到開機label為cloudimg-rootfs,然後把新的磁碟套上cloudimg-rootfs label 指令為:`sudo e2label /dev/xvdf cloudimg-rootfs` 接著下blkid會看到新磁碟也有cloudimg-rootfs label
12. 接著要修改grub.cfg,把檔案裡原先的root uuid更改為新的磁碟uuid, 可以下sed指令去做跟改or %s, ex: :`%s/736fad7a-387f-4420-b934-4ccbafa26d16/4a356467-923c-4588-9b1c-b2f401ff6827/g`
13. 修改完畢後, 關機unattch兩個磁碟(root & new),在attch新的磁碟當root (這邊要注意,每個server認開機磁碟的裝置名稱不一樣,以aws ubuntu為例子則是/dev/sda1)
14. 順利開機後即完成
參考:
1. 使用grub套件修改開機磁碟
https://medium.com/@m.yunan.helmy/decrease-the-size-of-ebs-volume-in-your-ec2-instance-ea326e951bce
2. 手動修改檔案更動開機磁碟
https://serverfault.com/questions/673048/how-to-reduce-aws-ebs-root-volume-size