您可以為連接至 Linux 虛擬機器 (VM) 執行個體的磁碟建立應用程式一致的快照。一般來說,磁碟快照的品質取決於應用程式能否復原您在系統執行繁重寫入工作負載時所建立的快照。應用程式一致性快照會在備份時擷取應用程式資料的狀態,並完成所有應用程式交易,以及將所有待寫入的資料刷新至磁碟。
如要建立應用程式一致性的快照,請暫停會將資料寫入磁碟的應用程式或作業系統程序,清除磁碟緩衝區,並在建立快照前同步處理檔案系統。視應用程式而定,您可能需要執行這些步驟和其他步驟,確保所有應用程式交易都能完成並記錄在備份中。
如要為磁碟建立與應用程式一致的快照,請使用下列程序:
- 如要為應用程式一致性準備客體環境,請建立自訂的殼層指令碼,在擷取快照前後執行
- 在虛擬機器 (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
-
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.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
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.
詳情請參閱 Google Cloud 驗證說明文件中的「驗證以使用 REST」。
-
必要角色和權限
如要取得管理標準快照所需的權限,請要求管理員為您授予專案的下列 IAM 角色:
-
Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1
) -
如要連線至可以服務帳戶形式執行的 VM,請按照下列步驟操作:
服務帳戶使用者 (v1) (
roles/iam.serviceAccountUser
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色包含管理標準快照所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理標準快照,您必須具備下列權限:
-
如要建立區��磁碟的快照,請按照下列步驟操作:
-
compute.snapshots.create
-
磁碟的
compute.disks.createSnapshot
-
-
如要使用磁碟上的資料建立地區磁碟快照,請按照下列步驟操作:
-
compute.snapshots.create
-
來源 VM 的
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 上執行最新的軟體。
為促進應用程式一致性,請建立快照前置和後置殼層指令碼,在擷取快照前後執行。請在以下作業中使用前置和後置指令碼:
以下程式碼範例為預先快照指令碼。請注意開頭的 #!
字元。
#!/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
快照,這是長期備份和災難復原的最佳選項。選擇「Archive snapshot」(封存快照),即可以更低廉的成本保留資料。
- 選用步驟:輸入快照的「Description」(說明)。
- 在「Source disk」下方,選取要建立快照的現有磁碟。
在「Location」(位置) 部分,選擇快照儲存位置。
系統會自動選取快照設定中指定的預先定義或自訂預設位置。如要覆寫快照設定,將快照儲存在自訂儲存位置,請執行下列步驟:
選擇快照的儲存位置類型。
- 若選擇「Multi-regional」(多區域),費用較高但提供較高可用性。
- 選擇「Regional snapshots」(區域快照),便能以較低的費用進一步控管資料的實際位置。
- 在「Select location」(選取位置) 欄位,選擇要使用的特定區域或多區域。如要使用最接近來源磁碟的區域或多區域,請選取「Based on disk's 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
快照。 -
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
快照。 -
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」一文。