在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
命令重啟無效)才能生效。具體操作,請參見重啟實例。
準備工作
通過一鍵擴容工具擴容分區及文件系統
訪問EBS控制臺工具集下的擴容分區和文件系統工具。
選擇待操作的云盤,然后單擊提交。
工具將檢測操作系統分區狀態。如果顯示操作系統未擴容分區字樣,且解決方案中包含自動生成的命令,則可以按照如下操作進行一鍵擴容。
說明如果未顯示擴容命令,則說明工具暫不支持該種情況,您仍需要參考文檔手動執行擴容。
在解決方案區域的云助手工具頁簽中,確認自動生成的擴容命令,然后單擊執行上述遠程命令。
在彈出的發送命令對話框單擊執行,系統將自動執行擴容命令。
看到命令執行成功提示后,單擊取消關閉對話框。
即可看到該云盤的分區和文件系統擴容成功。
登錄實例,自行擴容分區和文件系統
若您的環境無法通過云助手或一鍵擴容工具擴容分區及文件系統,您可選擇登錄實例,使用命令行實現擴容操作。
步驟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。
在實例詳情頁面的塊存儲頁簽下,找到待擴容的目標云盤。
鼠標懸浮至①處,再分別單擊②處和③處的圖標,查看待擴容云盤的設備名、分區類型、分區名稱、文件系統類型和掛載點。
判斷需要執行的擴容步驟。
云盤存在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完成邏輯卷擴容,再進行文件系統擴容。具體操作,請參見擴容邏輯卷。
進入實例內部,執行以下命令
sudo lsblk
示例回執:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 50G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 49.8G 0 part / vdb 253:16 0 40G 0 disk └─vdb1 253:17 0 40G 0 part └─vg_01-lv01 252:0 0 40G 0 lvm
若回執出現TYPE類型為lvm分區,則表示當前使用了lvm邏輯卷,如示例回執,表示/dev/vdb1已被用作邏輯卷,因此需要先擴容物理卷及邏輯卷后,再執行文件系統擴容。
如果您的云盤當前開啟了多重掛載且使用了集群文件系統,在擴容云盤容量后,您需要自行操作集群文件系統的擴容,當前內容并不適用。常用的集群文件系統包括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
常見問題
growpart相關問題
原因:中文版操作系統使用了非en_US.UTF-8的字符編碼類型。
解決方案:
運行
locale
命令查看ECS實例的字符編碼類型,將非en_US.UTF-8的字符編碼類型切換成en_US.UTF-8。運行以下命令,切換字符編碼類型。
export LANG=en_US.UTF-8
如果問題仍未解決,運行以下命令,切換字符編碼類型。
export LC_ALL=en_US.UTF-8
如果問題仍未解決,請您嘗試運行
reboot
命令重啟ECS實例。
重要當您通過切換字符編碼,成功完成擴容分區后,建議您按需切回原有字符編碼。
原因:您的云盤是裸設備,未分區。裸設備無需執行擴容分區操作,直接擴容文件系統即可。
解決方案:直接步驟3:擴容文件系統。
原因:MBR分區類型不支持2 TiB以上的云盤。
解決方案:先將分區類型從MBR轉換為GPT,然后再擴容分區。具體操作,請參見轉換MBR分區為GPT分區。
原因:磁盤空間不足,導致growpart命令創建臨時目錄時失敗。
解決方案:清理無用的文件釋放空間,然后再進行擴容。具體操作,請參見解決Linux實例磁盤空間滿問題。
原因:CentOS 6操作系統版本已結束生命周期(EOL),繼續使用默認源會導致無法安裝軟件包。
解決方案:
在CentOS 6中切換yum源。具體操作,請參見CentOS 6 EOL如何切換源?。
說明CentOS 6操作系統版本已結束生命周期(EOL),如果您需要使用yum安裝軟件包,需要先切換yum源。
重新運行以下命令,安裝growpart工具。
type growpart || sudo yum install -y cloud-utils-growpart
如果問題仍未解決,請參考擴展分區和文件系統_Linux數據盤擴容分區。
原因:設備名以
/dev/mapper
開頭,通常是通過LVM管理磁盤分區。解決方案:需要先通過LVM擴容邏輯卷,然后再擴容文件系統。具體操作,請參見通過LVM擴容邏輯卷。
原因:擴容分區時沒有更多可用空間。通常是因為在控制臺離線擴容云盤后,未通過控制臺或OpenAPI重啟實例,導致云盤本身沒有得到擴容。
解決方案:離線擴容后,必須通過ECS控制臺或者OpenAPI重啟實例才能使云盤擴容生效,在ECS實例內部重啟(執行
reboot
命令)無效。具體操作,請參見重啟實例或者RebootInstance。
resize2fs相關問題
原因:擴容文件系統時,resize2fs指定的是云盤分區名稱,不是云盤設備名稱或者分區的掛載目錄。
解決方案:擴容文件系統時,請您指定正確的分區名稱。
原因:文件系統沒有可擴容的空間,可能是分區未擴容或者擴容未生效導致。
解決方案:
請先確認是否成功執行growpart擴容分區的步驟,如果遺漏請您先執行growpart命令擴容分區。
如果您成功執行了growpart命令擴容分區,并輸出
CHANGED
字樣后,在執行resize2fs命令時仍有上述報錯。這可能是因為操作系統版本較低,無法在線更新系統分區表。請嘗試執行reboot
命令重啟實例后,再執行resize2fs命令。