diff --git a/roles/debian_server/files/btrfs-scrub b/roles/debian_server/files/btrfs-scrub
deleted file mode 100755
index c20dfdd2e69260dbc416ded4ce6638b78e59ba14..0000000000000000000000000000000000000000
--- a/roles/debian_server/files/btrfs-scrub
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-set -eu
-
-for mp in $(lsblk --list --noheadings --output fstype,mountpoint | \
-            awk '$1 == "btrfs" {print $2}' | \
-            sort -u)
-do
-    # In case there are no btrfs volumes, the for loop will execute once with an
-    # empty string for mp. Validate that indeed we're passed a mountpoint.
-    [ -d "$mp" ] || continue
-    status="$(btrfs scrub status "$mp" | awk '$1 == "Status:" {print $2}')"
-    if [ "$status" = 'running' ]
-    then
-        echo "Scrub already running on $mp, skipping." >&2
-        continue
-    fi
-    btrfs scrub start "$mp" >&2
-done
diff --git a/roles/debian_server/files/scrub.service b/roles/debian_server/files/scrub.service
deleted file mode 100644
index 62f1c8d1784d0441a3b1f9c2b51fa1356cb597f2..0000000000000000000000000000000000000000
--- a/roles/debian_server/files/scrub.service
+++ /dev/null
@@ -1,8 +0,0 @@
-[Unit]
-Description=Scrub btrfs volumes
-ConditionACPower=true
-After=local-fs.target
-
-[Service]
-Type=oneshot
-ExecStart=btrfs-scrub
diff --git a/roles/debian_server/tasks/main.yml b/roles/debian_server/tasks/main.yml
index 1c262bf3abaa979a98c619e6dd7619c7a44ad264..2410c419997f2c7b5b40d0f5125df1890e4ef41b 100644
--- a/roles/debian_server/tasks/main.yml
+++ b/roles/debian_server/tasks/main.yml
@@ -235,23 +235,34 @@
     name: update.timer
     state: started
 
-- name: Copy the btrfs scrub script
-  ansible.builtin.copy:
-    dest: /usr/local/sbin/btrfs-scrub
-    mode: 0o0755
-    src: btrfs-scrub
+- name: Create btrfs scrub services
+  # yamllint disable rule:line-length
+  loop: &btrfs_devices |-
+    {{ ansible_mounts|selectattr("fstype", "equalto", "btrfs")|map(attribute="device")|unique }}
+  # yamllint enable rule:line-length
+  ansible.builtin.template:
+    dest: /etc/systemd/system/scrub{{ name }}.service
+    mode: 0o0644
+    src: scrub.service.j2
+  vars: &btrfs_vars
+    device: '{{ item }}'
+    name: '{{ item|replace("/", "_") }}'
+  tags: [scrub]
 
-- name: Copy btrfs scrub service and timer
-  loop:
-    - scrub.service
-    - scrub.timer
-  ansible.builtin.copy:
-    dest: /etc/systemd/system
+- name: Create btrfs scrub timers
+  loop: *btrfs_devices
+  ansible.builtin.template:
+    dest: /etc/systemd/system/scrub{{ name }}.timer
     mode: 0o0644
-    src: '{{ item }}'
+    src: scrub.timer.j2
+  vars: *btrfs_vars
+  tags: [scrub]
 
-- name: Enable the btrfs scrub timer
+- name: Enable the btrfs scrub timers
+  loop: *btrfs_devices
   ansible.builtin.systemd:
     enabled: true
-    name: scrub.timer
+    name: scrub{{ name }}.timer
     state: started
+  vars: *btrfs_vars
+  tags: [scrub]
diff --git a/roles/debian_server/templates/scrub.service.j2 b/roles/debian_server/templates/scrub.service.j2
new file mode 100644
index 0000000000000000000000000000000000000000..363628acf603a2c53f392f0cf969244d09893b8d
--- /dev/null
+++ b/roles/debian_server/templates/scrub.service.j2
@@ -0,0 +1,9 @@
+# vim: filetype=systemd
+[Unit]
+Description=Scrub btrfs device {{ device }}
+ConditionACPower=true
+After=local-fs.target
+
+[Service]
+Type=exec
+ExecStart=btrfs scrub start -B {{ device }}
diff --git a/roles/debian_server/files/scrub.timer b/roles/debian_server/templates/scrub.timer.j2
similarity index 51%
rename from roles/debian_server/files/scrub.timer
rename to roles/debian_server/templates/scrub.timer.j2
index 849656575316cc6206698771d3d778fe028d5b5d..88e9a6efe7bee79c369245997cadf45e651c422c 100644
--- a/roles/debian_server/files/scrub.timer
+++ b/roles/debian_server/templates/scrub.timer.j2
@@ -1,5 +1,6 @@
+# vim: filetype=systemd
 [Unit]
-Description=Scrub btrfs volumes
+Description=Scrub btrfs device {{ device }}
 
 [Timer]
 OnCalendar=weekly