make sure that if the syncfs never returns, we still cancel the syncfs r...

Make sure that if the syncfs never returns, we still cancel the syncfs restore job. Most of this change is just calling the `timeout(new Duration(seconds: 20)` Future timeout.

@umop