Is rename() without fsync() safe?

No. Look at libeatmydata, and this presentation: Eat My Data: How Everybody Gets File IO Wrong http://www.oscon.com/oscon2008/public/schedule/detail/3172 by Stewart Smith from MySql. In case it is offline/no longer available, I keep a copy of it: The video here The presentation slides (online version of slides)