创建内存 RAM 磁盘


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

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

准备工作

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

创建 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"