在ECS控制台上擴容雲端硬碟容量後,對應分區和檔案系統並未擴容,您還需要繼續擴容雲端硬碟的分區和檔案系統,將擴容部分的容量劃分至已有分區及檔案系統內,使系統下可以正常使用擴容容量。本文為您介紹如何擴容Linux執行個體雲端硬碟的分區和檔案系統。
前提條件
請確保執行個體滿足以下條件:
狀態為運行中(Running)。
請確保Linux執行個體的作業系統是Alibaba Cloud Linux 2/3、CentOS 6及以上、Debian 8及以上或者Ubuntu14及以上版本。
重要CentOS 6作業系統在擴容GPT分區表時,需要參考離線擴容分區和檔案系統(Linux資料盤)使用
parted
命令進行操作,不能使用本文檔介紹的growpart
命令進行操作,否則會有分區表被破壞的風險。判斷是否為GPT分區,可以參見本文檔中的步驟1:記錄待擴容雲端硬碟資訊。如果為其他動作系統,請參見離線擴容分區和檔案系統(Linux資料盤)進行擴容操作。
請確保雲端硬碟滿足以下條件:
狀態為使用中(In_use)。
系統硬碟使用率未達到100%。
重要為確保擴容操作順利進行,請登入執行個體並執行df -h命令,以確認根分區的使用率未達到100%。如根分區的使用率已達到100%,請參見解決Linux執行個體磁碟空間滿問題以擷取相應的解決方案。
已在ECS控制台擴容雲端硬碟容量。具體操作,請參見步驟一:擴容雲端硬碟容量。
說明如果您在擴容雲端硬碟容量時選擇離線擴容,擴容後需要通過ECS控制台或API介面重啟執行個體(在執行個體內部執行
reboot
命令重啟無效)才會生效。具體操作,請參見重啟執行個體。
準備工作
登入執行個體,自行擴容分區和檔案系統
若您的環境無法通過雲助手擴容分區及檔案系統,您可選擇登入執行個體,使用命令列實現擴容操作。
步驟1:記錄待擴容雲端硬碟資訊。
擷取雲端硬碟資訊。
方式一:通過命令列擷取
遠端連線ECS執行個體。
登入ECS管理主控台,點擊左側導覽列執行個體,選擇目標執行個體,點擊遠端連線,登入執行個體。具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
運行以下命令,確定待擴容雲端硬碟名稱及分區資訊。
sudo fdisk -lu
確定雲端硬碟是否分區。 如上圖所示,表示該執行個體有3塊雲端硬碟,系統硬碟
/dev/vda
、資料盤/dev/vdb
和資料/dev/vdc
盤,我們以資料盤為例。其中:vdb1表示資料盤/dev/vdb已分區,數字
1
是分區編號。vdc表示資料盤/dev/vdc未分區(裸裝置)。
確定待擴容分區雲端硬碟。 我們以資料盤
/dev/vdb
為例。其中:SIZE表示容量大小,從圖中可知
/dev/vdb1
分區的容量小於雲端硬碟/dev/vdb
的容量,即/dev/vdb1
分區需要擴容。說明您也可以通過運行
lsblk
命令查看哪個分區待擴容。確定待擴容雲端硬碟的分區類型。
Disklabel type
表示雲端硬碟的分區類型,值為dos
表示MBR分區,值為gpt
表示GPT分區。 我們以存在分區的資料盤/dev/vdb
為例。樣本中的資料盤的雲端硬碟名稱為/dev/vdb,分區名稱為/dev/vdb1,分區類型為MBR分區。說明不同作業系統的顯示略有不同。如果沒有
Disk label type
欄位,可通過System
欄位判斷。System
值為Linux
表示MBR分區,值為GPT
表示GPT分區。較低版本的fdisk可能不能正常顯示GPT分區表。您可以通過
gdisk -l /dev/vdb
命令查看分區類型。
使用以下命令,擷取待擴容雲端硬碟的檔案系統資訊。
sudo file -s 裸裝置名稱/分區名稱
以上樣本表示:
分區/dev/vdb1檔案系統類型為ext4;
未分區(裸裝置)/dev/vdc的檔案系統類型為ext4;
未分區(裸裝置)/dev/vdd無檔案系統。
說明您也可以使用sudo blkid指令,擷取待擴容雲端硬碟的檔案系統資訊。
方式二:通過控制台擷取
重要使用該方式時注意:
該方式僅支援部分使用者使用,支援情況以實際介面為準。
該雲端硬碟所在的ECS執行個體已安裝雲助手Agent。具體操作,請參見安裝雲助手Agent。
在執行個體詳情頁面的Block Storage頁簽下,找到待擴容的目標雲端硬碟。
滑鼠懸浮至①處,再分別單擊②處和③處的表徵圖,查看待擴容雲端硬碟的裝置名稱、分區類型、分區名稱、檔案系統類型和掛載點。
判斷需要執行的擴容步驟。
雲端硬碟存在MBR分區,擴容後容量大於2TiB,且希望將擴容部分的容量劃分至已有分區:因分區格式限制需先轉換Linux資料盤的分區類型,然後再執行步驟2:擴容分區及步驟3:擴容檔案系統。
雲端硬碟存在MBR或GPT分區,擴容後容量小於等於2TiB,且希望將擴容部分的容量劃分至已有分區:需要執行步驟2:擴容分區及步驟3:擴容檔案系統。
說明如果您希望新增分區而不是擴容已有分區,請參見新增並格式化MBR分區、選項四新增並格式化GPT分區。
雲端硬碟未分區但存在檔案系統:無需執行擴容分區操作,直接執行步驟3:擴容檔案系統即可。
雲端硬碟未分區也無檔案系統:無需執行本文檔操作。
說明具體的擴容樣本,請參見擴容樣本。
步驟2:擴容分區。
請依照判斷需要執行的擴容步驟,確認雲端硬碟是否需要執行擴容分區操作。
執行擴容分區指令。
本操作以在ECS執行個體內部將雲端硬碟分區
/dev/vdb1
由40 GiB擴容至60 GiB(已在控制台擴大容量為60 GiB)為例,請您根據實際環境進行操作。根據不同的作業系統和分區類型,選擇命令,擴容指定分區。
Alibaba Cloud Linux 2/3版本、CentOS 6及以上版本
重要由於CentOS 6和CentOS 8結束生命週期(EOL),所以如果您使用的是CentOS 6或者CentOS 8系統的ECS執行個體,請先切換源地址。具體操作,請參見CentOS 6 EOL如何切換源?和CentOS 8 EOL如何切換源?。
CentOS 6 擴容GPT分區表時,需要參考離線擴容分區和檔案系統(Linux資料盤)使用parted進行操作,不能使用growpart命令進行操作,否則會有分區表被破壞的風險。
MBR分區
type growpart || sudo yum install -y cloud-utils-growpart sudo yum update cloud-utils-growpart sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
GPT分區(需安裝gdisk工具)
type growpart || sudo yum install -y cloud-utils-growpart sudo yum update cloud-utils-growpart type sgdisk || sudo yum install -y gdisk sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
Debian 9及以上版本、Ubuntu14及以上版本
重要由於Debain9和Debain10結束生命週期(EOL),所以如果您使用的是Debain9和Debain10系統的ECS執行個體,請先切換源地址。具體操作,請參見Debian 9/10 EOL如何切換源?。
MBR分區
sudo apt-get update sudo apt-get install -y cloud-guest-utils sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
GPT分區(需安裝gdisk工具)
sudo apt-get update sudo apt-get install -y cloud-guest-utils type sgdisk || sudo apt-get install -y gdisk sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
重要執行擴容分區命令時,您需要特別注意以下幾種情況:
使用growpart工具時,如果出現報錯資訊,請參照常見問題進行排查。
命令參數中的
/dev/vdb
和1
之間需要空格分隔,1
是分區編號。這兩個參數需要您根據實際情況進行設定。如果您擴容的是系統硬碟,命令中的
/dev/vdb
需要替換為/dev/vda
。LC_ALL=en_US.UTF-8
是環境變數設定,為了相容中文作業系統的字元編碼。如果單盤有多個連續分區的情況,僅能擴容最後一個分區。例如資料盤
/dev/vdb
有三個分區/dev/vdb1
、/dev/vdb2
和/dev/vdb3
。擴容時,只能擴容最後一個分區/dev/vdb3
,即執行growpart /dev/vdb 3
命令即可完成資料盤的分區擴容。如果您是NVMe類型雲端硬碟,以分區名稱
/dev/nvme0n1p1
為例,其中/dev/nvme0n1
是裝置名稱。擴容時執行命令為growpart /dev/nvme0n1 1
,而不是growpart /dev/nvme0n1p1 1
。如果您需要擴容的雲端硬碟分區是MBR分區表下的擴充分區(通常判斷方式是分區號大於等於5),您需要先對擴充分區擴容後再對邏輯分區進行擴容。例如您有
/dev/vdb1
(主要磁碟分割)、/dev/vdb2
(擴充分區)、/dev/vdb5
(邏輯分區)三個分區,此時您需要依次執行growpart /dev/vdb 2
、growpart /dev/vdb 5
完成分區的擴容。
如下圖所示,輸出
CHANGED
字樣時,表示分區擴容成功。執行以下命令查看分區擴容是否生效。
sudo fdisk -lu
如上圖樣本,/dev/vdb與/dev/vdb1容量一致,分區擴容已生效。
說明CentOS 6等較低版本的作業系統,需要執行
reboot
命令重啟執行個體,使分區擴容生效。通常情況下,擴容分區不需要執行重啟。但如果您擴容的是CentOS 6作業系統的雲端硬碟或者發現擴容後作業系統實際識別的分區沒有擴充,這是作業系統版本較低的原因,需要重啟執行個體使分區擴容生效。建議您選擇業務低穀的時間段進行重啟,避免影響業務運行。
步驟3:擴容檔案系統。
如果您使用LVM管理磁碟分割,在完成擴容雲端硬碟容量和分區後,需要先通過LVM完成邏輯卷擴容,再進行檔案系統擴容。具體操作,請參見擴容邏輯卷。
如果您的雲端硬碟當前開啟了多重掛載且使用了叢集檔案系統,在擴容雲端硬碟容量後,您需要自行操作叢集檔案系統的擴容,當前內容並不適用。常用的叢集檔案系統包括OCFS2、GFS2、Veritas CFS、Oracle ACFS和DBFS等。請注意,Ext2、Ext3、Ext4、XFS、NTFS等單機檔案系統,在多重掛載情況下無法保證多執行個體間資料同步,會導致資料不一致等問題。更多資訊,請參見雲端硬碟多重掛載功能。
請依照判斷需要執行的擴容步驟,確認雲端硬碟是否需要執行擴容檔案系統操作。
運行以下命令,擷取需要擴容的檔案系統的類型和掛載目錄。
df -Th
Type
值為檔案系統類型,Mounted on
值為分區的掛載目錄。如下圖表示/dev/vdb1
分區的檔案系統類型為ext4,掛載目錄為/mnt。如果Filesystem取值尾碼不帶數字(例如
/dev/vdc
),則為裸裝置。擴容檔案系統。
擴容命令因檔案系統類型而異,請您根據上一步中查詢到的檔案系統類型選擇以下命令。
說明雲端硬碟和檔案系統在使用的狀態下,採用resize2fs等工具線上擴容檔案系統,有可能會觸發檔案系統資料問題,該問題與鏡像核心版本、resize2fs工具版本相關,與雲端硬碟擴容本身無關。建議您為雲端硬碟建立快照,做好資料備份。具體操作,請參見建立快照。
ext*(例如ext2、ext3、ext4)檔案系統
以擴容雲端硬碟分區
/dev/vdb1
的ext*檔案系統為例,則運行如下命令:sudo resize2fs /dev/vdb1
說明如果您擴容的是系統硬碟,命令中的
/dev/vdb1
需要替換為/dev/vda1
。以擴容裸裝置
/dev/vdc
的ext*檔案系統為例,則運行如下命令:sudo resize2fs /dev/vdc
xfs檔案系統
以擴容掛載目錄為/mnt的xfs檔案系統為例,則運行如下命令:
Alibaba Cloud Linux 2/3版本、CentOS 6及以上版本
type xfs_growfs || sudo yum install -y xfsprogs sudo xfs_growfs /mnt
Debian 8及以上版本、Ubuntu14及以上版本
type xfs_growfs || sudo apt-get install -y xfsprogs sudo xfs_growfs /mnt
btrfs檔案系統
以擴容掛載目錄為/mnt的btrfs檔案系統為例,則運行如下命令:
sudo btrfs filesystem resize max /mnt
運行以下命令,確認是否擴容成功。
df -Th
當查詢結果中的檔案系統容量和控制台容量一致時,表示擴容成功。
如下圖所示,分區
/dev/vdb1
檔案系統容量(59 GiB)和雲端硬碟容量(60 GiB)基本一致(因為檔案系統本身會佔用部分儲存空間),表示擴容完成。擴容完成後,您需要根據實際情況檢查雲端硬碟資料是否正常。
如果擴容成功,ECS執行個體中的業務程式能夠正常運行,則完成操作。
如果擴容失敗,您可以通過備份的快照復原資料。具體操作,請參見使用快照復原雲端硬碟。
擴容樣本
本節以MBR分區、GPT分區、裸資料盤為例展示擴容分區和檔案系統的操作命令,供您參考。在實際擴容過程中,請您以實際環境為準。
樣本1:擴容MBR分區和ext4檔案系統
裝置名稱:/dev/vda(系統硬碟)
1個分區:/dev/vda1
檔案系統類型:ext4
作業系統:Alibaba Cloud Linux 3
擴容分區和檔案系統命令如下:
type growpart || sudo yum install -y cloud-utils-growpart
sudo yum update cloud-utils-growpart
sudo LC_ALL=en_US.UTF-8 growpart /dev/vda 1
sudo resize2fs /dev/vda1
樣本2:擴容GPT分區和xfs檔案系統
裝置名稱:/dev/vdb(資料盤)
2個分區:/dev/vdb1 、/dev/vdb2
檔案系統類型:xfs
/dev/vdb2的掛載目錄:/mnt
作業系統:Debian 12
擴容分區和檔案系統命令如下:
sudo apt-get update
sudo apt-get install -y cloud-guest-utils
type sgdisk || sudo apt-get install -y gdisk
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 2
type xfs_growfs || sudo apt-get install -y xfsprogs
sudo xfs_growfs /mnt
樣本3:擴容存在檔案系統的裸資料盤
裝置名稱:/dev/vdc(裸資料盤未分區)
檔案系統類型:ext4
作業系統:CentOS 7
擴容檔案系統命令如下:
sudo resize2fs /dev/vdc