全部產品
Search
文件中心

Elastic Compute Service:擴容分區和檔案系統(Linux)

更新時間:Dec 10, 2024

在ECS控制台上擴容雲端硬碟容量後,對應分區和檔案系統並未擴容,您還需要繼續擴容雲端硬碟的分區和檔案系統,將擴容部分的容量劃分至已有分區及檔案系統內,使系統下可以正常使用擴容容量。本文為您介紹如何擴容Linux執行個體雲端硬碟的分區和檔案系統。

前提條件

  • 請確保執行個體滿足以下條件:

  • 請確保雲端硬碟滿足以下條件:

    • 狀態為使用中(In_use)。

    • 系統硬碟使用率未達到100%。

      重要

      為確保擴容操作順利進行,請登入執行個體並執行df -h命令,以確認根分區的使用率未達到100%。如根分區的使用率已達到100%,請參見解決Linux執行個體磁碟空間滿問題以擷取相應的解決方案。

  • 已在ECS控制台擴容雲端硬碟容量。具體操作,請參見步驟一:擴容雲端硬碟容量

    說明

    如果您在擴容雲端硬碟容量時選擇離線擴容,擴容後需要通過ECS控制台或API介面重啟執行個體(在執行個體內部執行reboot命令重啟無效)才會生效。具體操作,請參見重啟執行個體

準備工作

  • (強烈建議)已建立雲端硬碟快照,做好資料備份。具體操作,請參見建立快照

    說明

    擴容分區和檔案系統正常情況下不會遺失資料。為避免誤操作導致資料丟失或異常,建議您建立快照備份雲端硬碟資料。

  • 已清楚雲端硬碟擴容整體流程。具體資訊請參見雲端硬碟擴容指引

登入執行個體,自行擴容分區和檔案系統

若您的環境無法通過雲助手擴容分區及檔案系統,您可選擇登入執行個體,使用命令列實現擴容操作。

步驟1:記錄待擴容雲端硬碟資訊。

  1. 擷取雲端硬碟資訊。

    方式一:通過命令列擷取

    1. 遠端連線ECS執行個體。

      登入ECS管理主控台,點擊左側導覽列執行個體,選擇目標執行個體,點擊遠端連線,登入執行個體。具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

    2. 運行以下命令,確定待擴容雲端硬碟名稱及分區資訊。

      sudo fdisk -lu

      截屏2024-11-20 12

      1. 確定雲端硬碟是否分區。 如上圖所示,表示該執行個體有3塊雲端硬碟,系統硬碟/dev/vda、資料盤/dev/vdb和資料/dev/vdc盤,我們以資料盤為例。其中:

        • vdb1表示資料盤/dev/vdb已分區,數字1是分區編號。

        • vdc表示資料盤/dev/vdc未分區(裸裝置)

      2. 確定待擴容分區雲端硬碟。 我們以資料盤/dev/vdb為例。其中:

        SIZE表示容量大小,從圖中可知/dev/vdb1分區的容量小於雲端硬碟/dev/vdb的容量,即/dev/vdb1分區需要擴容。

        說明

        您也可以通過運行lsblk命令查看哪個分區待擴容。

      3. 確定待擴容雲端硬碟的分區類型。 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命令查看分區類型。

    3. 使用以下命令,擷取待擴容雲端硬碟的檔案系統資訊。

      sudo file -s 裸裝置名稱/分區名稱

      截屏2024-12-02 10

      以上樣本表示:

      分區/dev/vdb1檔案系統類型為ext4;

      未分區(裸裝置)/dev/vdc的檔案系統類型為ext4;

      未分區(裸裝置)/dev/vdd無檔案系統。

      說明

      您也可以使用sudo blkid指令,擷取待擴容雲端硬碟的檔案系統資訊。

    方式二:通過控制台擷取

    重要

    使用該方式時注意:

    • 該方式僅支援部分使用者使用,支援情況以實際介面為準。

    • 該雲端硬碟所在的ECS執行個體已安裝雲助手Agent。具體操作,請參見安裝雲助手Agent

    1. 在執行個體詳情頁面的Block Storage頁簽下,找到待擴容的目標雲端硬碟。

    2. 滑鼠懸浮至①處,再分別單擊②處和③處的image表徵圖,查看待擴容雲端硬碟的裝置名稱、分區類型、分區名稱、檔案系統類型和掛載點。 image

  2. 判斷需要執行的擴容步驟。

    說明

    具體的擴容樣本,請參見擴容樣本

