From 6e9c3ccb0a40768f19950f096eb5d5fdcf1db198 Mon Sep 17 00:00:00 2001 From: Adar Nimrod <nimrod@shore.co.il> Date: Sat, 13 Mar 2021 18:55:32 +0200 Subject: [PATCH] Periodic scrubbing of btrfs volumes. --- roles/debian_server/files/btrfs-scrub | 16 ++++++++++++++++ roles/debian_server/files/scrub.service | 8 ++++++++ roles/debian_server/files/scrub.timer | 8 ++++++++ roles/debian_server/tasks/main.yml | 21 +++++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100755 roles/debian_server/files/btrfs-scrub create mode 100644 roles/debian_server/files/scrub.service create mode 100644 roles/debian_server/files/scrub.timer diff --git a/roles/debian_server/files/btrfs-scrub b/roles/debian_server/files/btrfs-scrub new file mode 100755 index 0000000..ac980d3 --- /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 0000000..62f1c8d --- /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 0000000..8496565 --- /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 0a4df56..4abc176 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 -- GitLab