在 Linux VM 中新增磁碟
適用於:✔️ Linux VM ✔️ 彈性擴展集
本文說明如何將持續性磁碟連結到您的 VM,以便您保留資料 - 即使您的 VM 會由於維護或調整大小而重新佈建。
將新磁碟附加至 VM
如果您想要在 VM 上新增空的新資料磁碟,請使用 az vm disk attach 命令並搭配 --new
參數。 如果您的 VM 位於可用性區域,系統會自動在與 VM 相同的區域中建立磁碟。 如需詳細資訊,請參閱可用性區域概觀。 下列範例會建立名為 myDataDisk 且大小為 50 GB 的磁碟:
az vm disk attach \
-g myResourceGroup \
--vm-name myVM \
--name myDataDisk \
--new \
--size-gb 50
延遲較低
在選取區域中,磁碟連結延遲已減少,因此您會看到最多 15% 的改善。 無論您是否在 VM 之間已規劃或未規劃容錯移轉、調整工作負載,或執行大規模具狀態工作負載 (例如 Azure Kubernetes Service),這將會非常實用。 不過,這項改善僅限於明確的磁碟連結命令 az vm disk attach
。 如果您呼叫可能會隱含執行連結的命令 (例如 az vm update
),則不會看到效能改善。 您無須採取呼叫明確連結命令以外的動作,即可看到這項改進。
較低延遲目前在每個公用區域都可以使用,但下列區域除外:
- 加拿大中部
- 美國中部
- 美國東部
- 美國東部 2
- 美國中南部
- 美國西部 2
- 德國北部
- Jio 印度西部
- 北歐
- 西歐
連結現有的磁碟
若要連結現有磁碟,請找出磁碟識別碼,並將識別碼傳遞到 az vm disk attach 命令。 下列範例會查詢 myResourceGroup 中名為 myDataDisk 的磁碟,然後將其連結至名為 myVM 的 VM:
diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)
az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId
格式化並掛接磁碟
若要分割、格式化和掛接新磁碟以供 Linux VM 使用,請使用 SSH 登入您的 VM。 如需詳細資訊,請參閱如何在 Azure 上搭配使用 SSH 與 Linux。 下列的範例連線至了一個公用 IP 位址為 10.123.123.25,使用者名稱為 azureuser 的 VM:
ssh azureuser@10.123.123.25
尋找磁碟
連線至 VM 之後,請尋找磁碟。 在此範例中,我們會使用 lsblk
來列出磁碟。
lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
輸出類似於下列範例:
sda 0:0:0:0 30G
├─sda1 29.9G /
├─sda14 4M
└─sda15 106M /boot/efi
sdb 1:0:1:0 14G
└─sdb1 14G /mnt
sdc 3:0:0:0 50G
在此處,sdc
是我們所要的磁碟,因為該磁碟具有 50G。 如果您新增多個磁碟,而且無法僅依照大小來確認各個磁碟,您可以移至入口網站中的 VM 頁面,選取 [磁碟],然後在 [資料磁碟] 下,檢查磁碟的 LUN 編號。 將入口網站中的 LUN 編號,與輸出中 HTCL 部分的最後一個號碼 (即為 LUN) 相互比較。 另一個選項是列出 /dev/disk/azure/scsi1
目錄的內容:
ls -l /dev/disk/azure/scsi1
輸出內容應會類似於下列範例:
lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc
將磁碟格式化
使用 parted
將磁碟格式化,如果磁碟大小為 2 TiB 或更大,您就必須使用 GPT 資料分割,如果其小於 2TiB,則可以使用 MBR 或 GPT 資料分割。
注意
建議您使用可供您的散發版本使用的最新版本 parted
。
若磁碟大小為 2 TiB 或以上,您必須使用 GTP 分割。 如果磁碟大小低於 2 TiB,您就能使用 MBR 或 GPT 磁碟分割。
下列範例在 /dev/sdc
上使用了 parted
,也就是第一個資料磁碟在大部分 VM 上的位置。 以磁碟的正確選項取代 sdc
。 我們也會使用 XFS 檔案系統將它格式化。
sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1
使用 partprobe
公用程式以確保核心能夠感知新的磁碟分割和檔案系統。 如果無法使用 partprobe
,可能會導致 blkid 或 lsblk 命令不會立即傳回新檔案系統的 UUID。
裝載磁碟
現在,使用 mkdir
建立用來掛接檔案系統的目錄。 下列範例會在 /datadrive
下建立目錄:
sudo mkdir /datadrive
然後,使用 mount
掛接檔案系統。 下列範例會將 /dev/sdc1
磁碟分割掛接至 /datadrive
掛接點:
sudo mount /dev/sdc1 /datadrive
保存掛接
為了確保重新開機之後自動重新掛接磁碟機,必須將磁碟機新增至 /etc/fstab
檔案。 此外,強烈建議在 /etc/fstab
中使用 UUID (通用唯一識別碼) 來參考磁碟機,而非僅使用裝置名稱 (例如 /dev/sdc1)。 如果作業系統在開機期間偵測到磁碟錯誤,使用 UUID 可避免將不正確的磁碟掛接到指定的位置。 其餘的資料磁碟則會被指派這些相同的裝置識別碼。 若要尋找新磁碟機的 UUID,請使用 blkid
公用程式:
sudo blkid
輸出會看似像以下範例:
/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"
注意
不當編輯 /etc/fstab
檔案會導致系統無法開機。 如果不確定,請參閱散發套件的文件,以取得如何適當編輯此檔案的相關資訊。 在編輯之前,也建議先備份 /etc/fstab
檔案。
接下來,在文字編輯器中開啟 /etc/fstab
檔案。 使用先前步驟中所建立 /dev/sdc1
裝置的 UUID 值以及 /datadrive
的掛接點,在檔案結尾新增一行。 使用本文的範例,新行會如下所示:
UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,nofail 1 2
完成檔案編輯時,請儲存並關閉編輯器。
或者,您也可以執行下列命令,將磁碟新增至 /etc/fstab
檔案:
echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,nofail 1 2" >> /etc/fstab
注意
稍後移除資料磁碟而不編輯 fstab,可能會造成 VM 無法開機。 大多數的發行版本會提供 nofail 和 (或) nobootwait fstab 選項。 即使磁碟在開機時無法掛接,這些選項也能讓系統開機。 請查閱散發套件的文件,以取得這些參數的相關資訊。
Nofail 選項可確保即使檔案系統已損毀或磁碟在開機時並不存在,仍然會啟動 VM。 若不使用此選項,您可能會遇到因為 FSTAB 錯誤所以無法 SSH 到 Linux VM 中所述的行為
如果修改 fstab 導致開機失敗,則您可以使用 Azure VM 序列主控台以進行 VM 的控制台存取。 如需更多詳細資料,您可以在序列主控台文件中取得。
Azure 中 Linux 的 TRIM/UNMAP 支援
有些 Linux 核心會支援 TRIM/UNMAP 作業以捨棄磁碟上未使用的區塊。 此功能主要用於通知 Azure 已刪除的頁面已不再有效且可予以捨棄。 此功能可節省根據已取用儲存體數目計費的磁碟費用,例如非受控標準磁碟和磁碟快照集。
有兩種方式可在 Linux VM 中啟用 TRIM 支援。 像往常一樣,請參閱您的散發套件以了解建議的方法︰
在
/etc/fstab
中使用discard
掛接選項,例如:UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,discard 1 2
在某些情況下,
discard
選項可能會影響效能。 或者,您也可以從命令列手動執行fstrim
命令,或將它新增到 crontab 來定期執行︰
疑難排解
將資料磁碟新增到 Linux VM 時,如果 LUN 0 沒有磁碟,可能會發生錯誤。 如果您是藉由使用 az vm disk attach -new
命令並指定 LUN (--lun
) 來手動新增磁碟,而不是讓 Azure 平台判斷適當的 LUN,則請注意,LUN 0 已經有磁碟或將會有磁碟。
請思考一下以下範例,此範例顯示來自 lsscsi
之輸出的程式碼片段:
[5:0:0:0] disk Msft Virtual Disk 1.0 /dev/sdc
[5:0:0:1] disk Msft Virtual Disk 1.0 /dev/sdd
兩個資料磁碟存在於 LUN 0 和 LUN 1 (lsscsi
輸出中的第 1 欄輸出了詳細資料 [host:channel:target:lun]
)。 兩個磁碟應該都要是可從 VM 內存取的磁碟。 如果您已手動指定要在 LUN 1 新增第一個磁碟及在 LUN 2 新增第二個磁碟,則從您的 VM 內可能無法正確看見這些磁碟。
注意
在這些範例中,Azure host
值為 5,但這可能會依據您選取的儲存體類型而有所不同。
此磁碟行為不是 Azure 問題,而是 Linux 核心遵循 SCSI 規格的方式。 當 Linux 核心掃描 SCSI 匯流排是否有已連接的裝置時,必須在 LUN 0 找到裝置,系統才能繼續掃描是否有其他裝置。 如以上所述,因此︰
- 在新增資料磁碟之後,請檢閱
lsscsi
的輸出,以確認 LUN 0 有磁碟。 - 如果磁碟在 VM 內未正確顯示,請確認 LUN 0 有磁碟。
下一步
- 若要確保您的 Linux VM 已正確設定,請檢閱 最佳化您的 Linux 機器效能 建議。
- 新增更多磁碟以擴充儲存體容量,並設定 RAID 以提升效能。