前言
使用虛擬機、雲端機房的雲主機時,一開始硬碟空間可能夠用。不過隨著儲存的資料增加,就可能出現硬碟空間不足的情況。這個時候雖然可以使用額外掛載一顆硬碟,再將資料搬移到新的硬碟中的方式來因應。不過這個方式除了要花費許多的時間,也會需要許多額外的調整操作。因此,直接擴大原本硬碟的大小,或許會是一個比較好的選擇。
使用 Logical Volume Manager (LVM) 管理分割區,可以直接透過 LVM 工具調整 Volume 大小。
調整硬碟大小
常見虛擬機 VMWare、VirtualBox、Hyper-V 解決方案,或是雲端主機供應商如 Amazon Web Services、Microsoft Azure、Google Cloud Platform (GCP),都有提供修改硬碟大小的方式。所以這邊先依照各自的技術文件修改硬碟大小的配置,再來操作 CentOS 中的分割區擴容。
檢查硬碟及分割區大小
把原先 sda 硬碟大小,從原先 10 GB 調整為 20GB 後,執行 lsblk
列出所有硬碟及分割區。可以看到 sda 這個硬碟大小是 20 GB,但是只有一個 10 GB 的分割區 sda1。這是因為上個步驟其實只調整了硬碟大小,還沒分配多出來的新容量,因此需要透過磁碟分割相關的指令,將原本的分割區擴大。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 10G 0 part /
擴大分割區大小
接下來透過 growpart
命令,指定要擴大的硬碟及分割區編號擴大分割區。
$ sudo growpart /dev/[DISK_ID] [PARTITION_NUMBER]
這次我們要把 /dev/sda 的硬碟的第一個分割區擴大,所以要執行 growpart /dev/sda 1
。
$ sudo growpart /dev/sda 1
CHANGED: partition=1 start=2048 old: size=20969472 end=20971520 new: size=41927602,end=41929650
安裝 growpart 工具套件
如果找不到 growpart,代表沒有安裝對應的工具套件。可以執行下面的 yum
指令安裝:
$ sudo yum install cloud-utils-growpart
擴大檔案系統
最後就是擴大作業系統的檔案系統。根據不同的檔案系統,進行不同的操作。如果是 ext2、ext3、ext4 這些檔案系統,可以使用 resize2fs
;如果是 xfs,則是使用 xfs_growfs
指令。
ext2、ext3、ext4
指令格式是 resize2fs /dev/[DISK_ID][PARTITION_NUMBER]
。在下面的範例中,要修改的分割區是 /dev/sda1。
$ sudo resize2fs /dev/sda1
xfs
指令格式是 xfs_growfs [MOUNT-POINT]
。在下面的範例中,要修改的分割區是掛載在 / 路徑。
$ sudo xfs_growfs /
meta-data=/ isize=256 agcount=4, agsize=655296 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=2621184, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621184 to 5240950
結尾
最後使用 df
或 lsblk
指令檢查硬碟空間是否有增加。上面指令執行如果都沒錯誤,就可以看到分割區大小顯示為 20 GB。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 10G 10G 50% /
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 20G 0 part /