在磁盘之间平均分配目录的内容 - 向上舍入到最近的顶级目录

在磁盘之间平均分配目录的内容 - 向上舍入到最近的顶级目录

我有一个音乐目录和一个带两个 SD 卡插槽的 MP3 播放器。该目录的内容对于一张卡来说太大了,所以我想将其分成两张。

我喜欢按字母顺序排列东西。如果我填满了 SD1,而 SD2 部分为空,那么每当我添加新音乐时,我要么必须通过在 SD2 上添加新内容来打破字母顺序,要么重新调整周围的所有内容。

另一件事是,我的目录是按艺术家分组的,所以如果我在 SD1 上收到某个艺术家的新专辑,它就不适合。

简而言之,我希望两张卡的填充量大致相等。

现在我的解决方案其实还可以:

  1. 列出目录并将列表输出到文件
  2. 打开文件并找到中间点(我确信有一个聪明的方法可以做到这一点,但在 vim 中手动完成很快)
  3. 剪切列表的下半部分并将其粘贴到第二个文件中
  4. rsync --files-from=在 SD1 上使用一个文件运行,在 SD2 上使用下一个文件运行。任务完成!

但这让我开始思考,是否有更准确的方法来做到这一点,以便两张 SD 卡更均匀地填充?你会怎么做呢?

我想我可能不得不

  1. 在音乐目录上运行du以查找totalSize.
  2. 然后循环遍历每个艺术家目录以获取它们的尺寸并保持运行总数。
  3. 一旦总数超过totalSize * 0.5,输出您刚刚计算的所有目录的列表以获得前半部分,并将其余部分放入第二个文件中以获得另一半?
  4. 从文件执行相同的 rsync

谁有更好的想法吗?

答案1

所以,有点讽刺的是,这将是真的如果这两个 SD 卡位于同一网络上的两台独立计算机,则很容易做到,因为有各种集群存储解决方案可以完全满足您的要求。

然而,考虑到这不是一个非常现实的选择(使用集群文件系统对此来说太过分了),您最好的选择可能是一个名为 mhddfs 的程序。官方主页是俄语的,但是有一个不错的帖子这里关于它,它打包了许多不同的发行版。本质上,它执行的是文件级 RAID。这里的一大优点是,一旦设置了 mhddfs 挂载,您实际上只需调用rsync一次即可。每个文件最终都将完全位于一个文件系统上,并且它将智能地管理跨文件系统的分发。此外,它不会在底层设备上存储任何状态(它只是查看设备上的数据分布,以找出放置新创建的文件的位置,并正确检查所有文件中是否存在现有文件),因此不会浪费任何数据。空间也可以。

相关内容