ZFS-inplace-rebalancing安全使用指南避免数据丢失的关键步骤【免费下载链接】zfs-inplace-rebalancingSimple bash script to rebalance pool data between all mirrors when adding vdevs to a pool.项目地址: https://gitcode.com/gh_mirrors/zf/zfs-inplace-rebalancingZFS-inplace-rebalancing是一款简单实用的bash脚本工具专为ZFS存储池设计能够在添加vdevs后在所有镜像之间重新平衡池数据。对于新手用户来说正确使用该工具可以有效优化存储池性能但操作不当可能导致数据丢失因此掌握安全使用方法至关重要。 重要提醒优先考虑官方解决方案在开始使用本脚本之前强烈建议检查您的ZFS版本。ZFS 2.3.3及以上版本已引入zfs rewrite命令该命令专门用于解决数据重平衡问题且避免了本脚本可能存在的大多数隐患。您可以通过官方文档了解更多关于zfs rewrite的信息。 了解ZFS-inplace-rebalancing的工作原理该脚本通过递归遍历指定目录中的所有文件为每个文件创建一个带有.balance后缀的副本并保留所有文件属性。然后删除原始文件将副本重命名回原始文件名。在复制文件时ZFS会将数据块分布到所有vdevs上从而实现数据的重新平衡。对于硬链接文件组脚本会复制组中的一个文件删除原始文件和所有硬链接将副本重命名回原始文件名然后从该副本生成新的硬链接来替换所有被删除的链接文件。需要注意的是此过程并非完全原地进行因为在删除原始文件之前必须创建文件的完整副本。因此您的存储池必须有足够的空间来容纳目标目录中最大文件的副本。 安全使用的前提条件检查存储池平衡状态在进行重平衡之前首先需要检查当前存储池的平衡状态。使用以下命令zpool list -v查看输出中各vdevs之间的CAP值SIZE/FREE与ALLOC的比率差异。如果不同vdevs的CAP值差异较大则说明存储池需要进行重平衡。禁用 deduplication由于脚本的工作原理是故意创建重复文件因此如果启用了deduplication重复数据删除将严重影响脚本的正常工作。如果您使用了deduplication可能需要考虑其他更复杂的重平衡方法这些方法通常需要额外的存储设备。选择合适的数据冷数据务必只对不被主动访问的数据运行此脚本因为原始文件会被删除。如果在文件被访问时执行脚本可能导致数据损坏或应用程序错误。谨慎处理快照如果在开始重平衡脚本之前对要平衡的数据进行快照ZFS需要同时跟踪目标目录中的所有数据两次一次在快照中一次在新副本中。这意味着您实际上将使用目标目录中所有文件大小的两倍空间。因此建议分批处理池数据并在过程中删除旧快照以避免达到存储池的容量限制。️ 安装ZFS-inplace-rebalancing由于这是一个简单的bash脚本无需安装包。只需下载脚本并使其可执行git clone https://gitcode.com/gh_mirrors/zf/zfs-inplace-rebalancing cd zfs-inplace-rebalancing chmod x ./zfs-inplace-rebalancing.sh脚本依赖perl- 大多数系统默认已安装awk- 大多数系统默认已安装 安全使用步骤与示例基本使用方法重要提示始终备份您的数据运行不带任何参数的脚本可以打印帮助信息./zfs-inplace-rebalancing.sh关键参数说明参数名称描述默认值-c--checksum是否使用MD5校验和比较复制文件的属性和内容。这在技术上是冗余检查会消耗大量资源请谨慎使用。true-p--passes每个文件的最大重平衡次数。将此值设置为 0表示无限次这在重平衡大量小文件时可能提高性能。1--debug显示额外输出包括三次列出目标位置的所有文件列表、inode排序列表、inode分组以及更详细的移动/复制/链接/计数事务信息。false安全执行示例确保以对目标目录中所有文件具有读写权限的用户运行此脚本。最简单的方法是以root用户身份运行脚本sudo su ./zfs-inplace-rebalancing.sh --checksum true --passes 1 /pool/path/to/rebalance要跟踪平衡进度可以打开另一个终端并运行watch zpool list -v将输出记录到文件要将输出写入文件只需将标准输出和错误输出重定向到文件或单独的文件。由于这会重定向所有输出您需要跟踪日志文件的内容以获取实时信息# 一个终端窗口 tail -F ./stdout.log # 另一个终端窗口 ./zfs-inplace-rebalancing.sh /pool/path/to/rebalance ./stdout.log 2 ./stderr.log⚠️ 风险防范与注意事项先进行小范围测试虽然脚本有进度输出文件数和百分比但建议先尝试一个小子文件夹或者手动选择池文件夹布局进行分批处理。这样可以在发生意外时限制损失。处理中途中断如果在脚本运行中途中止务必检查输出的最后几行。如果在重命名过程之前或期间取消可能会留下.balance文件您需要手动重命名或删除它。多次运行的注意事项--passes参数用于限制每个文件的最大重平衡次数但它仅用于加速中止的运行。单个文件不会自动处理多次。要实现多次传递必须在同一目标目录上多次运行脚本。使用Docker运行可选为提高可移植性此脚本也可以使用Docker运行sudo docker run --rm -it -v /your/data:/data ghcr.io/markusressel/zfs-inplace-rebalancing:latest ./data 总结ZFS-inplace-rebalancing脚本为ZFS存储池提供了一种无需额外硬件即可实现数据重平衡的方法。然而安全使用至关重要。请始终记住优先考虑ZFS官方的zfs rewrite命令如果您的ZFS版本支持确保有足够的可用空间只对冷数据进行操作提前备份所有重要数据先在小范围数据上测试脚本通过遵循本指南中的步骤和注意事项您可以最大程度地减少数据丢失的风险安全地使用ZFS-inplace-rebalancing工具优化您的存储池性能。 免责声明本软件按原样和可用提供不提供任何保证。始终备份您的数据【免费下载链接】zfs-inplace-rebalancingSimple bash script to rebalance pool data between all mirrors when adding vdevs to a pool.项目地址: https://gitcode.com/gh_mirrors/zf/zfs-inplace-rebalancing创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
ZFS-inplace-rebalancing安全使用指南:避免数据丢失的关键步骤
发布时间:2026/7/4 9:33:02
ZFS-inplace-rebalancing安全使用指南避免数据丢失的关键步骤【免费下载链接】zfs-inplace-rebalancingSimple bash script to rebalance pool data between all mirrors when adding vdevs to a pool.项目地址: https://gitcode.com/gh_mirrors/zf/zfs-inplace-rebalancingZFS-inplace-rebalancing是一款简单实用的bash脚本工具专为ZFS存储池设计能够在添加vdevs后在所有镜像之间重新平衡池数据。对于新手用户来说正确使用该工具可以有效优化存储池性能但操作不当可能导致数据丢失因此掌握安全使用方法至关重要。 重要提醒优先考虑官方解决方案在开始使用本脚本之前强烈建议检查您的ZFS版本。ZFS 2.3.3及以上版本已引入zfs rewrite命令该命令专门用于解决数据重平衡问题且避免了本脚本可能存在的大多数隐患。您可以通过官方文档了解更多关于zfs rewrite的信息。 了解ZFS-inplace-rebalancing的工作原理该脚本通过递归遍历指定目录中的所有文件为每个文件创建一个带有.balance后缀的副本并保留所有文件属性。然后删除原始文件将副本重命名回原始文件名。在复制文件时ZFS会将数据块分布到所有vdevs上从而实现数据的重新平衡。对于硬链接文件组脚本会复制组中的一个文件删除原始文件和所有硬链接将副本重命名回原始文件名然后从该副本生成新的硬链接来替换所有被删除的链接文件。需要注意的是此过程并非完全原地进行因为在删除原始文件之前必须创建文件的完整副本。因此您的存储池必须有足够的空间来容纳目标目录中最大文件的副本。 安全使用的前提条件检查存储池平衡状态在进行重平衡之前首先需要检查当前存储池的平衡状态。使用以下命令zpool list -v查看输出中各vdevs之间的CAP值SIZE/FREE与ALLOC的比率差异。如果不同vdevs的CAP值差异较大则说明存储池需要进行重平衡。禁用 deduplication由于脚本的工作原理是故意创建重复文件因此如果启用了deduplication重复数据删除将严重影响脚本的正常工作。如果您使用了deduplication可能需要考虑其他更复杂的重平衡方法这些方法通常需要额外的存储设备。选择合适的数据冷数据务必只对不被主动访问的数据运行此脚本因为原始文件会被删除。如果在文件被访问时执行脚本可能导致数据损坏或应用程序错误。谨慎处理快照如果在开始重平衡脚本之前对要平衡的数据进行快照ZFS需要同时跟踪目标目录中的所有数据两次一次在快照中一次在新副本中。这意味着您实际上将使用目标目录中所有文件大小的两倍空间。因此建议分批处理池数据并在过程中删除旧快照以避免达到存储池的容量限制。️ 安装ZFS-inplace-rebalancing由于这是一个简单的bash脚本无需安装包。只需下载脚本并使其可执行git clone https://gitcode.com/gh_mirrors/zf/zfs-inplace-rebalancing cd zfs-inplace-rebalancing chmod x ./zfs-inplace-rebalancing.sh脚本依赖perl- 大多数系统默认已安装awk- 大多数系统默认已安装 安全使用步骤与示例基本使用方法重要提示始终备份您的数据运行不带任何参数的脚本可以打印帮助信息./zfs-inplace-rebalancing.sh关键参数说明参数名称描述默认值-c--checksum是否使用MD5校验和比较复制文件的属性和内容。这在技术上是冗余检查会消耗大量资源请谨慎使用。true-p--passes每个文件的最大重平衡次数。将此值设置为 0表示无限次这在重平衡大量小文件时可能提高性能。1--debug显示额外输出包括三次列出目标位置的所有文件列表、inode排序列表、inode分组以及更详细的移动/复制/链接/计数事务信息。false安全执行示例确保以对目标目录中所有文件具有读写权限的用户运行此脚本。最简单的方法是以root用户身份运行脚本sudo su ./zfs-inplace-rebalancing.sh --checksum true --passes 1 /pool/path/to/rebalance要跟踪平衡进度可以打开另一个终端并运行watch zpool list -v将输出记录到文件要将输出写入文件只需将标准输出和错误输出重定向到文件或单独的文件。由于这会重定向所有输出您需要跟踪日志文件的内容以获取实时信息# 一个终端窗口 tail -F ./stdout.log # 另一个终端窗口 ./zfs-inplace-rebalancing.sh /pool/path/to/rebalance ./stdout.log 2 ./stderr.log⚠️ 风险防范与注意事项先进行小范围测试虽然脚本有进度输出文件数和百分比但建议先尝试一个小子文件夹或者手动选择池文件夹布局进行分批处理。这样可以在发生意外时限制损失。处理中途中断如果在脚本运行中途中止务必检查输出的最后几行。如果在重命名过程之前或期间取消可能会留下.balance文件您需要手动重命名或删除它。多次运行的注意事项--passes参数用于限制每个文件的最大重平衡次数但它仅用于加速中止的运行。单个文件不会自动处理多次。要实现多次传递必须在同一目标目录上多次运行脚本。使用Docker运行可选为提高可移植性此脚本也可以使用Docker运行sudo docker run --rm -it -v /your/data:/data ghcr.io/markusressel/zfs-inplace-rebalancing:latest ./data 总结ZFS-inplace-rebalancing脚本为ZFS存储池提供了一种无需额外硬件即可实现数据重平衡的方法。然而安全使用至关重要。请始终记住优先考虑ZFS官方的zfs rewrite命令如果您的ZFS版本支持确保有足够的可用空间只对冷数据进行操作提前备份所有重要数据先在小范围数据上测试脚本通过遵循本指南中的步骤和注意事项您可以最大程度地减少数据丢失的风险安全地使用ZFS-inplace-rebalancing工具优化您的存储池性能。 免责声明本软件按原样和可用提供不提供任何保证。始终备份您的数据【免费下载链接】zfs-inplace-rebalancingSimple bash script to rebalance pool data between all mirrors when adding vdevs to a pool.项目地址: https://gitcode.com/gh_mirrors/zf/zfs-inplace-rebalancing创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考