diff --git a/99-usb-sync.rules b/99-usb-sync.rules index 3c2aac8..b1d8fb4 100644 --- a/99-usb-sync.rules +++ b/99-usb-sync.rules @@ -1,10 +1,12 @@ # 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" +ACTION=="add|change", KERNEL=="sd[a-z]", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/bin/hdparm -W 0 /dev/%k" # # rules to impose buffer limits on USB devices # requires kernel > 6.1 # https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-bdi-bdi-strict-limit # https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-bdi-bdi-max-ratio # https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-bdi-bdi-max-bytes -ACTION=="add|change", KERNEL=="sd[a-z]", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/bin/echo 1 > /sys/block/%K/bdi/strict_limit", RUN+="/usr/bin/echo 50 > /sys/block/%K/bdi/max_ratio", RUN+="/usr/bin/echo 16777216 > /sys/block/%K/bdi/max_bytes" +# implemented using /usr/bin/udev-usb-tweak.sh +# optional configuration in /etc/udev-usb-tweak/udev-usb-tweak.sh +ACTION=="add|change", KERNEL=="sd[a-z]", ENV{ID_USB_TYPE}=="disk", RUN+=/usr/bin/udev-usb-sync.sh %k" diff --git a/PKGBUILD b/PKGBUILD index 01e1ba3..4a7952a 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,17 +1,25 @@ -# Maintainer: +# Maintainer: root.nix.dk pkgname='udev-usb-sync' -pkgver=0.1 -pkgrel=1 -pkgdesc='Disable writecache when USB storage device is plugged' +pkgver=0.3 +pkgrel=6 +pkgdesc='Fine tune write cache when USB storage device is plugged' arch=('any') url='https://codeberg.org/wonky/udev-usb-sync' license=('MIT') depends=('hdparm') provides=("${pkgname}") -source=('99-usb-sync.rules') -sha256sums=('ed0253bbbd5b64529efd752978ba17176e3ff23d3f7f220bbacd3fa3a3691df9') +backup=("etc/${pkgname}/${pkgname}.conf") +install=${pkgname}.install +source=('99-usb-sync.rules' 'udev-usb-sync.sh' 'udev-usb-sync.conf') +sha256sums=('39e714df856c8d47fe14365b854b9a1b36ed3afa300383d8329452394a01a1c4' + '2669e043722b33009798c8c30f48414e1eaad0f001631587f502b19a2f11feb7' + 'bc902da2c453355e1dbc3a970a564daf71d41c6278dc771a930aa3badb90e453') package() { install -d -m755 $pkgdir/etc/udev/rules.d - cp ${startdir}/99-usb-sync.rules "${pkgdir}/etc/udev/rules.d" + install -d -m755 $pkgdir/etc/$pkgname + install -d -m755 $pkgdir/usr/bin + cp ${srcdir}/99-usb-sync.rules "${pkgdir}/etc/udev/rules.d" + cp ${srcdir}/${pkgname}.sh "${pkgdir}/usr/bin" + cp ${srcdir}/${pkgname}.conf "${pkgdir}/etc/${pkgname}" } diff --git a/udev-usb-sync.conf b/udev-usb-sync.conf new file mode 100644 index 0000000..31683ee --- /dev/null +++ b/udev-usb-sync.conf @@ -0,0 +1,5 @@ +# default values +#use_tweaks=1 +#max_bytes=16777216 +#max_ratio=50 +#strict_limit=1 diff --git a/udev-usb-sync.install b/udev-usb-sync.install new file mode 100644 index 0000000..7b7452a --- /dev/null +++ b/udev-usb-sync.install @@ -0,0 +1,11 @@ +post_install() { + udevadm control --reload +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} diff --git a/udev-usb-sync.sh b/udev-usb-sync.sh new file mode 100755 index 0000000..392a1a1 --- /dev/null +++ b/udev-usb-sync.sh @@ -0,0 +1,26 @@ +#!/usr/bin/bash +# +# script to tweak USB storage device filesystem sync +# +# sources /etc/usb-dev-sync/usb-dev-sync.conf +# + +use_tweaks=1 +max_bytes=16777216 +max_ration=50 +strict_limit=1 + +# read user config +source /etc/udev-usb-sync/udev-usb-sync.conf + +if [[ "$use_tweaks" = 0 ]]; then + exit 0 +fi + +if [[ -z "$1" ]]; then + exit 1 +fi + +echo "$max_bytes" > "/dev/block/$1/bdi/max_bytes" +echo "$max_ration" > "/dev/block/$1/bdi/max_ratio" +echo "$strict_limit" > "/dev/block/$1/bdi/strict_limit"