您可以為連結至 Linux 虛擬機器 (VM) 執行個體的磁碟建立應用程式一致性快照。一般來說,磁碟快照的品質取決於應用程式能否使用您在系統執行繁重寫入工作負載時所建立的快照進行復原。應用程式一致性快照會擷取備份時的應用程式資料狀態,包括所有已完成的應用程式交易,以及所有已排清至磁碟的待處理寫入作業。
如要建立應用程式一致性快照,請先暫停會將資料寫入磁碟的應用程式或作業系統程序、清除磁碟緩衝區,並同步處理檔案系統,再建立快照。視應用程式而定,您可能需要完成這些和其他步驟,確保所有應用程式交易都已完成,並擷取到備份中。
如要建立磁碟的應用程式一致性快照,請按照下列程序操作:
- 如要準備客體環境以確保應用程式一致性,請建立自訂 Shell 指令碼,在擷取快照前後執行
- 在虛擬機器 (VM) 執行個體上設定快照設定。
- 建立快照時,請啟用
guest-flush
選項。guest-flush
選項會啟動快照前後指令碼。
事前準備
- 建立 Linux VM。
- 更新訪客環境。
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 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
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
必要角色和權限
如要取得管理標準快照所需的權限,請要求管理員授予您專案的下列 IAM 角色:
-
Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1
) -
如要連線至可做為服務帳戶執行的 VM:
服務帳戶使用者 (v1) (
roles/iam.serviceAccountUser
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色具備管理標準快照所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理標準快照,必須具備下列權限:
-
如要建立區域磁碟的快照,請按照下列步驟操作:
-
專案的
compute.snapshots.create
-
compute.disks.createSnapshot
-
專案的
-
如要使用磁碟上的資料建立地區磁碟的快照,請按照下列步驟操作:
-
專案的
compute.snapshots.create
-
compute.instances.useReadOnly
-
compute.disks.createSnapshot
-
專案的
-
如要從副本復原檢查點建立地區磁碟的快照,請按照下列步驟操作:
-
專案的
compute.snapshots.create
-
compute.disks.createSnapshot
-
專案的
-
如要建立快照排程:
compute.resourcePolicies.create
-
如要將快照排程附加至磁碟:
-
compute.disks.addResourcePolicies
-
compute.resourcePolicies.use
-
-
如要刪除快照:
-
compute.snapshots.delete
-
專案的
compute.snapshots.list
-
限制
在 Linux 上建立應用程式一致性快照時,有下列限制:
- 只有自訂快照前置和後置指令碼的行為,才能確保應用程式一致性,快照作業本身無法保證。
- 在快照建立要求中使用
guest-flush
選項時,如果指令碼傳回錯誤或達到逾時限制,系統就不會建立快照。
建立快照前後指令碼
繼續操作前,請更新訪客環境,確保 Linux VM 執行的是最新軟體。
為確保應用程式一致性,請建立快照前後的 Shell 指令碼,在擷取快照前後執行。使用前置和後置指令碼執行下列作業:
以下程式碼範例顯示快照前指令碼。請注意開頭的
#!
字元。#!/bin/bash sudo fsfreeze -f [example-disk-location]
以下程式碼範例顯示後續快照指令碼。請注意開頭的
#!
字元。#!/bin/bash sudo fsfreeze -u [example-disk-location]
您必須將指令碼儲存在 VM 的
/etc/google/snapshots/
目錄中。前置指令碼的完整路徑必須為/etc/google/snapshots/pre.sh
,後置指令碼的完整路徑必須為/etc/google/snapshots/post.sh
。在指令碼中參照特定磁碟
傳遞至快照前和快照後指令碼的第一個引數,是您要建立快照的磁碟清單。您可以在指令碼中使用這個引數進行各種檢查。舉例來說,如果 VM 附加了多個磁碟,但您只在快照要求中指定一個磁碟,您可以檢查快照是為哪個磁碟建立。
引數格式如下:
- SCSI 連接的磁碟:以半形逗號分隔的
<target/lun>
配對清單。 - NVME 連接的磁碟:以半形逗號分隔的
<nvme:namespace>
配對清單。
舉例來說,SCSI 連接的開機磁碟可能會顯示為
1/0
,而連結至 VM 的額外磁碟可能會顯示為2/0
。編輯訪客環境設定檔
如要設定與應用程式一致的快照,請更新 VM 上的特定設定檔。
開啟或建立訪客環境設定檔。
edit /etc/default/instance_configs.cfg
在設定檔中新增下列區段,然後儲存變更並結束編輯器。
[Snapshots] enabled = ENABLED timeout_in_seconds = TIMEOUT_SECONDS
更改下列內容:
ENABLED
:設為true
即可啟用應用程式一致的快照功能。預設值為false
。TIMEOUT_SECONDS
:前置或後置快照指令碼在逾時前可執行的秒數。整數值必須介於 0 至 300 之間。預設值為60
。
重新啟動 Guest Agent,即可使用新的設定。
$ sudo systemctl restart google-guest-agent.service
建立啟用
guest-flush
的快照使用 Google Cloud 控制台、Google Cloud CLI 或 REST,建立啟用
guest-flush
選項的快照。這會開始執行快照前後的快照前和快照後指令碼。主控台
前往 Google Cloud 控制台的「Create a Snapshot」(建立快照) 頁面。
前往「Create a Snapshot」(建立快照) 頁面- 輸入快照的「Name」(名稱)。
-
選取「快照類型」。預設為
STANDARD
快照,這是長期備份和災難復原的最佳選擇。選擇「封存快照」,即可更有效率地保留資料。
- 選用:輸入快照的「Description」(說明)。
- 在「Source disk」(來源磁碟) 底下,選取要建立快照的現有磁碟。
在「Location」(位置) 部分,選擇快照儲存位置。
系統會自動選取快照設定中指定的預先定義或自訂預設位置。如要覆寫快照設定,將快照儲存在自訂儲存位置,請執行下列步驟:
- 勾選「啟用與應用程式一致的快照」選項。
- 按一下 [Create] (建立) 以建立快照。
gcloud
您可以在快照設定定義的儲存位置政策中建立快照,也可以使用所選的替代儲存位置。詳情請參閱選擇快照儲存位置。
如要在快照設定中指定的預先定義或自訂預設位置建立快照,請使用
gcloud compute snapshots create
指令。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --guest-flush
-
或者,如要覆寫快照設定,在自訂儲存位置建立快照,請加入
--storage-location
標記來指示快照的儲存位置。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --storage-location=STORAGE_LOCATION \ --guest-flush
-
(預先發布版) 如要在允許的區域中建立區域範圍快照,請加入
--region
標記,指出快照的建立位置。gcloud beta compute snapshots create SNAPSHOT_NAME \ --region=SNAPSHOT_SCOPE_REGION --source-disk=SOURCE_DISK_NAME \ --source-disk-zone=SOURCE_ZONE \ --snapshot-type=SNAPSHOT_TYPE
更改下列內容:
- SNAPSHOT_NAME:快照的名稱。
- SOURCE_ZONE:來源磁碟的可用區。
- SOURCE_DISK_NAME:要建立快照的磁碟區名稱。
- SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。
如果未指定快照類型,系統會建立
STANDARD
快照。 -
STORAGE_LOCATION:選用:如果是全域範圍的快照,則為您要儲存快照的 Cloud Storage 多地區或 Cloud Storage 地區。您只能指定一個儲存位置。
只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用
--storage-location
參數。 -
SNAPSHOT_SCOPE_REGION:選填:如果是區域範圍快照,則為快照的範圍所屬區域。如果加入這個參數,就無法使用
--storage-location
參數。系統會自動將 STORAGE_LOCATION 設為 SNAPSHOT_SCOPE_REGION。
REST
您可以在快照設定定義的儲存位置政策中建立快照,也可以使用所選的替代儲存位置。詳情請參閱選擇快照儲存位置。
-
如要在快照設定中指定的預先定義或自訂預設位置建立快照,請對
snapshots.insert
方法發出POST
要求:POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "guestFlush": true, }
-
或者,如要覆寫快照設定,在自訂儲存位置建立快照,請對
snapshots.insert
方法發出POST
要求,並在要求中加入storageLocations
屬性:POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "storageLocations": [ "STORAGE_LOCATION" ], "guestFlush": true, }
-
(預覽版) 如要在允許的區域中建立區域範圍快照,請對
snapshots.insert
方法發出POST
要求,並定義建立區域:POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE" }
更改下列內容:
- DESTINATION_PROJECT_ID:要在其中建立快照的專案 ID。
- SNAPSHOT_NAME:快照的名稱。
- SOURCE_PROJECT_ID:來源磁碟專案的 ID。
- SOURCE_ZONE:來源磁碟的可用區。
- SOURCE_DISK_NAME:要建立快照的磁碟名稱。
- SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。
如果未指定快照類型,系統會建立
STANDARD
快照。 -
STORAGE_LOCATION:選用:如果是全域範圍的快照,則為您要儲存快照的 Cloud Storage 多地區或 Cloud Storage 地區。您只能指定一個儲存位置。
只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用
storageLocations
參數。 SNAPSHOT_SCOPE_REGION:選填:如果是區域範圍快照,快照的範圍所屬區域。如果加入這個參數,就無法使用
storageLocations
參數。系統會自動將 STORAGE_LOCATION 設為 SNAPSHOT_SCOPE_REGION。
建立啟用
guest-flush
的快照排程您可以使用排程快照,自動定期備份可用區和區域性永久磁碟,以及 Google Cloud Hyperdisk。如要排定應用程式一致性快照的備份作業,請在建立快照排程時使用
--guest-flush
選項,這樣系統就會在每次排定的快照作業前後執行快照前/後指令碼。舉例來說,設定客層環境設定檔並建立自訂指令碼後,下列指令會每小時建立應用程式一致性快照:
gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \ --description "MY HOURLY SNAPSHOT SCHEDULE" \ --start-time 22:00 \ --hourly-schedule 4 \ --guest-flush \ --max-retention-days SNAPSHOT_RETENTION_AGE
詳情請參閱「關於磁碟快照排程」一文。
疑難排解
查看記錄並檢查設定,排解快照排程和建立程序的問題。
查看記錄
前往Google Cloud 控制台的「Logs Explorer」頁面:
在記錄查詢窗格中貼上下列查詢:
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots"
執行查詢並調查記錄:
檢查設定
如果系統在執行個體上找不到任何快照前/後指令碼,無法凍結檔案系統上的活動/IOPS,就不會建立快照。 請確認您已按照「建立快照前置和後置指令碼」一文中的步驟操作。
如果發生指令碼錯誤或逾時,系統就不會建立快照。請參閱「讓快照具有一致性的準備作業」。請注意,您在設定中設定的逾時時間上限為 300 秒。請使用範例指令碼,嘗試重複整個程序。
磁碟必須附加至 VM,才能擷取啟用
guest-flush
的磁碟快照。如要瞭解如何建立 Linux VM 並連結磁碟,請參閱「建立 VM」。
後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-31 (世界標準時間)。
-