本站包含联盟链接——如果你通过链接注册,我们可能获得佣金。 Affiliate links.

DigitalOcean Volumes 指南 2026 — 块存储扩展

DigitalOcean Volumes 指南 2026 — 块存储扩展

当 Droplet 附带的 SSD 空间不足时,与其将整个 Droplet 升级到更昂贵的计划,DigitalOcean Volumes 是独立的块存储,可以通过 DigitalOcean 的内部网络按需附加到任何 Droplet。本文将引导您了解概念、定价、创建、附加、挂载、格式化,一直到调整大小和快照,并提供真实的 doctl 命令供您立即使用。

什么是 Volumes?与 Droplet 磁盘有何不同

DigitalOcean Volumes 是完全独立于 Droplet 的基于 SSD 的块存储服务。它通过 DigitalOcean 的私有网络连接到 Droplet,而不是物理插入机器中的磁盘。与 Droplet 磁盘(Droplet 计划附带的磁盘)的关键区别在于,Droplet 磁盘在其整个生命周期内绑定到 Droplet,大小固定,取决于您选择的计划。例如,$6/月的 Droplet Basic 计划(1 GiB RAM,1 vCPU)附带 25 GB SSD,$12/月的计划(2 GiB RAM)附带 50 GB,$24/月的计划(4 GiB RAM,2 vCPU)附带 80 GB,删除 Droplet 后该磁盘上的数据会立即丢失。相反,Volume 是一个独立的资源,具有自己的生命周期。它可以单独创建、附加到同一地区的任何 Droplet、与不同 Droplet 分离和重新附加,即使您删除正在使用它的 Droplet,Volume 及其所有数据也会保持完整,直到您明确删除它。这个概念类似于 AWS 的 EBS 或 Google Cloud 的 Persistent Disk——它将计算与存储分离,因此您可以扩展或移动数据而不会影响 Droplet 本身。 开发人员选择 Volumes 而不是升级整个 Droplet 计划的主要原因是 CPU/RAM 已经足够但需要更多存储容量的场景。例如,存储用户上传的文件、存储数据库的数据目录、归档长期日志或用作 Web 应用程序的媒体存储。将 Volumes 与主磁盘分离还使得能更清晰地规划备份和存储扩展,独立于计算规划。

定价:每月 $0.10/GiB

值得强调的是——DigitalOcean 对 Volumes 的收费为每 GiB 每月 $0.10,根据实际使用情况按小时计费,就像 Droplet 一样。这意味着如果您创建 100 GiB Volume,成本大约是每月 $10;创建 500 GiB 的成本大约是每月 $50;创建 1,000 GiB(1 TiB)的成本大约是每月 $100。此费率固定,不因地区而异,并与 Droplet 成本分开列项,但在同一张发票中一起显示。 需要考虑的成本是 Volumes 在创建完成的那一刻起就开始产生费用,无论是否已附加到 Droplet。即使 Volume 从 Droplet 分离,费用也会继续。因此,如果不再需要 Volume,应该删除它以停止产生费用,因为系统不会自动删除它。另一个需要提前规划的是 Volumes 可以稍后扩展大小,但不能缩小。因此,估计初始大小尽可能接近实际需求有助于更好地控制成本,而不是主动创建过大的 Volumes。对于需要预算预测的团队,请直接从 DigitalOcean 网站验证当前定价,因为本文中的数据来自 2026 年 7 月。

创建 Volume 并附加到 Droplet

创建 Volume 有两种方式:通过 Control Panel 网络界面和通过 doctl 命令进行自动化。在 Control Panel 中,进入 Volumes 菜单,选择 Create Volume,指定大小,选择与您的 Droplet 匹配的地区(因为 Volumes 无法跨地区附加),选择您希望系统自动格式化的文件系统(ext4 或 XFS),并在一个步骤中选择目标 Droplet 以附加它。 对于 CLI 方法,使用 doctl compute volume create data-volume-01 --region sgp1 --size 100GiB --fs-type ext4 在新加坡地区创建 100 GiB Volume 并预先格式化为 ext4。然后使用 doctl compute volume-action attach <volume-id> <droplet-id> 将其附加到 Droplet,您需要先使用 doctl compute volume listdoctl compute droplet list 查找 volume-id 和 droplet-id。需要注意的一个约束是 Volume 通常被设计为一次附加到一个 Droplet,而不是多个 Droplet 可以同时访问的共享存储。如果需要多个 Droplet 同时访问相同的文件集,请考虑使用 Spaces Object Storage 或 Network File Storage。 Volume 命名应该具有描述性——在名称中包含环境和地区,例如 db-data-prod-sgp1 这样当您在同一帐户中有多个 Volumes 时更容易管理。始终在点击创建前验证地区与您的 Droplet 相匹配,因为这是一个必需的约束,之后无法更改而不使用快照。

