使 Amazon EBS 卷可在 Linux 上使用 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使 Amazon EBS 卷可在 Linux 上使用

将某个 Amazon EBS 卷附加到实例后,该卷将显示为块储存设备您可以使用任何文件系统将卷格式化,然后进行挂载。在使 EBS 卷可供使用后,您可以像访问其他所有卷一样访问该卷。任何写入此文件系统的数据均写入 EBS 卷,并且对使用该设备的应用程序是透明的。

您可以制作 EBS 卷的快照以进行备份或在您创建其他卷时作为基准。有关更多信息,请参阅Amazon EBS 快照

如果您准备使用的 EBS 卷大于 2TiB,则必须使用 GPT 分区方案才能访问整个卷。有关更多信息,请参阅针对 EBS 卷的大小和配置的限制

您可以从Amazon EC2 用户指南(适用于 Windows 实例)中的使卷可在 Windows 上使用获得有关 Windows 实例上的卷的指示。

格式化并挂载附加的卷

假设您的根设备 /dev/xvda 拥有一个具有 EBS 卷的 EC2 实例,并且您已使用 /dev/sdf 将一个空的 EBS 卷添加到了该实例。按照以下过程使新附加的卷可用。

在 Linux 上格式化并挂载 EBS 卷
  1. 使用 SSH 连接到您的实例。有关更多信息,请参阅连接到您的 Linux 实例

  2. 设备可附加到设备名称与您在块储存设备映射中指定的设备名称不同的实例。有关更多信息,请参阅Linux 实例上的设备名称。使用 lsblk 命令可查看可用磁盘设备及其挂载点(如果适用),以帮助您确定要使用的正确设备名称。lsblk 的输出从完整的设备路径中去掉了 /dev/ 前缀。

    以下是基于 Nitro 系统构建的实例的示例输出,该实例将 EBS 卷公开为 NVMe 块存储设备。根设备为 /dev/nvme0n1,它有两个名为 nvme0n1p1nvme0n1p128。如果没有分区且尚未附加,则附加卷为 /dev/nvme1n1

    [ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:0 0 10G 0 disk nvme0n1 259:1 0 8G 0 disk -nvme0n1p1 259:2 0 8G 0 part / -nvme0n1p128 259:3 0 1M 0 part

    以下是 T2 实例的示例输出。根设备为 /dev/xvda,它有名为 xvda1 的一个分区。如果没有分区且尚未附加,则附加卷为 /dev/xvdf

    [ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk -xvda1 202:1 0 8G 0 part / xvdf 202:80 0 10G 0 disk
  3. 确定卷上是否存在文件系统。新卷为原始的块储存设备,您必须先在这种设备上创建文件系统,然后才能够挂载并使用它们。从快照创建的卷可能已经含有文件系统;如果您在现有的文件系统上创建新的文件系统,则该操作将覆盖您的数据。

    使用以下一种或两种方法来确定卷上是否有文件系统:

    • 使用 file -s 命令获取有关特定设备的信息,例如其文件系统类型。如果输出仅显示 data(如以下示例输出所示),则说明设备上没有文件系统。

      [ec2-user ~]$ sudo file -s /dev/xvdf /dev/xvdf: data

      如果设备有文件系统,该命令会显示有关文件系统类型的信息。例如,以下示例输出显示具有 XFS 文件系统的根设备。

      [ec2-user ~]$ sudo file -s /dev/xvda1 /dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
    • 使用 lsblk -f 命令获取有关连接到实例的所有设备的信息。

      [ec2-user ~]$ sudo lsblk -f

      例如,以下输出显示有三个设备连接到实例 – nvme1n1nvme0n1nvme2n1。第一列列出了设备及其分区。FSTYPE 列显示每个设备的文件系统类型。如果该列对于特定设备为空,则表示该设备没有文件系统。在这种情况下,设备 nvme1n1 和设备 nvme0n1 上的分区 nvme0n1p1 都使用 XFS 文件系统进行格式化,而设备 nvme2n1 和设备 nvme0n1 上的分区 nvme0n1p128 没有文件系统。

      NAME FSTYPE LABEL UUID MOUNTPOINT nvme1n1 xfs 7f939f28-6dcc-4315-8c42-6806080b94dd nvme0n1 ├─nvme0n1p1 xfs / 90e29211-2de8-4967-b0fb-16f51a6e464c / └─nvme0n1p128 nvme2n1

    如果这些命令的输出显示设备上没有文件系统,则必须创建一个文件系统。

  4. (有条件)如果您在上一步中发现设备上存在文件系统,请跳过此步骤。如果您有一个空卷,请使用 mkfs -t 命令在该卷上创建一个文件系统。

    警告

    如果要挂载已具有数据的卷(例如,从快照创建的卷),请勿使用此命令。否则,您会格式化卷并删除现有数据。

    [ec2-user ~]$ sudo mkfs -t xfs /dev/xvdf

    如果出现“找不到 mkfs.xfs”错误,请使用以下命令安装 XFS 工具,然后重复上一命令:

    [ec2-user ~]$ sudo yum install xfsprogs
  5. 使用 mkdir 命令创建卷的挂载点目录。挂载点是卷在文件系统树中的位置,以及您在安装卷之后读写文件的位置。下面的示例创建一个名为 /data 的目录。

    [ec2-user ~]$ sudo mkdir /data
  6. 在您于上一步创建的挂载点目录中挂载卷或分区。

    如果该卷没有分区,请使用以下命令并指定设备名称来挂载完整的卷。

    [ec2-user ~]$ sudo mount /dev/xvdf /data

    如果该卷有分区,请使用以下命令并指定分区名称来挂载分区。

    [ec2-user ~]$ sudo mount /dev/xvdf1 /data
  7. 检查新卷挂载的文件权限,确保您的用户和应用程序可以向该卷写入数据。有关文件权限的更多信息,请参阅 Linux 文档项目 文件安全性

  8. 重启实例后,挂载点不会自动保留。要在重启后自动挂载此 EBS 卷,请使用重启后自动挂载附加的卷

重启后自动挂载附加的卷

要在每次系统重启时附加附加的 EBS 卷,可在 /etc/fstab 文件中为该设备添加一个条目。

您可以在 /dev/xvdf 中使用设备名称(例如 /etc/fstab),但建议改为使用设备的 128 位通用唯一标识符(UUID)。设备名称可以更改,但 UUID 会在整个分区的使用寿命期间保留。通过使用 UUID,您可以减少系统在硬件重新配置后无法启动的机会。有关更多信息,请参阅识别 EBS 设备

重启后自动附加附加卷
  1. (可选)创建 /etc/fstab 文件的备份,以便在编辑时误损坏或删除此文件时使用。

    [ec2-user ~]$ sudo cp /etc/fstab /etc/fstab.orig
  2. 使用 blkid 命令查找设备的 UUID。记下要在重新启动后挂载的设备的 UUID。在下一步中您将需要用到它。

    例如,以下命令显示有两个设备挂载到实例上,并显示了两个设备的 UUID。

    [ec2-user ~]$ sudo blkid /dev/xvda1: LABEL="/" UUID="ca774df7-756d-4261-a3f1-76038323e572" TYPE="xfs" PARTLABEL="Linux" PARTUUID="02dcd367-e87c-4f2e-9a72-a3cf8f299c10" /dev/xvdf: UUID="aebf131c-6957-451e-8d34-ec978d9581ae" TYPE="xfs"

    对于 Ubuntu 18.04,请使用 lsblk 命令。

    [ec2-user ~]$ sudo lsblk -o +UUID
  3. 使用任何文本编辑器(如 /etc/fstabnano)打开 vim 文件。

    [ec2-user ~]$ sudo vim /etc/fstab
  4. 将以下条目添加到 /etc/fstab 以在指定的挂载点挂载设备。这些字段是 blkid(或用于 Ubuntu 18.04 的 lsblk)返回的 UUID 值、挂载点、文件系统以及建议的文件系统挂载选项。有关必填字段的更多信息,请运行 man fstab 以打开 fstab 手册。

    在以下示例中,我们将 UUID 为 aebf131c-6957-451e-8d34-ec978d9581ae 的设备挂载到挂载点 /data,然后我们使用 xfs 文件系统。我们还使用 defaultsnofail 标志。我们指定 0 以防止文件系统被转储,并且我们指定 2 以指示它是非根设备。

    UUID=aebf131c-6957-451e-8d34-ec978d9581ae /data xfs defaults,nofail 0 2
    注意

    如果您要在未附加此卷的情况下启动实例(例如,将卷移动到另一个实例之后),nofail 附加选项允许该实例即使在卷附加过程中出现错误时也可启动。Debian 衍生物(包括早于 16.04 的 Ubuntu 版本)还必须添加 nobootwait 挂载选项。

  5. 要检查条目是否有效,请在 /etc/fstab 中运行以下命令以卸载设备,然后挂载所有文件系统。如果未产生错误,则说明 /etc/fstab 文件正常,您的文件系统会在重启后自动挂载。

    [ec2-user ~]$ sudo umount /data [ec2-user ~]$ sudo mount -a

    如果收到错误消息,请解决文件中的错误。

    警告

    /etc/fstab 文件中的错误可能显示系统无法启动。请勿关闭 /etc/fstab 文件中有错误的系统。

    如果您无法确定如何更正 /etc/fstab 中的错误并且您在此过程的第一步中创建了一个备份文件,则可以使用以下命令从您的备份文件还原。

    [ec2-user ~]$ sudo mv /etc/fstab.orig /etc/fstab