共用方式為


擴充 Linux VM 上的虛擬硬碟

適用於:✔️ Linux VM ✔️ 彈性擴展集

本文涵蓋擴充 Linux 虛擬機的作系統(OS)磁碟和數據磁碟。 您可以 新增數據磁碟 來提供更多儲存空間,也可以擴充現有的數據磁碟。 OS 的預設虛擬硬碟大小在 Azure 中的 Linux VM 上通常是 30 GB。 本文說明如何擴充 OS 磁碟或資料磁碟。 您無法擴充等量磁碟區的大小。

OS 磁碟的最大容量為 4,095 GiB。 不過,根據預設,許多作業系統會分割 主開機記錄 (MBR)。 MBR 會將可用大小限制為 2 TiB。 如果您需要超過 2 TiB,請考慮將資料磁碟連結至資料儲存體。 如果您需要將資料儲存在 OS 磁碟上,而且需要額外的空間,請將它轉換成 GUID 磁碟分區數據表 (GPT)。

警告

請務必確定文件系統處於狀況良好的狀態,而且磁碟分區數據表類型 (GPT 或 MBR) 可以支援新的大小。 在執行磁碟擴充作業之前,請先備份您的數據。 如需詳細資訊,請參閱 Azure 備份快速入門

識別作業系統中的 Azure 資料磁碟物件

當您擴充 VM 上有數個數據磁碟的數據磁碟時,可能很難將 Azure 邏輯單元編號 (LUN) 與 Linux 裝置產生關聯。 如果OS磁碟需要擴充,則會在 Azure 入口網站中明確標示為 OS 磁碟。

首先,使用 df 命令來識別磁碟使用率、掛接點及裝置之間的關聯性。

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

例如,您可以看到 /opt/db/data 文件系統幾乎已滿,而且位於 /dev/sdd1 分割區上。 df 的輸出會顯示裝置路徑,無論該磁碟是使用 fstab 中的裝置路徑或 (慣用的) UUID 掛接。 請注意 Type 資料行,指出文件系統格式。 此格式在稍後很重要。

現在,藉由檢查 /dev/sdd 的內容,找出與 /dev/disk/azure/scsi1 相互關聯的 LUN。 下列 ls 命令的輸出顯示當您查看 Azure 入口網站時,Linux OS 中稱為 /dev/sdd 的裝置位於 LUN1

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

擴充 Azure 託管磁碟

不停機擴充

您無須解除配置 VM,即可擴充受控磁碟。 您的磁碟主機快取設定不會變更您是否可以擴充資料磁碟,而不需要解除分配 VM。

這項功能具有下列限制。

重要

這項限制不適用於進階 SSD v2 或 Ultra 磁碟。

如果標準 HDD、標準 SSD 或進階 SSD 磁碟為 4 TiB 或更少,請先釋放您的 VM 並卸載磁碟,再將其擴充至 4 TiB 以上。 如果這些其中一個磁碟類型已經大於 4 TiB,您可以對其進行擴充,而無需解除配置 VM 並中斷連結磁碟。

  • 僅支援數據磁碟。
  • 不支援共用磁碟。
  • 必須安裝並使用下列其中一個選項:
  • 在某些傳統 VM 上無法使用。 使用此 腳本 來取得支援在不停機的情況下擴充的傳統 VM 產品清單。

使用 Ultra 磁碟和進階 SSD v2 擴充

在無需停機的情況下擴充 Ultra 磁碟與 Premium SSD v2 磁碟時,會有以下額外限制:

  • 當磁碟上也同時發生資料的背景複製時,您即無法擴充該磁碟。 例如,正在從快照回填磁碟時。
  • 您可以在不需要停機的情況下,使用此公開預覽版中的 NVMe 控制器搭配 Ultra 磁碟或高級 SSD v2 磁碟來擴充 VM。 因為此版本是公開預覽版,所以您應該只使用它來測試擴充的功能,而不需要停機。 請勿在生產環境中擴充 VM。

在下列區域中,您可以擴充使用 NVMe 控制器 搭配 Ultra 磁碟或進階 SSD v2 磁碟的 VM,而不需要停機。 使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 模組:

  • 東南亞
  • 巴西南部
  • 加拿大中部
  • 德國中西部
  • 印度中部(V6 VM 目前不支援)

在下列區域中,您可以擴充使用 NVMe 控制器 搭配 Ultra 磁碟或進階 SSD v2 磁碟的 VM,而不需要停機。 只使用 Azure CLI 或 Azure PowerShell 模組。 您目前無法使用 Azure 入口網站:

  • 東亞
  • 美國中西部(V6 VM 目前不支援)

允許最多 10 分鐘,讓正確的大小反映在 Windows VM 和 Linux VM 中。 針對 Linux VM,您必須執行 Linux 重新掃描函式。 對於沒有工作負載的 Windows VM,您必須執行 Windows 重新掃描函式。 您可以立即重新掃描,但如果時間在10分鐘內,您可能需要重新掃描,才能顯示正確的大小。

