Проблема в том, что выход железа из строя невозможно определить программно. Не запишется какой-то код в errno и не будет никаких исключений, поэтому так запросто свой код не обезопасить.
К программному обеспечению должны быть установлены какие-то требования, которые описывают его безопасность и отказоустойчивость. Вполне возможно не вся программа должна обладать такими характеристиками, а только её какая-то критическая часть. В таком случае, необходимо обеспечивать критически важные модули/участки дополнительными средствами, сохранением состояния, выполнением запросов в транзакциях и т.д.
В твоём случае добиться этого не так-то просто, потому что отказ во время создания бекапа всё равно приведёт к полному, тотальному и бесповоротному...