如果您正在使用亚马逊网络服务(AWS)在弹性计算云中运行EC2实例(虚拟机),您有几种方法可以保护您的工作负载免受软件故障、恶意软件感染、意外删除等数据丢失的影响。您可以选择的一个选项是AWS内置的EC2实例备份功能,称为EBS快照。本博文将解释如何使用EBS卷快照创建EC2实例的快照,并详细介绍配置过程的示例。
什么是EBS快照?
EBS快照是存储在亚马逊S3中的弹性块存储(EBS)卷的增量副本。这意味着当您第一次创建EBS快照时,会创建一个完整备份,而后续的EBS快照只会复制已更改的数据。EBS卷是附加到EC2实例的虚拟磁盘。
尽管EBS快照存储在亚马逊S3中,但您无法手动访问S3存储中的快照。您可以在EC2管理控制台中管理这些快照。
注意:有时也会使用AWS EC2快照和亚马逊快照这些术语来指代EBS快照。
EBS快照的工作原理
EBS快照是EC2实例数据的块级备份,代表了在发出快照命令时EBS卷的特定时间点上的情况。这意味着如果实例正在运行,则在启动快照后写入EBS卷的数据块不会保存到快照中。因此,EBS快照是崩溃一致而不是应用程序一致的备份。
请注意,EBS快照与VMware vSphere和Microsoft Hyper-V中的快照不同。Hyper-V和VMware快照不是备份,不能替代正确的备份。
然而,EBS快照存在一些限制,包括缺乏调度和保留选项,无法创建本地副本,以及创建应用程序一致的EC2快照以简化恢复的复杂性。
在AWS控制台中为EC2实例创建快照的方法
AWS管理控制台是用于管理所有AWS计算、存储和其他资源的GUI Web界面,包括创建EBS快照。
要访问要创建快照的EC2实例:
- 使用具有创建EC2实例、EBS卷和EBS快照所需权限的帐户登录AWS管理控制台。
- 点击 服务,在 计算 部分点击 EC2 打开 EC2 实例、EBS 卷和其他 EC2 功能的管理控制台。
我们准备了一个 EC2 实例来演示创建 EBS 快照的步骤。我们将使用 EBS 快照备份和恢复的 EC2 实例参数如下:
名称:blog-temp
EC2 实例 ID:i-0071290000000cb84
实例类型:t2.micro
可用区域:eu-central-1c
EBS 卷 1:vol-0617000000000763c
卷类型:gp2
卷大小:8 GB
运行在 EC2 实例上的客户操作系统 (OS) 是 Ubuntu Server (Linux)。
写入文件到 EBS 卷
在创建快照之前,让我们在连接到 EC2 实例的虚拟磁盘上创建两个文件。这样,我们可以检查在从 EBS 快照恢复实例后是否能够恢复这些文件。我们在用户主目录下创建两个文件:
lspci > file01.txt
echo "test EC2 snapshot 01" > snapshot01.txt
准备实例
停止 EC2 实例以确保快照包含一致的数据。原因是 EBS 卷在块级别上工作。当拍摄 EBS 快照时,保存了那个时刻的 EBS 卷状态。存储块按原样保存。系统在文件系统级别上进行文件操作时不会意识到当时的操作。如果在拍摄快照时正在对 EBS 卷上写入文件,则快照将包含不一致的数据。效果类似于在文件正在写入时从物理计算机上拔掉电源线。
如果要对非系统 EBS 卷进行快照,可以从操作系统中卸载文件系统,以确保卷上没有文件写入操作。必须禁用 EC2 实例的休眠才能拍摄快照。
为了准备 EC2 实例以进行快照:
- 打开 EC2 管理控制台中 EC2 实例列表页面。右键单击实例名称,在上下文菜单中单击停止实例。
- 找到 EC2 实例使用的卷。点击存储选项卡,然后点击适当的 EBS 卷的卷 ID(在我们的情况下为vol-0617000000000763c)。
拍摄快照
我们准备创建 EC2 实例的快照:
- 选择 EBS 卷(点击行左侧的复选框),然后点击操作 > 创建快照。
- 输入描述,设置加密设置,并添加标签。我使用以下参数:
- 描述:EBS 快照博客 01
- 未加密
点击创建快照。
注意:我们使用未加密卷创建未加密快照。在这种情况下,可以手动设置快照的加密设置。当您对加密卷进行快照时,快照会自动加密。
- 您应该看到以下消息和快照ID:
创建快照请求成功
snap-0778000000000ab40
点击快照ID以打开包含快照选项和状态的页面。
- 处于等待中快照状态表示正在将来自EBS卷的数据传输到Amazon S3。等待快照创建完成(状态更改为已完成)。时间取决于保存到快照的数据大小。
如何进行多卷快照
发现一个EC2实例使用多个EBS卷是很常见的。在这种情况下,您可以为连接到该EC2实例的所有EBS卷创建多卷快照以进行Amazon EC2备份。
在本节中,我们将涵盖:
为EC2实例创建第二个EBS卷
让我们首先向我们用于演示目的的EC2实例添加第二个EBS卷:
- 在EC2管理控制台的导航窗格中,转到弹性块存储 > 卷。点击创建卷。
- 对于可用区,区域必须与实例的区域相同(在我们的案例中是eu-central-1c)。
输入卷类型/大小,设置加密选项,并输入标签。标签有助于在卷列表中找到卷。我们将卷大小设置为1 GiB,并使用以下标签:
-
键:blog
-
值:temp volume 2
点击创建卷。
- 记住(或写下)卷的ID(在我们的案例中为vol-0b4a0000000003d01)。点击卷ID以打开卷属性。
- 将卷附加到EC2实例。右键单击卷或点击操作,在打开的菜单中点击附加卷。
- 选择要附加EBS卷的实例。您必须选择EC2实例ID。在我们的案例中,实例ID为i-0071290000000cb84。
您可以选择用于访问附加卷的客户操作系统中的设备。在我们的案例中使用/dev/sdf。
点击附加以将新卷附加到EC2实例。
注意:关于重命名磁盘设备的有用信息显示在备注中。在我们的情况下,/dev/sdf在客户操作系统中被重命名为/def/xvdf。
现在有两个卷附加到我们的 EC2 实例(blog-temp):
vol-0617000000000763c
vol-0b4a0000000003d01
在第二个 EBS 卷上写入数据
接下来,我们将在第二个 EBS 卷上创建一个文件。此文件将用于检查从 EBS 快照还原卷后是否恢复了所有数据。因此,我们将创建一个分区,创建一个文件系统,并将文件系统挂载到运行在 EC2 实例上的客户 Linux 操作系统中。
即使我们专注于对 EBS 快照的操作而不是运行在 EC2 实例上的客户 Linux 操作系统中的操作,我们也列出了使用的命令,以更好地理解卷的操作。
管理存储
- 使用lsblk来显示 Linux 中块设备的详细信息。
- 使用df -h来检查已挂载磁盘的存储空间。
- 使用mount来检查已挂载的磁盘。
创建和挂载分区
在第二个 EBS 卷上使用 parted 创建和格式化分区:
sudo parted -l
parted /dev/xvdf
(parted) mklabel msdos
(parted) print
(parted) mkpart primary ext4 1MB 955MB
(parted) print
(parted) quit
在准备的分区上创建文件系统:
mkfs.ext4 /dev/xvdf1
创建用作挂载点的目录:
mkdir disk2
将带有文件系统的分区挂载到创建的目录:
mount /dev/xvdf1 /disk2/
转到已挂载分区的目录:
cd /disk2
将更改写入2个EBS卷
- 在运行Linux的EC2实例上创建第二个EBS卷上的分区上的文件:
echo “为磁盘2的EBS快照” > /disk2/d2-file01.txt
- 在第一个磁盘上进行更改,以创建EC2实例使用的第一个卷的新EBS快照。两个卷应包含从上次拍摄快照时的状态开始的更改。
我们在第一个卷上创建snapshot02.txt文件,以更方便地检测保存到第一个卷的新快照的更改。
一旦将具有新数据的两个EBS卷附加到EC2实例,我们就可以创建多卷快照。
创建多卷快照
- 转到 EC2 实例管理页面的导航窗格中的 Elastic Block Store > 快照。单击 创建快照。
- 选择资源类型:实例。
- 输入所需 EC2 实例的实例 ID,其卷您希望使用 EBS 快照进行备份。
所选实例附加的所有卷会自动选择。
- 输入说明以帮助您在需要时在 AWS 中找到 EBS 快照。在我们的示例中,说明是EBS 快照博客 02。
- 如果您想使用分配给 EBS 卷的标记,请选择 从卷复制标记 复选框。
- 一旦点击 创建快照,所有选定卷的快照将被创建。
如果操作成功,您将看到以下消息:
创建快照请求成功
显示两个亚马逊快照标识符:snap-0f95000000000de71 和 snap–0a91000000000769b 在我们的案例中。
您可以保存这些 ID 值,并单击其中一个以检查快照创建状态。在启动快照创建后,操作状态为等待中,一旦过程完成,状态将变为完成。
A new snapshot for each volume has been created.
使用 AWS CLI 创建快照
如果您更喜欢命令行界面或需要自动化快照创建,可以使用 AWS CLI 作为 AWS 管理控制台的替代方案。
在AWS CLI中创建EBS快照的命令是:
aws ec2 create-snapshot --volume-id vol-0b4a51e1cea333d01 --description "这是博客的测试快照"
输出应如下:
{
"Description": "这是博客的测试快照",
"Tags": [],
"Encrypted": false,
"VolumeId": "vol-0b4a51e1cea333d01",
"State": "pending",
"VolumeSize": 8,
"StartTime": "2021-08-28T21:06:01.000Z",
"Progress": "",
"OwnerId": "012345678910",
"SnapshotId": "snap-0689749a39a7b822b"
}
创建带有标签的快照的命令:
aws ec2 create-snapshot --volume-id vol-0b4a51e1cea333d01 --description '生产备份' --tag-specifications
'ResourceType=snapshot,Tags=[{Key=博客,Value=测试},{Key=AWS,Value=EC2-快照}]'
如何使用EBS快照还原EC2实例
我们已经创建了附加到Amazon EC2实例的EBS卷的快照。这些快照是AWS中的一种数据备份形式。现在让我们看看如何通过恢复创建EC2实例:
- 特定的EBS卷在AWS中
- 整个EC2实例
恢复第二个EBS卷
让我们从快照中恢复第二个EBS卷(大小为1 GiB)。这个卷用于存储文件,操作系统没有安装在这个卷上。
- 在EC2管理控制台的导航窗格中,转到弹性块存储 > 快照。
我们在搜索框中输入“博客”,以显示为用于编写此博客文章的EC2实例的EBS卷创建的所有快照。这是添加描述和标签的价值的一个例子。
- 选择1 GiB卷的快照,并从快照创建一个新卷。右键单击快照,在打开的菜单中点击创建卷。
- 在创建卷页面上定义所需的卷参数:选择卷类型,定义卷大小,可用区,加密选项,标签键和值。
可用区必须与EC2实例的可用区相同(在我们的例子中是eu-central-1c)。
卷大小与我们的示例中原始备份卷的大小(1 GiB)相同。
标签键是博客,值是恢复的卷1。
- 点击创建卷完成并使用EBS快照创建EBS卷。
您将看到以下消息:
创建卷请求成功
您可以保存卷ID。新卷的ID在我们的例子中是vol-09cd000000000b502。
恢复系统卷
要恢复EC2实例,您需要恢复安装操作系统的EBS卷。在这种情况下,您可以从来宾操作系统使用的EBS卷的快照创建映像,并使用此映像(已恢复的EC2实例)启动实例。
创建映像
- 在EC2管理控制台中,转到弹性块存储 > 快照,并选择所需快照,该快照是来宾操作系统安装的EBS卷的快照。
我们选择来宾操作系统(Ubuntu Server)使用的8 GiB卷的最新快照。此EBS卷快照是在我们为EC2实例创建多卷快照时创建的。
右键单击快照,在打开的菜单中,点击创建映像。
- 在打开的窗口中,输入所需信息并选择选项,以从EBS快照创建映像。我们使用以下参数。
名称:blog-recovered
描述:从EBS快照恢复(blog)
其他设置保持默认值。
点击创建。
- 打开已收到创建映像请求对话框。单击映像ID以查看有关映像的信息(在我们的例子中是ami-08ed800000000872a)。等待映像创建完成。
启动映像
映像创建完成后,右键单击映像并点击启动。
新的EC2实例创建向导打开。您必须选择实例选项。您可以选择与备份的原始VM相同的选项。您还可以将实例恢复到一个更强大的新EC2实例。
注意:由于我们已经从包含AMI列表的页面上选择了blog-recovered AMI,所以我们被重定向到向导的第二步(而不是第一步. 选择AMI)。
第二步:选择实例类型。我们选择t2.micro作为实例类型。在向导的每一步都单击下一步以继续。
第三步:配置实例。根据您的要求配置详细信息,包括网络设置、IAM角色、关闭行为等。
第四步:添加存储在使用EBS快照恢复EC2实例时很重要。单击添加新卷。此页面上添加了一个包含卷选项的新行。在快照字段中输入所需卷快照的ID。
我们输入snap-0a91000000000769b,这是我们的1-GiB卷快照的ID。在我们的示例中,默认选择了8-GiB卷的大小。我们可以将卷大小设置为1 GiB,与原始EBS卷配置相同。您还可以选择存储设备、卷类型、加密和终止时删除选项。
步骤 5:添加标签。确保标签对搜索有用。标签应用于所有卷和实例。在此示例中,标签键是博客,值是恢复的 VM 01。
步骤 6:配置安全组。编辑参数以控制您的 EC2 实例的网络流量。
步骤 7:审查实例启动。审查您的实例启动详情,然后点击启动完成。您必须选择一个密钥对或创建一个新的以访问 EC2 实例。
- 现在显示启动状态页面。点击查看实例。
- 为恢复的实例输入一个名称(在我们的案例中为blog-recovered)。恢复的 E2 实例的状态为运行。来自 EBS 快照的两个恢复的 EBS 卷已附加到 EC2 实例(请参见下面的截图)。
检查恢复的文件
让我们检查一下在获取最新快照之前创建的文件是否已恢复:
列出已连接的块设备:
lsblk
列出用户当前(主目录)目录的文件:
ls -al
之前在安装 OS 的 EBS 卷上获取第一和第二个快照之前创建的 snapshot01.txt 和 snapshot2.txt 文件均存在。
挂载位于第二个磁盘(EBS 卷)上的分区:
sudo mount /dev/xvdb1 /disk2/
分区名称已更改为/dev/xvdb1。请注意,在恢复实例后,您可能需要编辑/etc/fstab以进行自动挂载。
ls -al /disk2/
d2-file01.txt 存在于恢复后存储在第二个 EBS 卷上的文件系统中。
所有附加的 EBS 卷的 AWS EC2 实例已成功从 EBS 快照中恢复。所有所需数据均已保留。
结论
您可以使用多卷快照备份单个卷或备份所有卷。这是一项非常方便的原生 AWS 功能,用于数据保护和灾难恢复。但请注意,将 EBS 快照存储在亚马逊云中会产生额外的费用,因为会使用额外的云存储。此外,使用 EBS 快照进行备份还存在其他限制,例如在快照被创建时系统不知道正在写入的文件。因此,使用 EBS 快照进行的备份是崩溃一致的,而不是应用一致的。
NAKIVO 备份与复制是一种数据保护解决方案,支持创建 Amazon EC2 实例的应用程序感知备份和副本。您还可以使用该解决方案大大简化和自动化备份和恢复过程。从备份快速恢复整个 EC2 实例,无需恢复 EBS 卷,创建 EC2 实例,并手动将卷附加到创建的 EC2 实例。
Source:
https://www.nakivo.com/blog/how-to-create-snapshots-of-ec2-instance/