I initially started off exactly the way you're saying, but file::find and stat() was just too slow. FileList is a lot faster (no clue why). I need the entire scan to finish in one weekend, and there can be up to 80 million files to scan. That's also why I went for multithreading and etc. Im trying to squeeze any juice I can out of the resources I have to get this script to run in its allotted window.
As for your one scanner per disk suggestion, I don't think starting 300 scanners is the answer here. :)
I know it's ugly, and part of me weeps somewhere deep inside while I write this stuff, but requirements are making me do it. :(