Parece que você ignorou algo aqui:
for i in 'ls *.rrd'; do rrdtool dump $i > '/mnt/maindrv/'.$i.'xml'; done
Em alguns idiomas o . é usado para concatenar variáveis, mas no Bash é um ponto literal.
Por exemplo, se você tiver um arquivo hello.rrd , o comando colocará o despejo em:
/mnt/maindrv/.hello.rrd.xml
Como o arquivo começa com um ponto, ls /mnt/maindrv/ não o listará, mesmo que esteja lá.
Outra coisa, você não deve percorrer ls *.rrd , mas simplesmente *.rrd .
Isso não está relacionado à sua pergunta, mas a uma prática ruim.
Isso deve fazer o que você precisa, mais limpo e melhor:
for i in *.rrd; do rrdtool dump "$i" > "/mnt/maindrv/$i.xml"; done