I was observing the use of the sync command and I have read that this command makes sure that anything in memory is written to disk.

As I was thinking of installing Ubuntu on a removable disk (USB) I would like to know if it is necessary to execute this command.

It worries me that when turning off the computer, if data are still being written, they end up losing because of the system shutdown.

Is it necessary to run sync before shutting down or restart the system?

Does anyone explain more about this?

  • I have been running Ubuntu from Flash drive for over 12 years and do not recall ever loosing any data with a Full install and letting the machine shut down before yanking the USB. ext4 is a journaling file system. Never tried sync. – C.S.Cameron Jan 8 '19 at 12:56

Data can be lost during unexpected shutdowns or system crashes - when the operating system cannot actually flush the data from memory to disk. During normal shutdown or restart the operating system is still in control, so it will write data to disk.

In other words, normal shutdowns/reboots are OK. There is also something know as halt state - where machine is still running, but OS has went through shutdown process and relinquished control of the hardware. In such case, powering off the machine is also OK. What's not OK is abnormal power offs and shutdowns.

| improve this answer | |
  • It would be a good idea to sync before unmounting and unplugging a USB drive. – heynnema Jan 7 '19 at 16:17

The normal shutdown includes a sync at the end, after disks have been unmounted (or remounted read-only, in the case of the root file system). Normally, this should do nothing, as file systems are already synchronized on umount, so data should have been written during the "Unmounting file systems" stage.

Because network file systems can take arbitrarily long to unmount when the server is unreachable, certain init systems implement a timeout on umount, and because disks can not be unmounted if mountpoints inside them are still mounted, this can cause a cascading failure to unmount file systems cleanly, in which case there may still be unwritten data when the shutdown point is reached. The final sync then makes sure that no data is lost even if the file system is not cleanly unmounted. The file system check and/or journal replay (depending on file system) on the next boot should clean this up then.

The final sync runs at a time when (ideally) no read-write mounts exist, and no other program is still running, so no new write requests can be generated after this point. Zombie processes holding open file handles to deleted files should also have been cleaned up by this point.

Disks can implement their own caching, which is supposed to be fully transparent, but Linux generally sends a shutdown command to the drive nonetheless and waits for that to be reported as complete; drive firmware is generally smart enough to complete all pending writes before that.

For USB devices, SCSI commands are wrapped in USB packets, so the same sequence works for them, but because USB is a lot slower than SCSI, the kernel caches usually grow a lot bigger, so sync can take several minutes to complete here, but the kernel will dutifully wait.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.