要点总结: 必须在与您将附加到的 Droplet 相同的地区创建 Volume

在 Linux 上挂载和格式化

将 Volume 附加到 Droplet 后,操作系统会将其视为新的块设备,但您必须先挂载它才能使用。SSH 到 Droplet 并使用 lsblk 检查设备或通过 ls -l /dev/disk/by-id/ 查看,它显示格式为 scsi-0DO_Volume_<volume-name> 的名称。使用来自 /dev/disk/by-id/ 的路径而不是直接引用 /dev/sda/dev/sdb 至关重要,因为如果您有多个 Volume,sdX 等设备名称在重启后可能会改变。 如果您创建 Volume 时没有让系统自动格式化它,您必须先使用 sudo mkfs.ext4 -F /dev/disk/by-id/scsi-0DO_Volume_data-volume-01(或 XFS 使用 mkfs.xfs)进行格式化,在空白 Volume 上仅运行此命令一次。永远不要在已有数据的 Volume 上重新运行它,因为它会删除所有内容。然后使用 sudo mkdir -p /mnt/data-volume-01 创建挂载点,使用 sudo mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_data-volume-01 /mnt/data-volume-01 挂载它。 这种方式的挂载在 Droplet 重启后消失,所以将其添加到 /etc/fstab 以在每次启动时自动挂载,添加一行如 /dev/disk/by-id/scsi-0DO_Volume_data-volume-01 /mnt/data-volume-01 ext4 defaults,nofail,discard 0 0。关键点是始终包含 nofail 选项以防止如果 Volume 分离或在启动时临时不可用,Droplet 不会陷入紧急模式。discard 选项帮助文件系统支持基于 SSD 存储的 TRIM 命令。编辑 fstab 后,在重启前使用 sudo mount -a 测试以确保没有语法错误。

调整大小和在 Droplet 之间移动 Volume

根据我们的实测——当 Volume 开始空间不足时,您可以从 Control Panel 和通过 doctl compute volume-action resize <volume-id> --region <region> --size <new-size> 扩展其大小。一个关键约束是调整大小仅单向进行——您只能扩展,永远不能缩小 Volume。如果您真的需要更小的 Volume,您必须创建一个新的并使用 rsync 之类的工具自己迁移数据。 当 DigitalOcean 调整大小时,它只会扩展块设备本身;内部的文件系统不会识别新空间,直到您明确告诉它。对于 ext4,运行 sudo resize2fs /dev/disk/by-id/scsi-0DO_Volume_data-volume-01,或对于 XFS 使用 sudo xfs_growfs /mnt/data-volume-01(注意:XFS 采用挂载点,而不是设备路径)。如果您跳过此步骤,新空间将不可用,即使调整大小成功。 要将 Volume 移动到不同的 Droplet,首先使用 doctl compute volume-action detach <volume-id> <droplet-id> 从旧 Droplet 分离它,然后附加到同一地区的目标 Droplet。所有数据完好传输。但如果您需要直接跨地区移动,这是不可能的,因为 Volumes 与创建它们的地区绑定。解决方法是先对原始 Volume 进行快照,然后使用该快照在目标地区创建新 Volume。提前规划分离/附加窗口,因为使用 Volume 数据的应用程序在其分离时将无法访问它。

Volume 快照:每月 $0.06/GiB

Volume Snapshot 是 Volume 数据的时间点副本,保留用于备份或稍后克隆到新 Volume。快照与活跃 Volumes 分开计费,每 GiB 每月 $0.06,比活跃 Volume 费率 $0.10 per GiB 每月便宜,使通过快照进行长期备份存储比保持待机 Volumes 更具成本效益。 通过 Control Panel 在 Volume 页面上创建快照,点击 Take Snapshot 并命名它,或使用 doctl compute volume snapshot create <volume-id> --snapshot-name data-volume-01-2026-07-17 自动化。对于通过脚本或 cron 工作的自动化,始终在快照名称中包含时间戳,这样当快照累积时您可以轻松管理保留和审查历史。 拥有快照后,使用 doctl compute volume create data-volume-restored --region sgp1 --size 100GiB --snapshot-id <snapshot-id> 从它创建新 Volume,这给您一个具有与源快照相同数据的新 Volume。这适用于在失败后恢复、克隆数据到另一个 Droplet 进行测试或跨地区迁移 Volume,如前面提到的。最佳实践是在有风险的更改(例如数据库版本升级或大型迁移)前快照,这样您就有明确的回滚点以防万一。

