diff --git a/playbooks/roles/borg-backup-server/files/backup-volume-monitor.sh b/playbooks/roles/borg-backup-server/files/backup-volume-monitor.sh
new file mode 100644
index 0000000000..2c2e8fb767
--- /dev/null
+++ b/playbooks/roles/borg-backup-server/files/backup-volume-monitor.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+THRESHOLD=90
+
+df -PkH | grep '/opt/backups' | awk '{ print $5 " " $6 }' | while read output;
+do
+    usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
+    partition=$(echo $output | awk '{print $2}' )
+    if [ $usep -ge $THRESHOLD ]; then
+        echo "Backup volume \"$partition ($usep%)\" on $(hostname) at $(date)" |
+            mail -s "ACTION REQUIRED: Backup volume usage at $usep%" infra-root@openstack.org
+    fi
+done
diff --git a/playbooks/roles/borg-backup-server/tasks/main.yaml b/playbooks/roles/borg-backup-server/tasks/main.yaml
index cc8c4ca370..fa38c961ce 100644
--- a/playbooks/roles/borg-backup-server/tasks/main.yaml
+++ b/playbooks/roles/borg-backup-server/tasks/main.yaml
@@ -15,6 +15,22 @@
     group: root
     mode: '0755'
 
+- name: Install backup volume monitor
+  copy:
+    src: 'backup-volume-monitor.sh'
+    dest: '/usr/local/bin/backup-volume-monitor'
+    owner: root
+    group: root
+    mode: '0755'
+
+- name: Run backup volume monitor
+  cron:
+    name: backup-volume-monitor
+    state: present
+    job: '/usr/local/bin/backup-volume-monitor'
+    minute: '0'
+    hour: '0'
+
 - name: Build all borg users from backup hosts
   set_fact:
     borg_users: '{{ borg_users }} + [ {{ hostvars[item]["borg_user"] }} ]'