天天看點

parted建立分區_擴充分區及檔案系統(Linux)

操作場景

雲硬碟是雲上可擴充的儲存設備,您可以在建立雲硬碟後随時擴充其大小,以增加存儲空間,同時不失去雲硬碟上原有的資料。

雲硬碟擴容 完成後,需要将擴容部分的容量劃分至已有分區内,或者将擴容部分的容量格式化成一個獨立的新分區。

注意事項

擴容檔案系統操作不慎可能影響已有資料,是以強烈建議您在操作前手動 建立快照 備份資料。

前提條件

  • 已擴容雲硬碟空間。
  • 該雲硬碟已挂載 到 Linux 雲伺服器并已建立檔案系統。
  • 已登入待擴充分區及檔案系統的 Linux 雲伺服器。

操作步驟

确認擴充方式

以 root 使用者執行以下指令,查詢雲硬碟使用的分區形式。

  • fdisk -l
  • 若結果如下兩圖所示(根據作業系統不同略有不同),則說明使用 GPT 分區形式。
parted建立分區_擴充分區及檔案系統(Linux)
parted建立分區_擴充分區及檔案系統(Linux)
    • 若結果如下圖所示(根據作業系統不同略有不同),則說明使用 MBR 分區形式。注意:

      MBR 分區形式支援的磁盤最大容量為2TB。如果您的硬碟分區為 MBR 格式,且需要擴容到超過 2TB 時,建議您重新建立并挂載一塊資料盤,使用 GPT 分區方式後将資料拷貝至新盤上。對于 Linux 作業系統而言,當磁盤分區形式選用 GPT 時,fdisk 分區工具将無法使用,需要采用 parted 工具。

parted建立分區_擴充分區及檔案系統(Linux)

分區形式操作指引說明GPT将擴容部分的容量劃分至原有分區(GPT)同樣适用于未分區直接格式化的場景。将擴容部分的容量格式化成獨立的新分區(GPT)可保持原有分區不變。MBR将擴容部分的容量劃分至原有分區(MBR)同樣适用于未分區直接格式化的場景。将擴容部分的容量格式化成獨立的新分區(MBR)可保持原有分區不變。

将擴容部分的容量劃分至原有分區(GPT)

以 root 使用者執行以下指令,确認雲硬碟的容量變化。

  • parted <磁盤路徑> print

    本文以磁盤路徑是

    /dev/vdb

    為例,則執行:
  • parted /dev/vdb print

    若在過程中提示如下圖所示資訊,請輸入

    Fix

parted建立分區_擴充分區及檔案系統(Linux)

如下圖所示,擴容後的雲硬碟大小為107GB,已有分區的大小為10.7GB。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,确認該雲硬碟是否還有分區已挂載。

  • mount | grep '<磁盤路徑>'

    本文以磁盤路徑是

    /dev/vdb

    為例,則執行:
  • mount | grep '/dev/vdb'

    如下圖所示,雲硬碟上有一個分區(vdb1)挂載在

    /data

    上。
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,解挂資料盤。

  • umount <挂載點>

    本文以挂載點是

    /data

    為例,則執行:
  • umount /data

    說明:

    請将雲硬碟上所有分區的檔案系統都解挂,。可重複執行以下指令,确認該硬碟上所有分區的檔案系統都已解挂。

  • mount | grep '/dev/vdb'
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,進入 parted 分區工具。

  • parted '<磁盤路徑>'

    本文以磁盤路徑是

    /dev/vdb

    為例,則執行:
  • parted '/dev/vdb'
  • 執行以下指令,将顯示和操縱機關變成 sector(預設為GB)。
  • unit s
  • 輸入

    print

    ,檢視分區資訊,并記錄已有分區的 Start 值。

    注意:

    删除分區并建立後,Start 值必須保持不變,否則将會引起資料丢失。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,删除原有分區。

  • rm <分區 Number>

    例如,由上圖可知雲硬碟上有一個分區,Number 為“1”,則執行:

  • rm 1

    回顯資訊如下圖所示。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,建立一個主分區。

  • mkpart primary <原分區起始扇區> 100%

    其中,100%表示此分區到磁盤的最末尾。

    例如,主分區從第2048個扇區開始(必須與删除之前的分區一緻,即 Start 值為2048s),則執行:

  • mkpart primary 2048s 100%

    如果出現如下圖所示的狀态,請輸入

    Ignore

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,檢視新分區是否已建立成功。

  • print

    傳回結果如下圖所示,即表示新分區已建立成功。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,退出 parted 工具。

  • quit
  • 執行以下指令,檢查擴容後的分區。
  • e2fsck -f <分區路徑>

    本文以建立分區是1(即分區路徑是

    /dev/vdb1

    )為例,則執行:
  • e2fsck -f /dev/vdb1

    傳回如下圖所示結果。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,對新分區上 EXT 檔案系統進行擴容操作。

  • resize2fs <分區路徑>

    本文以分區路徑是

    /dev/vdb1

    為例,則執行:
  • resize2fs /dev/vdb1
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,對新分區上 XFS 檔案系統進行擴容操作。

  • xfs_growfs <分區路徑>

    本文以分區路徑是

    /dev/vdb1

    為例,則執行:
  • xfs_growfs /dev/vdb1
  • 執行以下指令,手動挂載新分區。
  • mount <分區路徑> <挂載點>

    本文以分區路徑是

    /dev/vdb1

    ,挂載點是

    /data

    為例,則執行:
  • mount /dev/vdb1 /data
  • 執行以下指令,檢視新分區。
  • df -h

    傳回如下圖資訊說明挂載成功,即可以檢視到資料盤。

