Looks like the best way to handle this is to use direct file outputdirect file output. This way du readings will be much more accurate.
Unfortunately only dd allows that, so we need to workaround two problems:
dddoesn't know what to do with directoriesddcan only copy one file at a time
First let's define input and output directories:
SOURCE="/media/source-dir"
TARGET="/media/target-dir"
Now let's cd into the source directory so find will report relative directories we can easily manipulate:
cd "$SOURCE"
Duplicate the directory tree from $SOURCE to $TARGET
find . -type d -exec mkdir -p "$TARGET{}" \;
Duplicate files from $SOURCE to $TARGET omitting write cache (but utilising read cache!)
find . -type f -exec dd if={} of="$TARGET{}" bs=8M oflag=direct \;
This won't preserve file modification times, ownership and other attributes - but for me that's ok.