操作場景
雲硬碟是雲上可擴充的儲存設備,您可以在建立雲硬碟後随時擴充其大小,以增加存儲空間,同時不失去雲硬碟上原有的資料。
雲硬碟擴容 完成後,需要将擴容部分的容量劃分至已有分區内,或者将擴容部分的容量格式化成一個獨立的新分區。
注意事項
擴容檔案系統操作不慎可能影響已有資料,是以強烈建議您在操作前手動 建立快照 備份資料。
前提條件
- 已擴容雲硬碟空間。
- 該雲硬碟已挂載 到 Linux 雲伺服器并已建立檔案系統。
- 已登入待擴充分區及檔案系統的 Linux 雲伺服器。
操作步驟
确認擴充方式
以 root 使用者執行以下指令,查詢雲硬碟使用的分區形式。
- fdisk -l
- 若結果如下兩圖所示(根據作業系統不同略有不同),則說明使用 GPT 分區形式。

-
-
若結果如下圖所示(根據作業系統不同略有不同),則說明使用 MBR 分區形式。注意:
MBR 分區形式支援的磁盤最大容量為2TB。如果您的硬碟分區為 MBR 格式,且需要擴容到超過 2TB 時,建議您重新建立并挂載一塊資料盤,使用 GPT 分區方式後将資料拷貝至新盤上。對于 Linux 作業系統而言,當磁盤分區形式選用 GPT 時,fdisk 分區工具将無法使用,需要采用 parted 工具。
-
分區形式操作指引說明GPT将擴容部分的容量劃分至原有分區(GPT)同樣适用于未分區直接格式化的場景。将擴容部分的容量格式化成獨立的新分區(GPT)可保持原有分區不變。MBR将擴容部分的容量劃分至原有分區(MBR)同樣适用于未分區直接格式化的場景。将擴容部分的容量格式化成獨立的新分區(MBR)可保持原有分區不變。
将擴容部分的容量劃分至原有分區(GPT)
以 root 使用者執行以下指令,确認雲硬碟的容量變化。
-
parted <磁盤路徑> print
本文以磁盤路徑是
為例,則執行:/dev/vdb
-
parted /dev/vdb print
若在過程中提示如下圖所示資訊,請輸入
。Fix
如下圖所示,擴容後的雲硬碟大小為107GB,已有分區的大小為10.7GB。
執行以下指令,确認該雲硬碟是否還有分區已挂載。
-
mount | grep '<磁盤路徑>'
本文以磁盤路徑是
為例,則執行:/dev/vdb
-
mount | grep '/dev/vdb'
如下圖所示,雲硬碟上有一個分區(vdb1)挂載在
上。/data
執行以下指令,解挂資料盤。
-
umount <挂載點>
本文以挂載點是
為例,則執行:/data
-
umount /data
說明:
請将雲硬碟上所有分區的檔案系統都解挂,。可重複執行以下指令,确認該硬碟上所有分區的檔案系統都已解挂。
- mount | grep '/dev/vdb'
執行以下指令,進入 parted 分區工具。
-
parted '<磁盤路徑>'
本文以磁盤路徑是
為例,則執行:/dev/vdb
- parted '/dev/vdb'
- 執行以下指令,将顯示和操縱機關變成 sector(預設為GB)。
- unit s
- 輸入
print
,檢視分區資訊,并記錄已有分區的 Start 值。
注意:
删除分區并建立後,Start 值必須保持不變,否則将會引起資料丢失。
執行以下指令,删除原有分區。
-
rm <分區 Number>
例如,由上圖可知雲硬碟上有一個分區,Number 為“1”,則執行:
-
rm 1
回顯資訊如下圖所示。
執行以下指令,建立一個主分區。
-
mkpart primary <原分區起始扇區> 100%
其中,100%表示此分區到磁盤的最末尾。
例如,主分區從第2048個扇區開始(必須與删除之前的分區一緻,即 Start 值為2048s),則執行:
-
mkpart primary 2048s 100%
如果出現如下圖所示的狀态,請輸入
。Ignore
執行以下指令,檢視新分區是否已建立成功。
-
print
傳回結果如下圖所示,即表示新分區已建立成功。
執行以下指令,退出 parted 工具。
- quit
- 執行以下指令,檢查擴容後的分區。
-
e2fsck -f <分區路徑>
本文以建立分區是1(即分區路徑是
)為例,則執行:/dev/vdb1
-
e2fsck -f /dev/vdb1
傳回如下圖所示結果。
執行以下指令,對新分區上 EXT 檔案系統進行擴容操作。
-
resize2fs <分區路徑>
本文以分區路徑是
為例,則執行:/dev/vdb1
- resize2fs /dev/vdb1
執行以下指令,對新分區上 XFS 檔案系統進行擴容操作。
-
xfs_growfs <分區路徑>
本文以分區路徑是
為例,則執行:/dev/vdb1
- xfs_growfs /dev/vdb1
- 執行以下指令,手動挂載新分區。
-
mount <分區路徑> <挂載點>
本文以分區路徑是
,挂載點是/dev/vdb1
為例,則執行:/data
- mount /dev/vdb1 /data
- 執行以下指令,檢視新分區。
-
df -h
傳回如下圖資訊說明挂載成功,即可以檢視到資料盤。
将擴容部分的容量格式化成獨立的新分區(GPT)
- 以 root 使用者執行以下指令, 确認雲硬碟的容量變化。
-
parted <磁盤路徑> print
本文以磁盤路徑是
為例,則執行:/dev/vdb
-
parted /dev/vdb print
若在過程中提示如下圖所示資訊,請輸入
。Fix
如下圖所示,擴容後的雲硬碟大小為107GB,已有分區的大小為10.7GB。
執行以下指令,确認該雲硬碟是否還有分區已挂載。
-
mount | grep '<磁盤路徑>'
本文以磁盤路徑是
為例,則執行:/dev/vdb
-
mount | grep '/dev/vdb'
如下圖所示,雲硬碟上有一個分區(vdb1)挂載在
上。/data
執行以下指令,解挂資料盤。
-
umount <挂載點>
本文以挂載點是
為例,則執行:/data
-
umount /data
說明:
請将雲硬碟上所有分區的檔案系統都解挂。可重複執行以下指令,确認該硬碟上所有分區的檔案系統都已解挂。
- mount | grep '/dev/vdb'
執行以下指令,進入 parted 分區工具。
-
parted '<磁盤路徑>'
本文以磁盤路徑是
為例,則執行:/dev/vdb
- parted '/dev/vdb'
- 執行以下指令,檢視分區資訊,并記錄已有分區的 End 值,以此值作為下一個分區的起始偏移值。
執行以下指令,建立一個主分區。此分區将從已有分區的末尾開始,覆寫硬碟所有的新增空間。
-
mkpart primary start end
本文以 End 值是10.7GB為例,執行
- mkpart primary 10.7GB 100%
- 執行以下指令,檢視新分區是否已建立成功。
執行以下指令,退出 parted 工具。
- quit
- 執行以下指令,格式化建立的分區。
-
mkfs.<fstype> <分區路徑>
您可以自行選擇檔案系統的格式,例如 EXT2、EXT3 等。
本文以檔案系統是 EXT3 為例,則執行:
- mkfs.ext3 /dev/vdb2
将擴容部分的容量劃分至原有分區(MBR)
fdisk/e2fsck/resize2fs 自動擴容工具适用于 Linux 作業系統,用于将新擴容的雲硬碟空間添加到已有的檔案系統中,擴容能夠成功必須滿足以下四個條件:
- 檔案系統是 EXT2/EXT3/EXT4/XFS。
- 目前檔案系統不能有錯誤。
- 擴容後的磁盤大小不超過2TB。
- 目前工具僅支援 Python 2 版本,不支援 Python 3 版本。
以 root 使用者執行以下指令,解除安裝分區。
-
umount <挂載點>
本文以挂載點是
為例,則執行:/data
- umount /data
執行以下指令,下載下傳工具。
- wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py
- 執行以下指令,使用擴容工具進行擴容。
-
python /tmp/devresize.py <硬碟路徑>
本文以硬碟路徑是
且檔案系統在 vdb1 上為例,則執行:/dev/vdb
- python /tmp/devresize.py /dev/vdb
- 若輸出 “The filesystem on /dev/vdb1 is now XXXXX blocks long.”則表示擴容成功
- 若輸出的是 “[ERROR] - e2fsck failed!!”,請執行以下步驟:
a. 執行以下指令,修複檔案系統所在分區。
fsck -a <分區路徑>
本文以硬碟路徑是
/dev/vdb
且檔案系統在 vdb1 上為例,則執行:
-
-
-
fsck -a /dev/vdb1
b. 修複成功後,再次執行以下指令,使用擴容工具進行擴容。
- python /tmp/devresize.py /dev/vdb
-
-
擴容成功日志devresize.log
2019-08-23 19:18:38,867 - [DEBUG]- devresize.py:467 - user input:/tmp/devresize.py /dev/vdb
2019-08-23 19:18:39,227 - [DEBUG]- devresize.py:193 - device_size:107374182400
device_sector_number:209715200
logical_sector_size:512
2019-08-23 19:18:39,233 - [DEBUG]- devresize.py:285 - target_partition:/dev/vdb1
2019-08-23 19:18:39,359 - [INFO ]- devresize.py:308 - checking filesystem healthy
2019-08-23 19:18:39,457 - [DEBUG]- devresize.py:311 - e2fsck ret is 2048
2019-08-23 19:18:39,458 - [ERROR]- devresize.py:319 - File system /dev/vdb1 error!
2019-08-23 19:18:39,458 - [DEBUG]- devresize.py:451 - close fd
2019-08-23 19:18:59,163 - [DEBUG]- devresize.py:467 - user input:/tmp/devresize.py /dev/vdb1
2019-08-23 19:18:59,164 - [ERROR]- devresize.py:409 - The argument should be a whole disk, not a partition! Example: /dev/vdb
2019-08-23 19:19:40,508 - [DEBUG]- devresize.py:467 - user input:/tmp/devresize.py /dev/vdb1
2019-08-23 19:19:40,509 - [ERROR]- devresize.py:409 - The argument should be a whole disk, not a partition! Example: /dev/vdb
2019-08-23 19:19:43,310 - [DEBUG]- devresize.py:467 - user input:/tmp/devresize.py /dev/vdb
2019-08-23 19:19:43,344 - [DEBUG]- devresize.py:193 - device_size:107374182400
device_sector_number:209715200
logical_sector_size:512
2019-08-23 19:19:43,348 - [DEBUG]- devresize.py:285 - target_partition:/dev/vdb1
2019-08-23 19:19:43,408 - [INFO ]- devresize.py:308 - checking filesystem healthy
2019-08-23 19:19:44,131 - [DEBUG]- devresize.py:311 - e2fsck ret is 0
2019-08-23 19:19:59,257 - [DEBUG]- devresize.py:524 - Begin to change the partation
2019-08-23 19:19:59,258 - [DEBUG]- devresize.py:257 -
Start h,s,c: 0 9 20
End h,s,c: 1 196 95
Partition Type Name:Linux
Start LBA: 2048
Sector Number: 209713152
2019-08-23 19:19:59,258 - [INFO ]- devresize.py:228 - Backup MBR to /tmp/MBR_vdb1_2019-08-23_19:19:59_bak
2019-08-23 19:20:00,272 - [INFO ]- devresize.py:341 - umount /dev/vdb1
2019-08-23 19:20:01,273 - [DEBUG]- devresize.py:375 - part_probe
2019-08-23 19:20:03,419 - [INFO ]- devresize.py:341 - umount /dev/vdb1
2019-08-23 19:20:03,420 - [INFO ]- devresize.py:348 - resize filesystem
2019-08-23 19:20:04,873 - [DEBUG]- devresize.py:350 - resize2fs ret is 0
2019-08-23 19:20:04,873 - [INFO ]- devresize.py:578 - Finished
2019-08-23 19:20:04,873 - [DEBUG]- devresize.py:451 - close fd
執行以下指令,手動挂載擴容後的分區。
-
mount <分區路徑> <挂載點>
本文以挂載點是
為例。/data
- 若擴容前已有分區且以分區路徑是
為例,則執行:/dev/vdb1
- mount /dev/vdb1 /data
- 若擴容前沒有分區,則執行:
- mount /dev/vdb /data
- 執行以下指令,檢視擴容後的分區容量。
-
df -h
若傳回類似如下圖所示的資訊,說明挂載成功,即可以檢視到資料盤:
- 執行以下指令,檢視擴容後原分區的資料資訊,确認新增加的存儲空間是否擴容到檔案系統中。
- ll /data
将擴容部分的容量格式化成獨立的新分區(MBR)
以 root 使用者執行以下指令,檢視已挂載的資料盤分區資訊。
- df -h
執行以下指令,檢視資料盤擴容後未分區的資訊。
- fdisk -l
執行以下指令,解挂所有已挂載的分區。
-
umount <挂載點>
本文以挂載點是
為例,則執行:/data
-
umount /data
說明:
請将雲硬碟上所有分區都解挂後
- 執行以下指令,建立一個新分區。
-
fdisk <硬碟路徑>
本文以磁盤路徑是
為例,則執行:/dev/xvdc
-
fdisk /dev/xvdc
按照界面的提示,依次輸入”p”(檢視現有分區資訊)、“n”(建立分區)、“p”(建立主分區)、“2”(建立第2個主分區),兩次回車(使用預設配置),輸入 “w”(儲存分區表),開始分區。如下圖所示:
說明:
本文以建立一個分區為例,您也可以根據實際需求建立多個分區。
執行以下指令,檢視新分區。
-
fdisk -l
如下圖所示,表示新的分區 xvdc2 已經建立完成。
執行以下指令,格式化新分區并建立檔案系統。
-
mkfs.<fstype> <分區路徑>
您可以自行選擇檔案系統的格式,例如 EXT2、EXT3 等。
本文以檔案系統是 EXT3 為例,則執行:
- mkfs.ext3 /dev/xvdc2
執行以下指令,建立新的挂載點。
-
mkdir <新挂載點>
本文以新挂載點是
為例,則執行:/data1
- mkdir /data1
- 執行以下指令,手動挂載新分區。
-
mount <新分區路徑> <新挂載點>
本文以新分區路徑是
,新挂載點是/dev/xvdc2
為例,則執行:/data1
- mount /dev/xvdc2 /data1
- 執行以下指令,檢視新分區資訊。
-
df -h
傳回如下圖所示資訊則說明挂載成功,即可以檢視到資料盤。
說明:
若您希望雲伺服器在重新開機或開機時能自動挂載資料盤。執行以下指令,添加資訊。
-
- echo '/dev/xvdc2 /data1 ext3 defaults 0 0' >> /etc/fstab
執行以下指令,檢視資訊。
-
cat /etc/fstab
若傳回如下圖所示資訊,則表示添加分區資訊成功。
解決device is busy
王志強:無法umount問題(device is busy)zhuanlan.zhihu.com
原文連結:
雲硬碟 擴充分區及檔案系統(Linux) - 操作指南 - 文檔中心 - 騰訊雲cloud.tencent.com