I set up a 3 DN node cluster, each one with 2 small disks. After creating some files to fill HDFS, I added two more small disks to one DN. And run the diskbalancer on this DataNode.
The disk usage before running diskbalancer:
However, after running diskbalancer (i.e., -query shows PLAN_DONE)
It is suspicious that in DiskBalancerMover#copyBlocks, every return does this.setExitFlag which prevents copyBlocks() be called multiple times from DiskBalancer#executePlan.