從 Azure 虛擬機器備份復原檔案
警告
本文參考 CentOS,這是處於終止服務 (EOL) 狀態的 Linux 發行版。 請據此考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導。
Azure 備份可從 Azure 虛擬機器 (VM) 備份 (又稱復原點) 還原 Azure VM 和磁碟。 本文說明如何從 Azure VM 備份來復原檔案和資料夾。 只有使用 Resource Manager 模型部署且受復原服務保存庫保護的 Azure VM,才能還原檔案和資料夾。
注意
這項功能適用於使用 Resource Manager 模型部署且受復原服務保存庫保護的 Azure VM。 不支援從加密 VM 備份復原檔案。
步驟 1:產生並下載指令碼以瀏覽及復原檔案
若要從復原點還原檔案或資料夾,請移至虛擬機器,然後執行下列步驟:
登入 Azure 入口網站,選取左側窗格中的 [虛擬機器]。 從虛擬機器的清單中,選取虛擬機器以開啟該虛擬機器的儀表板。
在虛擬機器的功能表中,選取 [備份] 以開啟 [備份] 儀表板。
在 [備份] 儀表板功能表中,選取 [檔案復原]。
32
[檔案復原] 功能表隨即開啟。
重要
使用者應注意這項功能的效能限制。 如同上述分頁的 [註腳] 區段中所述,應在復原的總大小未超過 10 GB 時使用這項功能。 預期的資料傳輸速度約為每小時 1 GB。
從 [選取復原點] 下拉式選單中,選取包含您所需檔案的復原點。 依預設會選取最新的復原點。
選取 [下載可執行檔] (適用於 Windows Azure VM) 或 [下載指令碼] (適用於 Linux Azure VM,會產生 Python 指令碼),下載用於從復原點複製檔案的軟體。
Azure 會將可執行檔或指令碼下載到本機電腦。
若要以系統管理員的身分執行可執行檔或指令碼,建議先將下載的檔案儲存到電腦上。
可執行檔或指令碼受到密碼保護,因此需要密碼。 在 [檔案復原] 功能表上,選取 [複製] 按鈕以將密碼載入記憶體中。
步驟 2:確認機器符合需求再執行指令碼
成功下載指令碼之後,請確認您有合適的機器可以執行此指令碼。 您打算執行指令碼的 VM 不應有下列任一不支援的設定。 如有,請選擇符合需求的其他機器。
動態磁碟
您無法在具下列特性的 VM 上,執行可執行檔指令碼:請選擇替代機器
- 合併多個磁碟的磁碟區 (合併或等量磁碟區)。
- 動態磁碟上的容錯磁碟區 (鏡像與 RAID-5 磁碟區)。
Windows 儲存空間
如果備份的 VM 有 Windows 儲存空間,您就無法在相同的備份 VM 上執行下載的可執行檔。 選擇替代機器。
具有大型磁碟的虛擬機器備份
如果備份的機器有大量磁碟 (>16) 或大型磁碟 (每個 > 4 TB),不建議您在相同機器上執行指令碼以進行還原,因這會對 VM 造成顯著影響。 相反地,建議設定單獨只針對檔案復原的 VM (Azure VM D2v3 VM),然後在不需要時關閉。
請參閱使用大型磁碟從備份 VM 還原檔案的需求:
Windows OS
Linux OS
選擇要執行 ILR 指令碼的正確機器後,請確保機器符合作業系統需求和存取需求。
步驟 3:成功執行指令碼的作業系統需求
您要執行所下載指令碼的 VM 必須符合下列需求。
若為 Windows OS
下表顯示伺服器和電腦作業系統之間的相容性。 復原檔案時,無法將檔案還原至之前或之後的作業系統版本。 例如,您無法將 Windows Server 2016 虛擬機器的檔案還原至 Windows Server 2012 或 Windows 8 電腦。 您可以將 VM 的檔案還原至相同的伺服器作業系統,或相容的用戶端作業系統。
伺服器作業系統 | 相容的用戶端作業系統 |
---|---|
Windows Server 2022 | Windows 11 和 Windows 10 |
Windows Server 2019 | Windows 10 |
Windows Server 2016 | Windows 10 |
Windows Server 2012 R2 | Windows 8.1 |
Windows Server 2012 | Windows 8 |
Windows Server 2008 R2 | Windows 7 |
若為 Linux 作業系統
在 Linux 中,用來還原檔案的電腦作業系統必須支援受保護虛擬機器的檔案系統。 選取要執行指令碼的電腦時,請確認該電腦具有相容的作業系統,且使用下表中列出的其中一個版本:
Linux 作業系統 | 版本 |
---|---|
Ubuntu | 12.04 和更新版本 |
CentOS | 6.5 和更新版本 |
RHEL | 6.7 和更新版本 |
Debian | 7 和更新版本 |
Oracle Linux | 6.4 和更新版本 |
SLES | 12 以上 (含) |
openSUSE | 42.2 和更新版本 |
警告
CentOS 是生命周期的終結。 深入了解。
其他元件
指令碼也需要 Python 和 Bash 元件,才能夠執行並安全地連線至復原點。
元件 | 版本 | OS 類型 |
---|---|---|
bash | 4 和更新版本 | Linux |
Python | 2.6.6 和更新版本 | Linux |
.NET | 4.6.2 和更新版本 | Windows |
TLS | 應支援 1.2 | Linux/ Windows |
此外,請確定您有執行 ILR 指令碼的合適機器,且機器符合存取需求。
步驟 4:成功執行指令碼的存取需求
如果您在存取受限的電腦上執行指令碼,請確定您有權存取:
- 連接埠 443 (輸出) 上 NSG 中的
download.microsoft.com
或AzureFrontDoor.FirstParty
服務標籤 - 連接埠 3260 (輸出) 上的復原服務 URL (GEO-NAME 是指復原服務保存庫所在的區域)
https://pod01-rec2.GEO-NAME.backup.windowsazure.com
(適用於 Azure 公用區域) 或 NSG 中的AzureBackup
服務標籤https://pod01-rec2.GEO-NAME.backup.windowsazure.cn
(適用於由 21Vianet 運作的 Microsoft Azure) 或 NSG 中的AzureBackup
服務標籤https://pod01-rec2.GEO-NAME.backup.windowsazure.us
(適用於 Azure 美國政府) 或 NSG 中的AzureBackup
服務標籤https://pod01-rec2.GEO-NAME.backup.windowsazure.de
(適用於 Azure 德國) 或 NSG 中的AzureBackup
服務標籤
- 連接埠 53 (輸出) 上的公用 DNS 解析
注意
Proxy 可能不支援 iSCSI 通訊協定,或不授與連接埠 3260 的存取權。 因此,強烈建議在如上方所要求可直接存取的機器上執行此指令碼,而不是在會重新導向至 Proxy 的機器。
注意
如果備份的 VM 是 Windows,產生的密碼中會提及地區名稱。
例如,如果產生的密碼是 ContosoVM_wcus_GUID,則地理名稱為 wcus,而 URL 會是: <https://pod01-rec2.wcus.backup.windowsazure.com
>
如果備份的 VM 是 Linux,則您在上方步驟 1 中下載的指令檔,在檔案名稱中會有地區名稱。 以該地區名稱填入 URL。 下載的指令碼名稱開頭為:'VMname'_'geoname'_'GUID'。
因此,假設指令檔名稱為 ContosoVM_wcus_12345678,地區名稱為 wcus,則 URL 會是:<https://pod01-rec2.wcus.backup.windowsazure.com
>
若為 Linux,指令碼需要 'open-iscsi' 和 'lshw' 元件來連接到復原點。 如果元件不存在於執行指令碼所在的電腦上,則指令碼會要求安裝元件的權限。 同意安裝必要的元件。
需有 download.microsoft.com
的存取權才能下載元件,並使用這些元件在執行指令碼所在的電腦及復原點中的資料之間建立安全通道。
此外,請確定您有執行 ILR 指令碼的合適機器,且機器符合作業系統需求。
步驟 5:執行指令碼和識別磁碟區
注意
指令碼只會以英文產生,不會當地語系化。 因此可能需要系統地區設定為英文,指令碼才能正常執行
若為 Windows
符合步驟 2、步驟 3 和步驟 4 中列出的所有需求之後,從下載位置 (通常是 [下載] 資料夾) 複製指令碼,請參閱步驟 1 以了解如何產生和下載指令碼。 以滑鼠右鍵按一下可執行檔,並以管理員認證執行。 出現提示時,請輸入密碼或貼上記憶體中的密碼,然後按 Enter 鍵。 輸入有效的密碼之後,指令碼會連線至復原點。
當您執行可執行檔時,作業系統會掛接新磁碟區並指派磁碟機代號。 您可以使用「Windows 檔案總管」或「檔案總管」來瀏覽這些磁碟機。 指派給磁碟區的磁碟機代號可能與原始虛擬機器為不同的代號。 不過,系統會保留磁碟區名稱。 例如,如果原始虛擬機器上的磁碟區是 "Data Disk (E:\
)",則可以在本機電腦上將該磁碟區連結為 "Data Disk ('任何磁碟機代號':\
)"。 瀏覽指令碼輸出中所提及的所有磁碟區,直到找出您的檔案或資料夾為止。
若為具有大型磁碟的備份 VM (Windows)
如果在執行檔案還原指令碼後,檔案復原流程停止回應 (舉例來說,從未裝載磁碟,或已裝載但磁碟區未出現),請執行下列步驟:
請確定作業系統是 WS 2012 或更新版本。
請確定已在還原伺服器中將登錄機碼設定為以下建議的設定,並務必將伺服器重新開機。 GUID 旁的編號範圍可以從 0001-0005。 在下列範例中是 0004。 瀏覽登錄機碼路徑,直到 [參數] 區段為止。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\TimeOutValue – change this from 60 to 2400 secs.
- HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e97b-e325-11ce-bfc1-08002be10318}\0003\Parameters\SrbTimeoutDelta – change this from 15 to 2400 secs.
- HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e97b-e325-11ce-bfc1-08002be10318}\0003\Parameters\EnableNOPOut – change this from 0 to 1
- HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e97b-e325-11ce-bfc1-08002be10318}\0003\Parameters\MaxRequestHoldTime - change this from 60 to 2400 secs.
若為 Linux
一旦符合步驟 2、步驟 3 和步驟 4 中所列的全部條件,便會產生適用 Linux 機器的 Python 指令碼。 請參閱步驟 1 以了解如何產生和下載指令碼。 下載指令碼,並將其複製到相關/相容的 Linux 伺服器。 您可能必須修改權限,才能以 chmod +x <python file name>
執行。 接著使用 ./<python file name>
執行 Python 檔案。
在 Linux 中,復原點的磁碟區會掛接到執行指令碼的資料夾。 連結的磁碟、磁碟區和對應的掛接路徑會據以顯示。 具有根層級存取權的使用者可以看到這些掛接路徑。 瀏覽指令碼輸出中提及的磁碟區。
若為具有大型磁碟的備份 VM (Linux)**
如果在執行檔案還原指令碼後,檔案復原流程停止回應 (舉例來說,從未裝載磁碟,或已裝載但磁碟區未出現),請執行下列步驟:
- 在檔案 /etc/iscsi/iscsid.conf 中,將設定從:
- 按
node.conn[0].timeo.noop_out_timeout = 5
移至node.conn[0].timeo.noop_out_timeout = 120
- 按
- 進行上述變更之後,請重新執行指令碼。 如果暫時失敗,請確定重新執行之間間隔 20 到 30 分鐘,以避免連續要求高載,影響目標準備作業。 重新執行之間的間隔,可確保目標已準備好從指令碼連線。
- 在檔案復原之後,請確定您返回入口網站,然後針對您無法裝載磁碟區的復原點,選取 [卸載磁碟]。 基本上,此步驟將會清除任何現有的程序/工作階段,並增加復原的機會。
LVM/RAID 陣列 (適用於 Linux VM)
在 Linux 中,邏輯磁碟區管理員 (LVM) 及/或軟體 RAID 陣列會用來管理多個磁碟的邏輯磁碟區。 如果受保護 Linux VM 使用 LVM 和/或 RAID 陣列,則無法在同一部虛擬機器上執行指令碼。
請改為在其他具有相容作業系統且支援受保護 VM 之檔案系統的電腦上執行指令碼。
下列指令碼輸出會顯示 LVM 和/或 RAID 陣列磁碟與磁碟區及其磁碟分割類型。
若要讓這些磁碟分割上線,請執行以下小節中的命令。
若為 LVM 磁碟分割
執行指令碼後,系統會在指令碼輸出指定的實體磁碟區/磁碟中,裝載 LVM 分割。 流程為
- 從實體磁碟區或磁碟取得磁碟區群組名稱的專屬清單
- 接著列出這些磁碟區群組中的邏輯磁碟區
- 然後將邏輯磁碟區裝載至所需路徑。
列出實體磁碟區的磁碟區群組名稱
若要列出磁碟區群組名稱:
sudo pvs -o +vguuid
此命令會列出所有實體磁碟區 (包括執行指令碼前顯示的實體磁碟區)、相應的磁碟區群組名稱,以及磁碟區群組的唯一使用者識別碼 (UUID)。 此命令的範例輸出如下所示。
PV VG Fmt Attr PSize PFree VG UUID
/dev/sda4 rootvg lvm2 a-- 138.71g 113.71g EtBn0y-RlXA-pK8g-de2S-mq9K-9syx-B29OL6
/dev/sdc APPvg_new lvm2 a-- <75.00g <7.50g njdUWm-6ytR-8oAm-8eN1-jiss-eQ3p-HRIhq5
/dev/sde APPvg_new lvm2 a-- <75.00g <7.50g njdUWm-6ytR-8oAm-8eN1-jiss-eQ3p-HRIhq5
/dev/sdf datavg_db lvm2 a-- <1.50t <396.50g dhWL1i-lcZS-KPLI-o7qP-AN2n-y2f8-A1fWqN
/dev/sdd datavg_db lvm2 a-- <1.50t <396.50g dhWL1i-lcZS-KPLI-o7qP-AN2n-y2f8-A1fWqN
第一個資料行 (PV) 顯示實體磁碟區,後續資料行顯示相關磁碟區群組名稱、格式、屬性、大小、可用空間,以及磁碟區群組的唯一識別碼。 此命令輸出顯示所有實體磁碟區。 請參閱指令碼輸出,並找出與備份相關的磁碟區。 在上述範例中,指令碼輸出顯示 /dev/sdf 和 /dev/sdd。 因此,datavg_db 磁碟區群組屬於指令碼,而 Appvg_new 磁碟區群組則屬於該機器。 最後一個概念是確保唯一磁碟區群組名稱應有一組唯一識別碼。
重複磁碟區群組
磁碟區群組名稱在執行指令碼後可能有 2 組 UUID。 這表示執行指令碼的機器和備份 VM 中的磁碟區群組名稱相同。 我們就必須重新命名備份 VM 磁碟區群組。 查看下方範例。
PV VG Fmt Attr PSize PFree VG UUID
/dev/sda4 rootvg lvm2 a-- 138.71g 113.71g EtBn0y-RlXA-pK8g-de2S-mq9K-9syx-B29OL6
/dev/sdc APPvg_new lvm2 a-- <75.00g <7.50g njdUWm-6ytR-8oAm-8eN1-jiss-eQ3p-HRIhq5
/dev/sde APPvg_new lvm2 a-- <75.00g <7.50g njdUWm-6ytR-8oAm-8eN1-jiss-eQ3p-HRIhq5
/dev/sdg APPvg_new lvm2 a-- <75.00g 508.00m lCAisz-wTeJ-eqdj-S4HY-108f-b8Xh-607IuC
/dev/sdh APPvg_new lvm2 a-- <75.00g 508.00m lCAisz-wTeJ-eqdj-S4HY-108f-b8Xh-607IuC
/dev/sdm2 rootvg lvm2 a-- 194.57g 127.57g efohjX-KUGB-ETaH-4JKB-MieG-EGOc-XcfLCt
指令碼輸出顯示 /dev/sdg、/dev/sdh、/dev/sdm2,如附加內容所示。 因此,相應 VG 名稱為 Appvg_new 和 rootvg。 但相同名稱也顯示於機器的 VG 清單中。 我們可以確認一個 VG 名稱有兩個 UUID。
現在,我們必須為以指令碼為基礎的磁碟區重新命名 VG 名稱,例如:/dev/sdg、/dev/sdh、/dev/sdm2。 若要重新命名磁碟區群組,請使用下列命令
sudo vgimportclone -n rootvg_new /dev/sdm2
sudo vgimportclone -n APPVg_2 /dev/sdg /dev/sdh
現在所有 VG 名稱都有唯一識別碼。
使用中的磁碟區群組
確保對應到指令碼磁碟區的磁碟區群組為使用中。 以下命令可用來顯示使用中的磁碟區群組。 查看指令碼的相關磁碟區群組是否在這份清單中。
sudo vgdisplay -a
否則,請使用以下命令啟用磁碟區群組。
sudo vgchange –a y <volume-group-name>
列出磁碟區群組內的邏輯磁碟區
取得指令碼相關 VG 的唯一使用中清單後,就可以使用以下命令,列出這些磁碟區群組中的邏輯磁碟區。
sudo lvdisplay <volume-group-name>
此命令會將每個邏輯磁碟區的路徑顯示為 'LV Path'。
裝載邏輯磁碟區
若要將邏輯磁碟區掛接至您所選擇的路徑:
sudo mount <LV path from the lvdisplay cmd results> </mountpath>
警告
請勿使用 'mount-a '。 此命令會裝載 '/etc/fstab ' 中所述的所有裝置。 這可能表示可能裝載重複裝置。 資料可能會重新導向至指令碼建立的裝置,這不會保存資料,且可能導致資料遺失。
若為 RAID 陣列
下列命令會顯示所有 RAID 磁碟的詳細資料:
sudo mdadm –detail –scan
相關的 RAID 磁碟將顯示為 /dev/mdm/<RAID array name in the protected VM>
如果 RAID 磁碟具有實體磁碟區,請使用掛接命令:
sudo mount [RAID Disk Path] [/mountpath]
如果 RAID 磁碟上有設定其他 LVM,則請使用上述適用於 LVM 磁碟分割的程序,但使用磁碟區名稱替代 RAID 磁碟名稱。
步驟 6:關閉連線
在識別檔案,並將其複製到本機儲存位置之後,移除 (或卸載) 其他磁碟機。 若要卸載磁碟機,請在 Azure 入口網站的 [檔案復原] 功能表上選取 [卸載磁碟]。
一旦卸載磁碟後,您會收到一則訊息。 連線可能需要幾分鐘重新整理,以讓您可以移除磁碟。
在 Linux 中,復原點的連線嚴重損毀之後,作業系統並不會自動移除對應的掛接路徑。 這些掛接路徑會以「孤立」磁碟區的形式存在。雖然您看得見,但是存取/寫入檔案時會擲回錯誤。 您可以使用 『clean』 參數執行腳本來手動移除它們。python scriptName.py clean
指令碼執行時,會從任何先前的復原點識別任何這類現有的磁碟區,並在同意下將它們清除。
注意
在還原必要的檔案之後,請確保關閉連線。 這很重要,尤其是在也為備份設定執行指令碼的機器的情況下。 如果連線仍開啟,後續備份可能會失敗,並出現錯誤 "UserErrorUnableToOpenMount"。 發生這種情況是因為假設已裝載的磁碟機/磁碟區可用,且存取時可能會失敗,因為基礎儲存體 (即 iSCSI 目標伺服器) 可能無法使用。 清除連線會移除這些磁碟機/磁碟區,因此在備份期間將無法使用。
安全性
本節討論從 Azure VM 備份實作檔案復原所採取的各種安全性措施。
功能流程
此功能是建立來存取 VM 資料,而不需要還原整個 VM 或 VM 磁碟,而且所需採取的步驟最少。 VM 資料的存取是由指令碼所提供 (可在執行時掛接復原磁碟區,如下所示),而且會形成所有安全性實作的基石:
安全性實作
選取復原點 (可產生指令碼的人員)
指令碼會提供 VM 資料的存取權,因此請務必控管誰可以先產生指令碼。 您必須登入 Azure 入口網站,並獲得 Azure RBAC 授權,才能產生指令碼。
檔案復原需要與 VM 還原和磁碟還原所需的相同授權層級。 換句話說,只有獲授權的使用者才可以檢視能夠產生指令碼的 VM 資料。
產生的指令碼會使用 Azure 備份服務的官方 Microsoft 憑證進行簽署。 對指令碼進行的任何竄改都表示簽章已損毀,而且執行指令碼的任何嘗試都會被視為作業系統的潛在風險。
掛接復原磁碟區 (可執行指令碼的人員)
只有系統管理員可以執行指令碼,而且應該在提高權限的模式下執行。 指令碼只會執行一組預先產生的步驟,而且不接受來自任何外部來源的輸入。
若要執行指令碼,需有密碼,這組密碼只在 Azure 入口網站或 PowerShell/CLI 中產生指令碼時,才向授權使用者顯示。 這是為了確保下載指令碼的授權使用者也負責執行指令碼。
管理檔案和資料夾
為瀏覽檔案和資料夾,指令碼會使用電腦中的 iSCSI 啟動器,並連線到設定為 iSCSI 目標的復原點。 在這裡,您可以想像有人嘗試模仿/欺騙任何或所有元件的案例。
我們會使用相互 CHAP 驗證機制,讓每個元件彼此驗證。 也就是說,假的啟動器很難連線到 iSCSI 目標,而且假的目標很難連線到執行指令碼所在的電腦。
復原服務與電腦之間的資料流程會藉由透過 TCP 建立安全的 TLS 通道而受到保護 (執行指令碼所在的電腦應該支援 TLS 1.2)。
存在於父代/備份 VM 中的任何檔案存取控制清單 (ACL) 也會保留在裝載的檔案系統中。
此指令碼會對復原點提供唯讀存取權,且只在 12 小時內有效。 如果您想要更早移除存取權,請登入 Azure 入口網站/PowerShell/CLI,並針對該特定復原點執行卸載磁碟。 此指令碼將會立即失效。
下一步
- 了解如何透過 PowerShell 還原檔案
- 了解如何透過 Azure CLI 還原檔案
- 還原 VM 之後,了解如何管理備份