Yeah that's quite big .. I assume you are operating on bare metal not vmware.
Have you considered splitting the .DATs across multiple NFS servers and performing a coordinated snapshot across all of them, and then backing them up with multiple agents? I'm not sure of the viability of this just a thought I've been having as we approach larger sizes too.
You may also simply be able to create multiple clones of the SNAP and back segments of the image up in each with multiple media agents. You are, however, inevitably backing up the full .DATs each time as you've no method to determine the changed blocks here.

Worth adding here obviously that although all of the above commentary is absolutely still true of IRIS, the above scripts don't work with IRIS because the command names have changed. We are working on local changes to our own scripts to support freeze/thaw of both platforms with the same script but that's not completed yet.

Cheers!

Indeed, that's what I did in my version. Not sure I see the need for the separate per-DB logfiles either but there can be complications wrt permissions in /var/log.

By the way you can use the following code to determine what userid csession has to run as for each instance "$INST":

    CACHEHOME="`/bin/ccontrol qlist | awk -F^ '$1=="'"${INST}"'" {print $2}'`"
    MANAGERUSER="`awk '/^security_settings.manager_user:/ {print $2}' ${CACHEHOME}/parameters.isc`"
 

Hmm, in the Freeze script is that a typo on the line:

$INST -U '%SYS' "##Class(Backup.General).ExternalFreeze(\"$LOGFILE\",,,,,,1800)" >> $SNAPLOG $

 .. shouldn't this be ..

$INST -U '%SYS' "##Class(Backup.General).ExternalFreeze(\"$LOGFILE\",,,,,,1800)" >> $SNAPLOG 2>&1

?

Also, as others have commented there are times when root can't do this, so you need to prefix the whole thing with:

  su - {cacheusr/cachesys} -c "freeze/thaw csession command" >> $SNAPLOG 2>&1

There's various methods for determining which user to use, unfortunately no API call or reliable "the username is in this file here" method, but you can check the process owner of the running cache instance, or you can check the ownership of the cache.cpf file for just two.