步驟2:擴容分區。

  1. 請依照判斷需要執行的擴容步驟,確認雲端硬碟是否需要執行擴容分區操作。

  2. 執行擴容分區指令。

    本操作以在ECS執行個體內部將雲端硬碟分區/dev/vdb1由40 GiB擴容至60 GiB(已在控制台擴大容量為60 GiB)為例,請您根據實際環境進行操作。

    根據不同的作業系統和分區類型,選擇命令,擴容指定分區。

    Alibaba Cloud Linux 2/3版本、CentOS 6及以上版本

    重要
    • 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/vdb1之間需要空格分隔,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 2growpart /dev/vdb 5完成分區的擴容。

    如下圖所示,輸出CHANGED字樣時,表示分區擴容成功。

    image.png

  3. 執行以下命令查看分區擴容是否生效。

    sudo fdisk -lu

    截屏2024-11-20 14

    如上圖樣本,/dev/vdb與/dev/vdb1容量一致,分區擴容已生效。

    說明

    CentOS 6等較低版本的作業系統,需要執行reboot命令重啟執行個體,使分區擴容生效。

    通常情況下,擴容分區不需要執行重啟。但如果您擴容的是CentOS 6作業系統的雲端硬碟或者發現擴容後作業系統實際識別的分區沒有擴充,這是作業系統版本較低的原因,需要重啟執行個體使分區擴容生效。建議您選擇業務低穀的時間段進行重啟,避免影響業務運行。

步驟3:擴容檔案系統。

說明
  • 如果您使用LVM管理磁碟分割,在完成擴容雲端硬碟容量和分區後,需要先通過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等單機檔案系統,在多重掛載情況下無法保證多執行個體間資料同步,會導致資料不一致等問題。更多資訊,請參見雲端硬碟多重掛載功能

  1. 請依照判斷需要執行的擴容步驟,確認雲端硬碟是否需要執行擴容檔案系統操作。

  2. 運行以下命令,擷取需要擴容的檔案系統的類型和掛載目錄。

    df -Th

    Type值為檔案系統類型,Mounted on值為分區的掛載目錄。如下圖表示/dev/vdb1分區的檔案系統類型為ext4,掛載目錄為/mnt

    image.png

    如果Filesystem取值尾碼不帶數字(例如/dev/vdc),則為裸裝置。

  3. 擴容檔案系統。

    擴容命令因檔案系統類型而異,請您根據上一步中查詢到的檔案系統類型選擇以下命令。

    說明

    雲端硬碟和檔案系統在使用的狀態下,採用resize2fs等工具線上擴容檔案系統,有可能會觸發檔案系統資料問題,該問題與鏡像核心版本、resize2fs工具版本相關,與雲端硬碟擴容本身無關。建議您為雲端硬碟建立快照,做好資料備份。具體操作,請參見建立快照

    ext*(例如ext2、ext3、ext4)檔案系統

    • 以擴容雲端硬碟分區/dev/vdb1ext*檔案系統為例,則運行如下命令:

      sudo resize2fs /dev/vdb1
      說明

      如果您擴容的是系統硬碟,命令中的/dev/vdb1需要替換為/dev/vda1

    • 以擴容裸裝置/dev/vdcext*檔案系統為例,則運行如下命令:

      sudo resize2fs /dev/vdc

    xfs檔案系統

    以擴容掛載目錄為/mntxfs檔案系統為例,則運行如下命令:

    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檔案系統

    以擴容掛載目錄為/mntbtrfs檔案系統為例,則運行如下命令:

    sudo btrfs filesystem resize max /mnt
  4. 運行以下命令,確認是否擴容成功。

    df -Th

    當查詢結果中的檔案系統容量和控制台容量一致時,表示擴容成功。

    如下圖所示,分區/dev/vdb1檔案系統容量(59 GiB)和雲端硬碟容量(60 GiB)基本一致(因為檔案系統本身會佔用部分儲存空間),表示擴容完成。image.png

    擴容完成後,您需要根據實際情況檢查雲端硬碟資料是否正常。

    • 如果擴容成功,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相關問題

  • 問題1:運行擴容分區growpart命令時,提示unexpected output in sfdisk --version [sfdisk,來自 util-linux 2.23.2]

    原因:中文版作業系統使用了非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執行個體。

    重要

    當您通過切換字元編碼,成功完成擴容分區後,建議您按需切回原有字元編碼。

  • 問題2:運行擴容分區growpart命令時,提示unexpected output in sfdisk --version [sfdisk (util-linux-ng 2.17.2)]

    原因:您的fdisk版本與growpart版本不相容。

    解決方案:嘗試將growpart版本降低到0.27。如果問題仍未解決,請參考擴充分區和檔案系統_Linux資料盤擴容分區。

  • 問題3:運行擴容分區growpart命令時,提示FAILED: unable to determine partition type

    原因:您的雲端硬碟是裸裝置,未分區。裸裝置無需執行擴容分區操作,直接擴容檔案系統即可。

    解決方案:直接步驟3:擴容檔案系統

  • 問題4:運行擴容分區growpart命令時,提示WARNING: MBR/dos partitioned disk is larger than 2TB. Additional space will go unused.

    原因:MBR分區類型不支援2 TiB以上的雲端硬碟。

    解決方案:先將分區類型從MBR轉換為GPT,然後再擴容分區。具體操作,請參見轉換MBR分區為GPT分區

  • 問題5:運行擴容分區growpart命令時,提示mkdir: cannot create directory ... No space left on device

    原因:磁碟空間不足,導致growpart命令建立臨時目錄時失敗。

    解決方案:清理無用的檔案釋放空間,然後再進行擴容。具體操作,請參見解決Linux執行個體磁碟空間滿問題

  • 問題6:在CentOS 6中安裝growpart工具時提示Error: Cannot retrieve repository metadata

    原因: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資料盤擴容分區。

  • 問題7:裝置名稱以/dev/mapper開頭的分區未擴容成功。

    原因:裝置名稱以/dev/mapper開頭,通常是通過LVM管理磁碟分割。

    解決方案:需要先通過LVM擴容邏輯卷,然後再擴容檔案系統。具體操作,請參見通過LVM擴容邏輯卷

  • 問題8:運行擴容分區growpart命令時,提示NOCHANGE: partition 1 could only be grown by 2015 [fudge=2048]

    原因:擴容分區時沒有更多可用空間。通常是因為在控制台離線擴容雲端硬碟後,未通過控制台或OpenAPI重啟執行個體,導致雲端硬碟本身沒有得到擴容。

    解決方案:離線擴容後,必須通過ECS控制台或者OpenAPI重啟執行個體才能使雲端硬碟擴容生效,在ECS執行個體內部重啟(執行reboot命令)無效。具體操作,請參見重啟執行個體或者RebootInstance

