Hacker News new | ask | show | jobs
by bbunix 2685 days ago
Historic note (like from the 80's) - any time a machine was rebooted we'd type sync; sync; sync; reboot - the explanation was that the only guarantee was that the second sync wouldn't start until the first sync successfully completed, plus one for good luck...
3 comments

https://utcc.utoronto.ca/~cks/space/blog/unix/TheLegendOfSyn...

  people were told 'do several sync commands, typing each by hand'

  But this mutated to just 'sync three times', so of course people started writing 'sync; sync; sync'
I still type sync (just once) before I reboot. Just a habit.
The last thing I do before I leave my work desktop for the day is

    ./eod.sh && sync && sync
20+ year old habits die hard.
The only machine I ever developed on that needed a sync before reboot was an ancient SPARC workstation.

I forgot to sync almost every time, but it would always boot after a fsck.

I always get some kind of error message from dmraid about having been unable to stop the RAID array on shutdown/reboot. I thus manually do a sync(1) in hopes that the data survives. Hasn't failed me thus far, at least.
I have a flash drive that I sometimes put a video on to watch it on a small TV in the basement and I've noticed that Linux doesn't copy the file right away. The 'cp' does finish quickly but the data is not on the flash drive yet. You either have to eject and wait or sync and wait for it to actually transfer.

Needless to say, this tripped me up few times and videos weren't fully transferred.

I also noticed that on Gnome. I never investigated the implementation details of that progress bar but my gut feelings is that the file is read from (or written to) the buffer cache quickly and the progress bar goes near to 100%, then stays there until the last writes succeed and actually write to the USB stick. Then the eject button sometimes need extra time to finish the sync and tells me to wait a little. I always remove the stick when it tells me it's safe to do it.
Your intuition is correct. The writes are quickly buffered to RAM and then fsync or close writes them out to the slo media. The (naive) progress bar probably only tracks progress buffering the writes — it's the simplest way to track progress, if inaccurate.
Yes. You can also run "watch cat /proc/meminfo" in console and watch "Dirty" and "Writeback" fields to see dynamics (and how long you have to wait).
That behaviour is defined by a mount option.
What's the proper way to mount flash devices?
Try the sync option. From the man page:

> All I/O to the filesystem should be done synchronously. In the case of media with a limited number of write cycles (e.g. some flash drives), sync may cause life-cycle shortening.

Thanks so much!
"sync;sync;halt" - followed by turning off the power so we could open up the cabinet to do maintenance...