[How To] Disable write-cache for USB storage

Linux filesystem cache

Linux agressively caches files in order to improve overall performance.

When copying large amount of files to an USB storage this often results in some wait time until the device can be safely removed.

How long you have to wait depends on your system and the quality of the USB storage device.

Numerous issues regarding this has resulted in various suggestions involving sysctl tweaks and trim.

udev rule to disable write-cache

In another topic [1] [2] one user threw in an udev rule which would disable write-cache for devices when they were added and while it was just an idea - it triggered my curiosity.

I dug into the intricacies of udev and found a method to only target USB storage devices.

The final rule

# rule to disable write cache for usb storage
# requires hdparm to be installed
ACTION=="add|change", KERNEL=="sd[a-z]", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/bin/hdparm -W 0 /dev/%k"

The rule activates on

  • add or change
  • kernel event involvinig disk devices sd[a-z]
  • only if the device environment ID_USB_TYPE==‘disk’
  • run hdparm -W 0 /dev/%K

Create a file in /etc/udev/rules.d/99-usb-sync.rules and paste above content into the file and save it.

Install hdparm package.

sudo pacman -Syu hdparm

Then plug an usb device - open in your file manager - copy a huge amout of files to the device - when the copy is done - click eject in the file manager - and note how quickly the device ejects.

For those preferring that I have created a PKGBUILD for it which will pull the hdparm dependency upon installation.

yay udev-usb-sync

It should come with a disclaimer: Do this at your own risk and responsibility! If you experience data loss then it’s only your problem. There is no support provided by the EndeavourOS team or any other organization if the events described above are tried and there is data loss or another catastrophe.

All it needs is that triangle yellow sign that pebcak put on the disclaimers…

There is no data loss when you disable write-cache for a given device.

You may however experience dataloss if you get impatient and then yank the device before the cache has been flushed.

It is the impatient scenario where this udev rule can help mitigate and perpaps prevent dataloss.

sda, which is a hard disk
Does it mean that it disables the cache for the hard disk?
How does it recognize that, sda is usb or hard disk?

1 Like