diff --git a/roles/float-base/handlers/main.yml b/roles/float-base/handlers/main.yml
index ac47fa5b7bcfc90dc7fd039c8befecde71b20a5e..07b630b118c8ba5957b4dc8b607d9e7d051a6891 100644
--- a/roles/float-base/handlers/main.yml
+++ b/roles/float-base/handlers/main.yml
@@ -50,6 +50,11 @@
     name: osqueryd.service
     state: restarted
 
+- name: restart smartd
+  systemd:
+    name: smartd.service
+    state: restarted
+
 - name: reload firewall
   systemd:
     name: firewall.service
diff --git a/roles/float-base/tasks/main.yml b/roles/float-base/tasks/main.yml
index e47d2bb3a5ae986551fe4d0f8df16f661af4c9af..f090b873c9ab62e61887f6240699a9a919ad3cf0 100644
--- a/roles/float-base/tasks/main.yml
+++ b/roles/float-base/tasks/main.yml
@@ -94,6 +94,9 @@
 - include_tasks: ipmi.yml
   when: ipmi_device.stat.exists == true
 
+- include_tasks: smart.yml
+  when: "not (testing | default(True))"
+
 - include_tasks: systemd.yml
 
 # Finally run some cleanups.
diff --git a/roles/float-base/tasks/smart.yml b/roles/float-base/tasks/smart.yml
new file mode 100644
index 0000000000000000000000000000000000000000..601348c8f21197710b4c18b809cb39b9727e5323
--- /dev/null
+++ b/roles/float-base/tasks/smart.yml
@@ -0,0 +1,18 @@
+---
+
+- name: Install smartmontools
+  apt:
+    name: smartmontools
+    state: present
+
+- name: Configure smartd
+  template:
+    src: smartd.conf.j2
+    dest: /etc/smartd.conf
+  notify: restart smartd
+
+- name: Disable smartd emails
+  file:
+    path: /etc/smartmontools/run.d/10mail
+    state: absent
+
diff --git a/roles/float-base/templates/smartd.conf.j2 b/roles/float-base/templates/smartd.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..b25ab7a000544b9564924b08d78ea71acf798981
--- /dev/null
+++ b/roles/float-base/templates/smartd.conf.j2
@@ -0,0 +1,8 @@
+# Long tests once a month, on the 15th at 15.00
+# Short tests every Monday at 11.00
+DEFAULT -a -s (L/../15/./15|S/../../1/11) -m {{ alert_email | default('root') }} -M exec /usr/share/smartmontools/smartd-runner
+
+# Host specific configuration
+{{ smartd_extra_config | default('') }}
+
+DEVICESCAN {{ '-d nvme' if 'nvme0n1' in ansible_devices else '' }}