本文說明如何在 Linux VM 上使用永久裝置命名。
如果 VM 使用 Linux 作業系統,執行下列程序後,裝置名稱 (例如 /dev/sda
) 可能會變更:
- 啟動及停止 VM
- 卸離及重新連接磁碟
- 變更機器類型
這是因為 VM 啟動或裝置連線後,系統會從可用範圍指派裝置名稱。卸離裝置或停止 VM 即可釋出裝置名稱。重新附加裝置或重新啟動 VM 時,系統會從可用範圍指派新的裝置名稱。Linux 核心無法保證裝置在重新啟動後會依序啟動。
如果應用程式或指令碼依附於原始裝置名稱,變更裝置名稱可能會導致這些項目無法正常運作,或導致 VM 在重新啟動後無法開機。
建議您在參照 Linux VM 上的磁碟和磁碟分割區時,使用永久裝置命名,以免發生這個問題。您也可以使用符號連結。
事前準備
- 查看 Linux 作業系統的裝置管理功能:
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
nvme0n1
- Persistent Disknvme0n1p1
nvme0n1p2
nvme0n2
- Hyperdisknvme0n2p1
nvme0n2p2
nvme1n1
- 第一個本機 SSDnvme2n1
- 第二個本機 SSD- 使用標籤。 如要使用這個選項,檔案系統必須支援標籤,且您已在磁碟分區中加入標籤。
- 使用分區或磁碟 UUID。 使用分區表建立磁碟時,系統會產生 UUID,且每個分區的 UUID 都不相同。
- 使用 Persistent Disk 或 Google Cloud Hyperdisk 的永久磁碟 ID (
/dev/disk/by-id
),或是以磁碟資源名稱為依據的符號連結。 - 連線至 VM。
如果不知道磁碟的裝置名稱,可以使用符號連結找出磁碟裝置名稱。
ls -l /dev/disk/by-id/google-*
輸出結果會與下列內容相似:
lrwxrwxrwx 1 root root 9 Oct 23 15:58 /dev/disk/by-id/google-my-vm -> ../../sda lrwxrwxrwx 1 root root 10 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Oct 23 15:58 /dev/disk/by-id/google-my-vm-app-data -> ../../nvme0n1
執行下列其中一個指令,擷取磁碟分割區的 UUID:
blkid
sudo blkid -s UUID
輸出結果會與下列內容相似:
/dev/sda1: UUID="4f570f2d-fffe-4c7d-8d8f-af347af7612a" /dev/sda15: UUID="E0B2-DFAF" /dev/nvme0n1: UUID="9e617251-6a92-45ff-ba40-700a9bdeb03e"
ls -l
sudo ls -l /dev/disk/by-uuid/
輸出結果會與下列內容相似:
lrwxrwxrwx 1 root root 10 Sep 22 18:12 4f570f2d-fffe-4c7d-8d8f-af347af7612a -> ../../sda1 lrwxrwxrwx 1 root root 13 Sep 22 18:15 9e617251-6a92-45ff-ba40-700a9bdeb03e -> ../../nvme0n1 lrwxrwxrwx 1 root root 11 Sep 22 18:12 E0B2-DFAF -> ../../sda15
在
/etc/fstab
檔案中新增裝置 UUID 的項目。UUID=9e617251-6a92-45ff-ba40-700a9bdeb03e /data ext4 defaults 0 0
在這個範例中,
/data
是掛接點,ext4
則是檔案系統類型。執行
mount -av
,確認裝置已正確掛接。sudo mount -av
如果裝置成功掛接,輸出內容會類似以下內容:
/ : ignored /boot/efi : already mounted mount: /data does not contain SELinux labels. You just mounted an file system that supports labels which does not contain labels, onto an SELinux box. It is likely that confine applications will generate AVC messages and not be allowed access to this filesystem. For more details see restorecon(8) and mount(8). /data : successfully mounted
- 連線至 VM。
執行下列指令,擷取磁碟上的 ID:
sudo ls -lh /dev/disk/by-id/google-*
輸出結果會與下列內容相似:
lrwxrwxrwx. 1 root root 9 May 16 17:34 google-disk-2 -> ../../sdb lrwxrwxrwx. 1 root root 9 May 16 09:09 google-persistent-disk-0 -> ../../sda lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part1 -> ../../sda1 lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part2 -> ../../sda2
如果是
NVME
磁碟,輸出內容會與下列內容類似:lrwxrwxrwx 1 root root 13 Jun 1 10:27 google-disk-3 -> ../../nvme0n2 lrwxrwxrwx 1 root root 13 Jun 1 10:25 google-t2a -> ../../nvme0n1 lrwxrwxrwx 1 root root 15 Jun 1 10:25 google-t2a-part1 -> ../../nvme0n1p1 lrwxrwxrwx 1 root root 16 Jun 1 10:25 google-t2a-part15 -> ../../nvme0n1p15
將符號連結新增至
/etc/fstab
檔案。/dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
執行
mount -av
,確認裝置已正確掛接。sudo mount -av
如果裝置成功掛接,輸出內容會類似以下內容:
/ : ignored /boot/efi : already mounted mount: /data does not contain SELinux labels. You just mounted an file system that supports labels which does not contain labels, onto an SELinux box. It is likely that confine applications will generate AVC messages and not be allowed access to this file system. For more details see restorecon(8) and mount(8). /data : successfully mounted
Linux VM 上的裝置命名
附加至 VM 的磁碟 Linux 裝置名稱,取決於您建立磁碟時選擇的介面。使用
lsblk
作業系統指令查看磁碟裝置時,系統會顯示透過 NVMe 介面連結的磁碟前置字元nvme
,以及透過 SCSI 介面連結的磁碟前置字元sd
。磁碟編號或 NVMe 控制器順序無法預測,且 VM 重新啟動後也不會保持一致。首次開機時,永久磁碟可能是
nvme0n1
(或 SCSI 的sda
)。第二次啟動時,相同永久磁碟的裝置名稱可能是nvme2n1
或nvme0n3
(如果是 SCSI,則為sdc
)。存取附加磁碟時,請改用
/dev/disk/by-id/
中建立的符號連結。這些名稱會在重新啟動後保留。 如要進一步瞭解符號連結,請參閱連結至 VM 的磁碟符號連結。SCSI 裝置名稱
SCSI 連接的磁碟裝置格式為
sda
,適用於第一個連接的磁碟。磁碟分割區會顯示為sda1
。每個額外磁碟都會使用連續字母,例如sdb
和sdc
。達到sdz
後,後續新增的磁碟名稱會是sdaa
、sdab
和sdac
等,最多可達sddx
。NVMe 裝置名稱
Linux 作業系統中 NVMe 連接的磁碟裝置格式為
nvmenumbernnamespace
。其中number
代表 NVMe 磁碟控制器編號,而 namespace 是由 NVMe 磁碟控制器指派的 NVMe 命名空間 ID。如果是分區,裝置名稱會附加 pn,其中 n 是從 1 開始的數字,表示第 n 個分區。控制器編號從
0
開始,附加至運算執行個體的單一 NVMe 磁碟裝置名稱為nvme0n1
。大多數機器類型都使用單一 NVMe 磁碟控制器。NVMe 裝置名稱隨後會是nvme0n1
、nvme0n2
、nvme0n3
等。連接至第三代機器系列或更新版本執行個體的本機 SSD 磁碟,每個磁碟都有個別的 NVMe 控制器。在這些 VM 上,本機 SSD NVMe 連接的裝置名稱看起來會像
nvme0n1
、nvme1n1
和nvme2n1
。可連接的本機 SSD 數量取決於 VM 的機器類型。以第三代機器系列或更新版本為基礎的運算執行個體,會將 NVMe 用於永久磁碟、Google Cloud Hyperdisk 和本機 SSD 磁碟。每個 VM 都有 1 個 NVMe 控制器用於永久磁碟和 Hyperdisk,以及 1 個 NVMe 控制器用於每個本機 SSD 磁碟。永久磁碟和 Hyperdisk NVMe 控制器會為所有附加的磁碟提供單一 NVMe 命名空間。因此,第 3 代機器系列執行個體 (含一個永久磁碟和一個 Hyperdisk,各含 2 個磁碟分區) 和 2 個未格式化的本機 SSD 磁碟,會使用下列裝置名稱:
使用永久裝置命名
如要設定永久裝置名稱,請在
fstab
檔案中為磁碟裝置指派掛接點名稱。您可以透過三種方式設定永久裝置名稱。建議您使用 Linux VM 的分割區 UUID 或符號連結。
分區 UUID
如要找出磁碟的 UUID,請執行下列步驟:
永久磁碟 ID
如要使用永久磁碟 ID 或符號連結找出磁碟裝置名稱,請完成下列步驟:
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-10 (世界標準時間)。
-