我遇到过这样的情况:我需要在 Amazon EC2 中运行的 Linux 计算机上动态扩展存储空间,于是我想到了 ZFS。如果我没记错的话,ZFS 支持一种动态扩展非冗余类 JBOD 阵列的方法。
我对正在进行的项目有一些要求:
- 如果需要的话,我应该能够将阵列移动到另一个 EC2 实例。
- 我应该能够动态扩展 ZFS 阵列,向 ZFS 卷添加新的“驱动器”,而无需任何停机。
这可能吗?如果 ZFS 提供动态扩展阵列的功能,我应该能够运行一个脚本来动态创建新的 EBS 卷,将它们附加到 EC2 实例,并让 ZFS 将它们添加到其池中,所有这些都是动态的,无需停机。
答案1
Linux 上的 ZFS 并没有拥有足够的追随者,无论追随者有多少。 ZFS 将有效地将您锁定。底层格式与救援磁盘不兼容,并且您会发现 ZFS 的发行版很少见。
由于我对 ZFS 的偏见,我倾向于忽略这些限制。您可能需要搜索提供基于 SmartOS/ZFS 的云托管的服务提供商。
Linux 文件系统 ext3/ext4 以及可能的其他各种文件系统确实允许动态增长。 Linux 中内置的卷管理器 LVM 还允许您将卷动态扩展到新磁盘上。对于除了实验之外的任何事情,这都必须是当前最好的 Linux 推荐,尽管一旦 ZFS 在 Linux 上获得了足够多的追随者,这种情况就会改变。
Linux + LVM + ext3 的流程是:
示例:LVM 卷组 myvg,挂载的卷名称为 uservol1,Linux 中的磁盘设备为 /dev/sdf
- 将磁盘分配给虚拟机。 (在 Amazon 管理控制台中,创建 EBS 卷,记下其 ID,并将其分配给实例)
- EC2 实例应该有一些用于创建设备节点的 udev 规则。因此,您应该在 /dev/sd* 中看到一个新磁盘...登录实例并检查 EBS 卷是否可见,例如 fdisk -l /dev/sdf、cat /proc/partitions、运行 blkid。
- 如果需要创建分区表:
fdisk / sfdisk
- 初始化以供 LVM 使用:
pvcreate /dev/sdf
- 将磁盘(物理卷)添加到LVM卷组中
vgextend myvg /dev/sdf
- 增加卷大小:
lvextend -L +1024G /dev/myvg/uservol1
- 扩展 ext3/ext4 文件系统:
resize2fs /dev/myvg/uservol1
- 检查 (
df -h
),您应该看到已安装的文件系统现在有更多空间。
量子电子器件。
答案2
是的,您绝对可以使用 ZFS 自动扩展阵列。您只需要设置以下属性:
# zpool set autoexpand=on pool
# zpool set expandsize=on pool
这些属性将为您带来两个好处。
- 当您将任何 VDEV 添加到池中时,它将自动扩展
- 当您将 1TB 驱动器替换为 2TB 驱动器时,更换所有驱动器后,池将自动调整大小以适应新的驱动器大小。
有一些注意事项:
- 您无法删除驱动器,也无法从池中删除 VDEV。因此,虽然您可以扩大池子,但不能缩小池子。但是,您只能将驱动器与镜像分离。
- 所有驱动器应具有相同的规格:相同的尺寸、相同的速度等。相同的品牌和型号不是必需的。
- 所有 VDEV 应该是相同的 VDEV。如果您的池中有一个 RAIDZ,则所有 VDEV 都应该是 RAIDZ。
- 所有 VDEV 的大小应相同。如果一个VDEV是2TB。所有 VDEV 应为 2TB。