diff --git a/roles/debian_server/files/btrfs-scrub b/roles/debian_server/files/btrfs-scrub new file mode 100755 index 0000000000000000000000000000000000000000..ac980d35477713f3f7284d53a0c3bd9a5c3a9483 --- /dev/null +++ b/roles/debian_server/files/btrfs-scrub @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +for mp in $(lsblk --list --noheadings --output fstype,mountpoint | \ + awk '$1 == "btrfs" {print $2}' | \ + sort -u) +do + 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" + echo "Started scrub on $mp." >&2 +done diff --git a/roles/debian_server/files/scrub.service b/roles/debian_server/files/scrub.service new file mode 100644 index 0000000000000000000000000000000000000000..62f1c8d1784d0441a3b1f9c2b51fa1356cb597f2 --- /dev/null +++ b/roles/debian_server/files/scrub.service @@ -0,0 +1,8 @@ +[Unit] +Description=Scrub btrfs volumes +ConditionACPower=true +After=local-fs.target + +[Service] +Type=oneshot +ExecStart=btrfs-scrub diff --git a/roles/debian_server/files/scrub.timer b/roles/debian_server/files/scrub.timer new file mode 100644 index 0000000000000000000000000000000000000000..849656575316cc6206698771d3d778fe028d5b5d --- /dev/null +++ b/roles/debian_server/files/scrub.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Scrub btrfs volumes + +[Timer] +OnCalendar=weekly + +[Install] +WantedBy=multi-user.target diff --git a/roles/debian_server/tasks/main.yml b/roles/debian_server/tasks/main.yml index 0a4df56d1b7d696e2b19021f4ad85dad424ef2bc..4abc17698e305f7d234a0681420bf60cfa4ad596 100644 --- a/roles/debian_server/tasks/main.yml +++ b/roles/debian_server/tasks/main.yml @@ -233,3 +233,24 @@ enabled: true 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: Copy btrfs scrub service and timer + loop: + - scrub.service + - scrub.timer + ansible.builtin.copy: + dest: /etc/systemd/system + mode: 0o0644 + src: '{{ item }}' + +- name: Enable the btrfs scrub timer + ansible.builtin.systemd: + enabled: true + name: scrub.timer + state: started