diff options
author | Christian Pointner <equinox@spreadspace.org> | 2023-01-21 23:03:00 +0100 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2023-01-21 23:03:00 +0100 |
commit | facdd63fe173b51c6d9de29ccc2167b0d7a45b6f (patch) | |
tree | 669c79d308749774da206c85acf8883568f0e8d5 /roles/storage/zfs/syncoid/templates/autosuspend.py.j2 | |
parent | add wikijs instance: wiki.davste.at (diff) |
syncoid/autosuspend: implement disk spindown mode
Diffstat (limited to 'roles/storage/zfs/syncoid/templates/autosuspend.py.j2')
-rw-r--r-- | roles/storage/zfs/syncoid/templates/autosuspend.py.j2 | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/roles/storage/zfs/syncoid/templates/autosuspend.py.j2 b/roles/storage/zfs/syncoid/templates/autosuspend.py.j2 index a6217ca0..9dc9bc52 100644 --- a/roles/storage/zfs/syncoid/templates/autosuspend.py.j2 +++ b/roles/storage/zfs/syncoid/templates/autosuspend.py.j2 @@ -119,12 +119,38 @@ class AutoSuspender(object): except dbus.exceptions.DBusException as error: print("ERR: %s" % error) + def spindown_disks(self, disks): + subprocess.run(["hdparm", "-y"] + disks) + + +def print_usage(): + print("usage: %s (system|disks) [ /dev/sda [ /dev/sdb [ ... ]]] " % sys.argv[0]) + if __name__ == "__main__": + if len(sys.argv) < 2: + print_usage() + sys.exit(1) + mode = sys.argv[1] + disks = [] + if mode not in ["system", "disks"]: + print_usage() + sys.exit(1) + if mode == "disks": + if len(sys.argv) < 3: + print_usage() + sys.exit(1) + else: + disks = sys.argv[2:] + s = AutoSuspender() - print("checking if the system can be suspended:") + print("checking for suspend inhibitors:") if s.check(): - print("trying to suspend system") - s.suspend() + if mode == "system": + print("trying to suspend system") + s.suspend() + elif mode == "disks": + print("trying to spindown disks") + s.spindown_disks(disks) else: - print("not suspending system because at least one check failed.") + print("not suspending because at least one check failed.") |