创建内存 RAM 磁盘


Compute Engine 实例具有高性能的企业级内存,可用于运行应用。您可以分配一部分内存,用于创建一个延迟极低且吞吐量极高的 RAM 磁盘。如果您的应用需要使用文件系统结构,但又不能简单地将其数据存储在系统内存中,您不妨使用 RAM 磁盘。单独的 RAM 磁盘不提供任何存储冗余或灵活性,因此最好将 RAM 磁盘与其他实例存储方案结合使用。

RAM 磁盘与您的应用共享实例内存。如果您的实例没有足够的内存来容纳 RAM 磁盘和应用,请创建具有 highmem 机器类型(例如 N2)的实例,或 升级现有实例以添加更多内存。

准备工作

  • 了解 RAM 磁盘与其他 Compute Engine 存储方案之间的区别。
  • 如果您尚未设置身份验证,请进行设置。 身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

创建 RAM 磁盘

您可以使用 tmpfs 文件系统创建 RAM 磁盘,大多数 Linux 发行版默认包含该文件系统。

  1. 如果您的实例没有足够的可用内存,则可以选择将实例的机器类型更改为配备了更多内存的机器类型。

  2. 通过 SSH 连接您的实例。对于本示例,转到“虚拟机实例”页面,然后点击您要为其添加 RAM 磁盘的实例旁边的 SSH 按钮。

  3. 为您的 RAM 磁盘创建一个装载点。

    $ sudo mkdir /mnt/ram-disk
    
  4. 创建并装载新的 tmpfs RAM 磁盘。您必须确定 size 属性的值,该值既要满足存储要求,又不会导致与应用竞争内存或耗尽所有可用内存。在本示例中,此实例的机器类型为 n1-highmem-32,配备了 208 GB 的内存,因此将 RAM 磁盘大小设为 50g 比较合适。

    $ sudo mount -t tmpfs -o size=50g tmpfs /mnt/ram-disk
    
  5. 将 RAM 磁盘添加到 /etc/fstab 文件,以便设备在您重启实例时自动重新装载:

    $ echo 'tmpfs /mnt/ram-disk tmpfs nodev,nosuid,noexec,nodiratime,size=50G 0 0' | sudo tee -a /etc/fstab
    

删除 RAM 磁盘

您可以卸载 tmpfs RAM 磁盘,就像卸载其他任何卷一样。该操作会删除 RAM 磁盘及其中存储的所有数据。对于此示例,请移除在 /mnt/ram-disk 处装载的 RAM 磁盘:

$ sudo umount /mnt/ram-disk

在实例重启前自动备份 RAM 磁盘数据

您可以在实例重启之前备份 RAM 磁盘以保留其中的数据,以便实例重启后再次使用这些数据。将您的数据备份到永久性磁盘以保留这些数据。

  1. 创建并装载永久性磁盘,以用作 RAM 磁盘的备份磁盘。确保磁盘足够大,可容纳 RAM 磁盘中的信息。

  2. 为您的实例创建一个关闭脚本,在其中使用 rsync 命令来将 RAM 磁盘内容写入备份卷。对于本示例,使用 gcloud CLI 将 shutdown-script 元数据添加到实例。在该实例中,RAM 磁盘的装载位置为 /mnt/ram-disk,永久性磁盘的装载位置为 /mnt/ram-disk-backup

    gcloud compute instances add-metadata example-instance --metadata shutdown-script="#! /bin/bash
    rsync -a --delete --recursive --force /mnt/ram-disk/ /mnt/ram-disk-backup/
    EOF"
    
  3. 或者,您还可以创建启动脚本,以便在实例再次启动时将文件还原到 RAM 磁盘。使用 gcloud CLI 将 startup-script 元数据添加到实例。

    gcloud compute instances add-metadata example-instance --metadata startup-script="#! /bin/bash
    rsync -a --recursive --force /mnt/ram-disk-backup/ /mnt/ram-disk/
    EOF"