resize2fs相關問題

  • 問題1:運行擴容檔案系統resize2fs命令時,提示Couldn't find valid filesystem superblock. open: Is a directory while opening /mnt

    原因:擴容檔案系統時,resize2fs指定的是雲端硬碟分區名稱,不是雲端硬碟裝置名稱或者分區的掛載目錄。

    解決方案:擴容檔案系統時,請您指定正確的分區名稱。

  • 問題2:運行擴容檔案系統resize2fs命令時,提示The filesystem is already ... blocks long. Nothing to do!

    原因:檔案系統沒有可擴容的空間,可能是分區未擴容或者擴容未生效導致。

    解決方案

    • 請先確認是否成功執行growpart擴容分區的步驟,如果遺漏請您先執行growpart命令擴容分區。

    • 如果您成功執行了growpart命令擴容分區,並輸出CHANGED字樣後,在執行resize2fs命令時仍有上述報錯。這可能是因為作業系統版本較低,無法線上更新系統磁碟分割表。請嘗試執行reboot命令重啟執行個體後,再執行resize2fs命令。

  • 問題3:運行擴容檔案系統resize2fs命令時,提示resize2fs: Permission denied to resize filesystem

    原因:可能是檔案系統不一致,導致檔案系統擴容失敗。

    解決方案

    • 運行dmesg -T | grep fs命令,如果輸出There are errors in the filesystem類似資訊,說明檔案系統不一致。

    • 為雲端硬碟做好資料備份。具體操作,請參見建立快照

    • 在業務允許的情況下,運行umount命令,根據實際環境卸載已掛載的分區或者整塊盤。

      說明

      如果是系統硬碟(無法umount),則要使用卸載系統硬碟再掛載到其他執行個體上的方式,進行修複。具體操作,請參見卸載或掛載系統硬碟

    • 嘗試使用e2fsck命令進行修複。e2fsck命令的使用方法請參考其手冊。