擴充 Azure 受控磁碟

確定您已安裝最新的 Azure CLI,並且已使用 az login 登入 Azure 帳戶。

本文需要 Azure 中存有一個虛擬機器,且該虛擬機器至少掛載一個已備妥使用的資料磁碟。 如果您還沒有可使用的虛擬機器,請參閱建立並準備掛載有資料磁碟的虛擬機器

在下列範例中,將 myResourceGroupmyVM 等佔位元參數名稱取代為您自己的值。

重要

如果您的磁碟符合 Expand 中不需要停機的需求,您可以略過步驟 1 和 3。

不支援壓縮現有的磁碟,而且可能會導致數據遺失。

擴展磁碟空間後,請在作業系統中擴展磁碟區,以利用較大的磁碟空間。

  1. 當 VM 正在執行時,無法對虛擬硬碟執行作業。 使用 az vm deallocate 解除配置您的 VM。 下列範例會解除配置名為 myResourceGroup 資源群組中名為 myVM 的 VM:

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    必須解除配置 VM,才能擴充虛擬硬碟。 使用 az vm stop 停止 VM,不會釋放計算資源。 若要釋放計算資源,請使用 az vm deallocate

  2. 使用 az disk list 來檢視資源群組中的受控磁碟清單。 下列範例顯示名為 myResourceGroup 的資源群組中的受控磁碟清單:

    az disk list \
        --resource-group myResourceGroup  \
        --query '[*].{Name:name,size:diskSizeGB,Tier:sku.tier}' \
        --output table
    

    使用 az disk update 擴充所需的磁碟。 下列範例會將名為 myDataDisk 的受控磁碟擴充為 200 GB:

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    當您擴充受控磁碟時,會將更新的大小向上調整為最接近的受控磁碟大小。

  3. 使用 az vm create 啟動 VM。 下列範例會啟動名為 myResourceGroup 資源群組中名為 myVM 的 VM:

    az vm start --resource-group myResourceGroup --name myVM
    

擴充磁碟分割與檔案系統

您可以使用許多工具來執行分割區大小的調整。 本文其餘部分詳述的工具與某些自動化程式所使用的工具相同,例如cloud-init。 如這裡所述, growpart 套件的工具 gdisk 提供與 GPT 磁碟的通用相容性,因為某些工具 fdisk 的較舊版本不支援 GPT。

偵測變更的磁碟大小

如果您使用先前所述的程式來擴充數據磁碟而不停機,則報告磁碟大小不會變更,直到重新掃描裝置為止。 通常只有在開機過程中才會進行重新掃描。 若要視需要呼叫此重新掃描,請使用下列程式。 當您使用本文中的方法時,請注意,在此範例中,資料磁碟目前是 /dev/sda,並已從 256 GiB 調整為 512 GiB。

  1. 識別目前從 fdisk -l /dev/sda 輸出第一行所辨識的大小:

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. 1 字元插入此裝置的重新掃描檔案中。 請注意範例中指出的 sda 。 如果不同的磁碟裝置重設大小,磁碟標識碼就會變更。

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. 確認現在已辨識新的磁碟大小。

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

這篇文章的其餘部分將使用OS磁碟作為示範,說明如何在作業系統層級增加磁碟區大小。 如果展開的磁碟是數據磁碟,請使用 先前的指引來識別數據磁碟裝置。 請遵循這些指示作為指導方針。 視需要取代數據磁碟裝置(例如 /dev/sda)、磁碟分區編號、磁碟區名稱、裝入點和文件系統格式。

將所有 Linux OS 指引視為一般性建議,它可能適用於任何發行版,但通常會符合指定市集發行者的慣例。 查看 Red Hat 文件,以了解任何依據 Red Hat 或宣告 Red Hat 相容性的散發套件需求。

增加 OS 磁碟的大小

下列指示適用於背書的 Linux 發行版。

繼續進行之前,請先建立 VM 的完整備份複本,或至少擷取 OS 磁碟的快照集。

在 Ubuntu 16.x 及較新版本中,作業系統磁碟的根分割區和檔案系統會由 cloud-init 自動擴展,以使用根磁碟上所有可用的連續空間。 執行調整大小作業時,必須有少量的可用空間。 在此情況下,順序為:

  1. 如先前所述增加 OS 磁碟的大小。
  2. 重新啟動 VM,然後使用 用戶帳戶存取 VM。
  3. 確認 OS 磁碟現在會顯示增加的檔案系統大小。

如下列範例所示,已從入口網站將 OS 磁碟大小重新調整為 100 GB。 已掛載到//dev/sda1檔案系統現在顯示97 GB。

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

在沒有停機的情況下擴充傳統 VM SKU 支援

如果您使用傳統 VM SKU,它可能不支援在不停機的情況下擴充磁碟。

使用下列 PowerShell 指令碼來判斷可用的 VM SKU:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}