parted建立分區_擴充分區及檔案系統(Linux)

将擴容部分的容量格式化成獨立的新分區(GPT)

  1. 以 root 使用者執行以下指令, 确認雲硬碟的容量變化。
  • parted <磁盤路徑> print

    本文以磁盤路徑是

    /dev/vdb

    為例,則執行:
  • parted /dev/vdb print

    若在過程中提示如下圖所示資訊,請輸入

    Fix

parted建立分區_擴充分區及檔案系統(Linux)

如下圖所示,擴容後的雲硬碟大小為107GB,已有分區的大小為10.7GB。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,确認該雲硬碟是否還有分區已挂載。

  • mount | grep '<磁盤路徑>'

    本文以磁盤路徑是

    /dev/vdb

    為例,則執行:
  • mount | grep '/dev/vdb'

    如下圖所示,雲硬碟上有一個分區(vdb1)挂載在

    /data

    上。
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,解挂資料盤。

  • umount <挂載點>

    本文以挂載點是

    /data

    為例,則執行:
  • umount /data

    說明:

    請将雲硬碟上所有分區的檔案系統都解挂。可重複執行以下指令,确認該硬碟上所有分區的檔案系統都已解挂。

  • mount | grep '/dev/vdb'
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,進入 parted 分區工具。

  • parted '<磁盤路徑>'

    本文以磁盤路徑是

    /dev/vdb

    為例,則執行:
  • parted '/dev/vdb'
  • 執行以下指令,檢視分區資訊,并記錄已有分區的 End 值,以此值作為下一個分區的起始偏移值。
  • print
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,建立一個主分區。此分區将從已有分區的末尾開始,覆寫硬碟所有的新增空間。

  • mkpart primary start end

    本文以 End 值是10.7GB為例,執行

  • mkpart primary 10.7GB 100%
  • 執行以下指令,檢視新分區是否已建立成功。
  • print
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,退出 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
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,下載下傳工具。

  • wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py
  • 執行以下指令,使用擴容工具進行擴容。
  • python /tmp/devresize.py <硬碟路徑>

    本文以硬碟路徑是

    /dev/vdb

    且檔案系統在 vdb1 上為例,則執行:
  • python /tmp/devresize.py /dev/vdb
parted建立分區_擴充分區及檔案系統(Linux)
  • 若輸出 “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

    若傳回類似如下圖所示的資訊,說明挂載成功,即可以檢視到資料盤:

parted建立分區_擴充分區及檔案系統(Linux)
  1. 執行以下指令,檢視擴容後原分區的資料資訊,确認新增加的存儲空間是否擴容到檔案系統中。
  • ll /data

将擴容部分的容量格式化成獨立的新分區(MBR)

以 root 使用者執行以下指令,檢視已挂載的資料盤分區資訊。

  • df -h
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,檢視資料盤擴容後未分區的資訊。

  • fdisk -l
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,解挂所有已挂載的分區。

  • umount <挂載點>

    本文以挂載點是

    /data

    為例,則執行:
  • umount /data

    說明:

    請将雲硬碟上所有分區都解挂後

  • 執行以下指令,建立一個新分區。
  • fdisk <硬碟路徑>

    本文以磁盤路徑是

    /dev/xvdc

    為例,則執行:
  • fdisk /dev/xvdc

    按照界面的提示,依次輸入”p”(檢視現有分區資訊)、“n”(建立分區)、“p”(建立主分區)、“2”(建立第2個主分區),兩次回車(使用預設配置),輸入 “w”(儲存分區表),開始分區。如下圖所示:

parted建立分區_擴充分區及檔案系統(Linux)

說明:

本文以建立一個分區為例,您也可以根據實際需求建立多個分區。

執行以下指令,檢視新分區。

  • fdisk -l

    如下圖所示,表示新的分區 xvdc2 已經建立完成。

parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,格式化新分區并建立檔案系統。

  • mkfs.<fstype> <分區路徑>

    您可以自行選擇檔案系統的格式,例如 EXT2、EXT3 等。

    本文以檔案系統是 EXT3 為例,則執行:

  • mkfs.ext3 /dev/xvdc2
parted建立分區_擴充分區及檔案系統(Linux)

執行以下指令,建立新的挂載點。

  • mkdir <新挂載點>

    本文以新挂載點是

    /data1

    為例,則執行:
  • mkdir /data1
  • 執行以下指令,手動挂載新分區。
  • mount <新分區路徑> <新挂載點>

    本文以新分區路徑是

    /dev/xvdc2

    ,新挂載點是

    /data1

    為例,則執行:
  • mount /dev/xvdc2 /data1
  • 執行以下指令,檢視新分區資訊。
  • df -h

    傳回如下圖所示資訊則說明挂載成功,即可以檢視到資料盤。

parted建立分區_擴充分區及檔案系統(Linux)

說明:

若您希望雲伺服器在重新開機或開機時能自動挂載資料盤。執行以下指令,添加資訊。

    • echo '/dev/xvdc2 /data1 ext3 defaults 0 0' >> /etc/fstab

執行以下指令,檢視資訊。

  • cat /etc/fstab

    若傳回如下圖所示資訊,則表示添加分區資訊成功。

parted建立分區_擴充分區及檔案系統(Linux)

解決device is busy

王志強:無法umount問題(device is busy)​zhuanlan.zhihu.com

parted建立分區_擴充分區及檔案系統(Linux)

原文連結:

雲硬碟 擴充分區及檔案系統(Linux) - 操作指南 - 文檔中心 - 騰訊雲​cloud.tencent.com

parted建立分區_擴充分區及檔案系統(Linux)