您可以為連結至 Linux 虛擬機器 (VM) 執行個體的 Persistent Disk 磁碟區建立應用程式一致性快照。一般來說,磁碟快照的品質取決於應用程式在大量寫入工作負載期間建立快照後,復原的效能。應用程式一致性快照會擷取備份時的應用程式資料狀態,包括所有已完成的應用程式交易,以及所有已排入佇列並排清至磁碟的寫入作業。
如要建立應用程式一致的快照,請先暫停將資料寫入磁碟的應用程式或作業系統程序、清除磁碟緩衝區,並同步處理檔案系統,再建立快照。視應用程式而定,您可能需要執行這些步驟和其他步驟,確保所有應用程式交易都已完成並擷取至備份中。
如要建立磁碟的應用程式一致快照,請按照下列程序操作:
- 如要準備客體環境以確保應用程式一致性,請建立自訂殼層指令碼,在擷取快照前後執行
- 在 VM 執行個體上設定快照設定。
- 建立快照時,請啟用
guest-flush選項。guest-flush選項會啟動快照前和快照後指令碼。
事前準備
- 建立 Linux VM。
- 更新訪客環境。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上範例的預計用途分頁:
控制台
使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。
gcloud
-
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:
gcloud init
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。
詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」一節。
所需角色和權限
如要取得建立應用程式一致性快照所需的權限,請要求管理員授予您專案的下列 IAM 角色:
- Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1) -
如要連線至可做為服務帳戶執行的 VM:
服務帳戶使用者 (v1) (
roles/iam.serviceAccountUser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備建立應用程式一致性快照所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
您必須具備下列權限,才能建立應用程式一致快照:
-
compute.snapshots.create專案 -
compute.disks.createSnapshot磁碟
支援的磁碟類型
您可以為連結至 Linux 執行個體的永久磁碟磁碟區,建立與應用程式一致的快照。
Hyperdisk 磁碟區不支援 guest-flush 或磁碟區陰影複製服務 (VSS)。如要為 Hyperdisk 磁碟區建立應用程式一致性快照,您必須先手動暫停應用程式,再建立快照。詳情請參閱「手動建立應用程式一致性快照」。
限制
在 Linux 上建立與應用程式一致的快照時,有下列限制:
- 應用程式一致性取決於自訂快照前/後指令碼的行為,而非快照作業本身。
- 在快照建立要求中使用
guest-flush選項時,如果指令碼傳回錯誤或達到逾時限制,系統就不會建立快照。 - Hyperdisk 磁碟區不支援
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-attached disks:以半形逗號分隔的
<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 的快照
使用 Cloud de Confiance 控制台、Google Cloud CLI 或 REST,建立啟用 guest-flush 選項的快照。這樣一來,系統就會在擷取快照前後,執行快照前和快照後指令碼。
控制台
前往 Cloud de Confiance 控制台的「Create a Snapshot」(建立快照) 頁面。
前往「建立快照」頁面- 輸入快照的「Name」(名稱)。
-
選取「快照類型」。預設為
STANDARD快照,這是長期備份和災難復原的最佳選擇。選擇「封存快照」,以更符合成本效益的方式保留資料。
- 選用:輸入快照的說明。
- 在「來源磁碟」下方,選取要建立快照的現有磁碟。
在「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 或 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.s3nsapis.fr/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.s3nsapis.fr/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.s3nsapis.fr/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 的快照排程
您可以透過快照排程,定期自動備份可用區和區域性 Persistent Disk 磁碟區,確保備份內容與應用程式一致。如要為排程快照啟用應用程式一致性快照,請在建立快照排程時使用 --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
詳情請參閱「關於磁碟快照排程」。
疑難排解
查看記錄及檢查設定,排解快照排程和建立程序的問題。
查看記錄
前往Cloud de Confiance 控制台的「Logs Explorer」頁面:
-
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots" 執行查詢並調查記錄:
檢查設定
如果執行個體上沒有快照前或快照後指令碼,可凍結檔案系統上的活動/IOPS,就不會建立快照。請確認您已按照「建立快照前置和後置指令碼」一文中的步驟操作。
如果發生指令碼錯誤或逾時,系統就不會建立快照。請參閱「準備好一致的快照」。請注意,您在設定中設定的逾時時間上限為 300 秒。請使用範例指令碼重複整個程序。
磁碟必須連接至 VM,才能在啟用
guest-flush的情況下擷取磁碟快照。如要瞭解如何建立 Linux VM 並連結磁碟,請參閱「建立 VM」。