常见错误及其修复方法

最常见的错误是在将 Volume 添加到 /etc/fstab 时忘记 nofail 选项。后果是如果 Volume 因任何原因分离或在启动时出现临时连接问题,Droplet 将陷入紧急模式并且无法正常启动。预防很简单:在添加的每个 fstab 条目中始终包含 nofail。 第二个错误是直接按名称引用设备,如 /dev/sda/dev/sdb,而不是使用来自 /dev/disk/by-id/ 的路径。对于一个 Droplet 附加多个 Volumes 或重复分离/附加周期,sdX 设备名称可能在重启后改变,导致您挂载错误的 Volume 并冒险意外覆写数据。 第三个错误是不监控 Volume 上的可用空间。这导致磁盘突然满了,没有警告,导致应用程序无法写入文件或数据库停止工作。您应该启用 Monitoring Agent 并设置 Alert Policies 以在空间使用接近容量时通知您,这样您可以提前规划调整大小。 第四个错误是尝试将 Volume 附加到不同地区的 Droplet,这总是失败,因为 Volumes 绑定到创建它们的地区。第五个常见错误是误解调整大小可以缩小 Volume,而它只能扩展。如果您真的需要缩小,您必须创建更小的 Volume 并使用 rsync 之类的工具手动迁移数据。

最佳实践

对于生产工作负载,始终将数据 Volumes 与 Droplet 的主 OS 磁盘分离,这样您可以独立备份、调整大小或移动数据,而不会影响 Droplet 的操作系统和配置。例如,保持数据库的数据目录在单独的 Volume 上,而 OS 和应用程序照常位于主磁盘。 清晰地命名和标记 Volumes 以指示其目的——在名称中包含环境(dev/staging/prod)和地区,这样您的团队可以更容易地管理一个帐户中的许多 Volumes,并降低意外删除或分离错误的风险。 在备份方面,通过 cron 工作设置自动快照计划,调用 doctl compute volume snapshot create 定期进行——取决于数据重要性的每天或每周一次——并建立保留策略以删除不再需要的旧快照以控制成本,因为快照像 Volumes 一样按大小连续计费。 在您的 Droplet 上启用 Monitoring Agent 并配置 Alert Policies 以在 Volume 空间使用接近容量时通知您,这样您可以在问题发生前提前规划调整大小。也避免在 Volumes 上放置交换文件,因为内部连接的网络延迟比本地磁盘高,使其不适合交换需求的高随机访问速度。 最后,即使没有紧急情况,也要定期测试从快照恢复的过程以确保快照在您需要时实际工作,并保持映射 Volumes 到其 Droplet 的文档,这样您的团队在增长和积累更多 Volumes 时可以轻松找到这些信息。

领取 $200 免费额度 →

常见问题(FAQ)

Volumes 可以跨地区移动吗?
不可以直接移动。Volumes 与创建它们的地区绑定。移动的方式是先对原始 Volume 进行快照,然后从该快照在目标地区创建新 Volume。
一个 Volume 可以同时附加到多个 Droplet 吗?
通常不可以。Volumes 被设计为一次附加到一个 Droplet。如果您需要多个 Droplet 同时访问相同的文件,请考虑使用 Spaces Object Storage。
如果我删除 Droplet,附加的 Volume 也会消失吗?
不会。Volumes 具有与 Droplet 分离的独立生命周期。数据完全完整保留直到您明确删除 Volume,但如果您不删除它,您会继续为其付费。
调整 Volume 大小前需要关闭 Droplet 吗?
不必要,但为了安全起见,您应该预先卸载或备份数据。调整大小完成后,您必须运行 resize2fs(ext4)或 xfs_growfs(XFS)以扩展文件系统以使用新空间。
我应该为 Volume 选择 ext4 还是 XFS?
两者都可以。ext4 更简单,适合使用小到中型文件的一般使用。XFS 更适合大文件或需要更高性能和可扩展性的数据库。
Snapshot 和 Resize 之间的区别是什么?
Snapshot 创建 Volume 数据的时间点副本用于备份或克隆新 Volume。Resize 直接扩展原始 Volume 的容量,与备份无关。