To share our experience, we have a USB stick plugged into the master EX3400 and use it to store the update archive.
Usually this is still not enough to workaround space limitations and we also delete old packages manually. After our last update from 18.1R3-S5 to 18.1R3-S6, I put together the following command:
ls /packages/db/ | grep -vE `ls -l /packages/sets/active/ | grep '^l' | cut -d'/' -f 4 | tr '\n' '|' | sed 's/|$//'`
This should print all packages that are not referenced from /packages/sets/active/ which should be safe to remove. No guarantee that this works in all cases (it's your fault if you use it and it breaks), but might be easier than manually going through the entire directory manually 😉