ZFS:在zpool中的所有磁盘上重新分配zvol?


12

有没有一种方法可以提示ZFS在其zpool中的所有磁盘上重新分配给定的文件系统?

我正在考虑一种方案,其中我将固定大小的ZFS卷作为FC上的LUN导出。当前的zpool很小,只有两个1TB镜像磁盘,而zvol总计为750GB。如果我要突然将zpool的大小扩展到12个1TB磁盘,我相信zvol仍然只能有效地“容纳”在前两个主轴上。

鉴于有更多的主轴=更多的IOPS,我可以使用哪种方法在所有12个主轴上“重新分配” zvol以利用它们?

Answers:


8

您需要将数据重写到扩展的zpool以便重新平衡。否则,随着时间的流逝,您的写操作将分布在整个池中。


我不认为有一种快速简便的方法可以做到这一点...?
增长

7
zfs send | zfs recv
the-wabbit 2011年

我要去测试-不能相信这么简单的事情就能做到。:)
增长

3
一定要报告,我从未做过,也很好奇。
StrangeWill 2012年

3

没有理由将zvol仅存储在初始设备上。如果扩大池,ZFS将在所有可用的基础设备上扩展更新的数据。ZFS没有固定的分区。


4
以我的经验,这是不正确的。尽管没有“固定分区”,但ZFS不会在客户端IO请求之外随意移动数据。如果创建了我描述的场景,添加了更多磁盘,然后在原始LUN上进行了一些繁重的IO操作,则只能看到阵列中前两个磁盘上的活动,因为这就是数据所在的位置。ewwhite指出,随着时间的流逝,它会变得平衡,但是我很好奇,是否有更快的方法可以做到这一点。
增长

1
对不起,如果我不清楚。当然,现有数据不会神奇地移动。仅更新的数据将被均匀地重定位。这就是我所说的“新IO”。就现有静态数据而言,只要读取块不止一次,缓存还将提高性能。
jlliagre 2011年

0

这是ewwhite的回答的“延续”:

您需要将数据重写到扩展的zpool以便重新平衡

我编写了一个PHP脚本(可在github上找到),以在Ubuntu 14.04主机上实现此操作的自动化。

只需安装PHP CLI工具sudo apt-get install php5-cli并运行脚本,然后将路径传递到池数据作为第一个参数即可。例如

php main.php /path/to/my/files

理想情况下,您应该对池中的所有数据运行两次脚本。第一次运行将平衡驱动器利用率,但是单个文件将被过度分配给最后添加的驱动器。第二次运行将确保每个文件在驱动器中“公平”分布。我说的不是平均数,而是因为如果您不像我对RAID 10的不同大小对(4TB镜像+ 3TB镜像+ 3TB镜像)那样混合驱动器容量,它只会平均分配。

使用脚本的原因

  • 我必须“就地”解决问题。例如,我无法将数据写出到另一个系统,请在此处将其删除,然后再将其全部写回。
  • 我的存储池容量已超过50%,因此不能在删除原始文件之前立即复制整个文件系统。
  • 如果只有某些文件需要良好的性能,则只需对这些文件运行两次脚本即可。但是,仅当第一次运行设法成功平衡驱动器利用率时,第二次运行才有效
  • 我有很多数据,希望能够看到进度指示。

如何判断是否达到了硬盘利用率?

在一段时间内使用iostat工具(例如iostat -m 5)并检查写入。如果它们相同,那么您已经实现了平均分布。即使在下面的屏幕快照中,它们也不是完美的,因为我在RAID 10中运行一对4TB和2对3TB驱动器,因此两个4的写入将稍微多一些。 在此处输入图片说明

如果您的驱动器利用率“不平衡”,则iostat将在下面的屏幕截图中显示更多类似新驱动器的地方。您还可以说它们是新驱动器,因为读取为0,因为它们上没有数据。 在此处输入图片说明

该脚本并不完美,仅是一种解决方法,但在此之前它对我一直有效,直到ZFS一天实现了BTRFS拥有的重新平衡功能(手指交叉)。


噢,我的...哇...
ewwhite

0

好吧,这有点骇人听闻,但是鉴于您已经使用zvol停止了计算机,因此zfs可以将文件系统发送到本地主机上名为bar.zvol的本地文件,然后再次收到文件。那应该为您重新平衡数据。

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

我发现的最佳解决方案是在扩展池中复制一半数据,然后删除原始重复数据。


3
你能详细说明吗?
ewwhite 2012年

@reco:zvols不是文件系统,因此您无法删除或复制它们上的数据。您可能会覆盖数据,但是除非您使用可以有效跨越基础卷上数据的相同内容来进行处理,否则它将损坏数据,但这是ewwhite一年前已经建议的。
jlliagre 2012年

你是对的。我环顾四周并研究相同的主题。我意识到的是,通过zfs不需要在vdev上重新分配数据。但是如果您仍然出于任何原因仍想复制数据并删除原始文件,将会加快zfs的处理速度。
reco 2012年

1
通过vdev重新分发数据是合法请求。恐怕您仍然缺少关于zvols而不是文件系统的问题。您无法复制或删除卷上的数据,这没有任何意义。
jlliagre 2012年

嗨,jlliagre。是的,您是对不起
reco 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.