Using the SQLite backup API, which pretty much corresponds to the .backup CLI command. It doesn't block any reads or writes, so the performance impact is minimal, even if you do it directly to slow-ish storage.
That's neat! I bet it keeps growing a WAL file while the backup is ongoing right?
You may find sqlite_rsync better.