Skip to main content

HDD administration and maintenance

Project description

osso-docktool provides tools to register disks to the OSSO dashboard, to print labels and wipe disks.

Requirements (apt install --no-install-recommends):

tmux            # auto cli mode
coreutils       # dd
pwgen           # pwgen
smartmontools   # smartctl
nvme-cli        # nvme
hdparm          # hdparm
sdparm          # sdparm
ledmon          # LED control

# FIXME: /usr/local/bin/run-lessrandom
# FIXME: /usr/local/bin/run-zero-disk

Example usage (as root):

osso-docktool /dev/sdb

Example setup (as root):

pip3 install osso-docktool

install -dm0700 /etc/osso-docktool
install /usr/local/share/doc/osso-docktool/local_settings.py.template \
        /etc/osso-docktool/local_settings.py

${EDITOR:-vi} /etc/osso-docktool/local_settings.py
# ^-- fix hostnames, fix tokens
#     get 1 shared token from:
#     https://account.example.com/admin/usertoken/token/
#     If you wish to use the auto process you will want to add the
#     root disk to the IGNORE_DEVICES list.

Automation

/etc/udev/rules.d/10-osso-docktool.rules:

# Match the block device but not the partitions.
KERNEL=="sd[a-z]", SUBSYSTEM=="block", ACTION=="add", ENV{SYSTEMD_WANTS}+="osso-docktool@%k.service", TAG+="systemd"

/etc/systemd/system/osso-docktool@.service:

[Unit]
Description=Notify osso-docktool about disk %i
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/osso-docktool auto-notify --add /dev/%i
ExecStop=/usr/local/bin/osso-docktool auto-notify --remove /dev/%i

When a disk is inserted this will start the osso-docktool@<disk>.service which will notify the osso-docktool auto process. The service is needed because udev starts RUN commands in a restricted container without network access and the systemd process is started outside the restricted container.

When the disk is removed systemd will stop the osso-docktool@<disk>.service.

There are several auto commands Beware that both erase commands will erase all inserted disks that do not match the ignore list without confirmation!

EMAIL=me@example.com osso-docktool auto

By default this uses a tmux session to spawn osso-docktool commands but there is a -g|–gui toggle to switch to a graphical terminal. You can change the default graphical terminal with the command:

update-alternatives --config x-terminal-emulator

Other tools

/usr/local/bin/run-zero-disk (0700):

#!/bin/bash

path=$1
if test -z $path; then
    echo "please supply path as argument"
    exit 1
fi
output=$(dd if=/dev/zero \
   of=$path \
   bs=32M \
   conv=fsync 2>&1)
ret=$?

# Checking output as DD does not exit clean even if whole disk is wiped

if [[ $ret -eq 0 ]]; then
    exit 0
else
    if [[ $output == *'No space left on device'* ]]; then
        echo "Disk $path has been zeroed"
        exit 0
    else
        echo "Something went wrong while writing to $path"
        echo $output
        exit 1
    fi
fi

Compile lessrandom.c and move lessrandom to /usr/local/bin/lessrandom (0700):

lessrandom.c:

#include <stdio.h>
#include <time.h>
#define BUF 4096
int main() {
    FILE *f;
    char buf[BUF];
    f = fopen("/dev/urandom", "rb");
    while (1) {
        if (fread(buf, 1, BUF, f) == BUF) {
            int i;
            for (i = 0; i <= buf[0]; ++i) {
                fwrite(buf, 1, BUF - 1, stdout);
            }
        }
    }
    fclose(f);
    return 0;
}


gcc -Wall lessrandom.c -o lessrandom

/usr/local/bin/run-lessrandom (0700):

#!/bin/bash

path=$1
if test -z $path; then
    echo "please supply path as argument"
    exit 1
fi
output=$(dd if=<(/usr/local/bin/lessrandom) \
   of=$path \
   bs=32M \
   conv=fsync 2>&1)
ret=$?

# Checking output as DD does not exit clean even if whole disk is wiped

if [[ $ret -eq 0 ]]; then
    exit 0
else
    if [[ $output == *'No space left on device'* ]]; then
        echo "Disk $path has been wiped"
        exit 0
    else
        echo "Something went wrong while writing to $path"
        echo $output
        exit 1
    fi
fi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

osso-docktool-1.9.3.tar.gz (31.8 kB view details)

Uploaded Source

Built Distribution

osso_docktool-1.9.3-py3-none-any.whl (37.1 kB view details)

Uploaded Python 3

File details

Details for the file osso-docktool-1.9.3.tar.gz.

File metadata

  • Download URL: osso-docktool-1.9.3.tar.gz
  • Upload date:
  • Size: 31.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for osso-docktool-1.9.3.tar.gz
Algorithm Hash digest
SHA256 8a0515fc18b963e650dfbce8992bc5cd94cab78b7750b1f901a501c59f075f07
MD5 4ef9d82ccd71987189a9e70d8e045679
BLAKE2b-256 2a866dd3dc6371a126063e436675d0426196391da5bc1f3ff45db7aa69858783

See more details on using hashes here.

File details

Details for the file osso_docktool-1.9.3-py3-none-any.whl.

File metadata

File hashes

Hashes for osso_docktool-1.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 718b391a91dd2677beec6dd1d48839be83bd098c127758db1d757b2b71b70e26
MD5 711c96f211a885d96ac6a3b6dbde9125
BLAKE2b-256 b885f7f344369021bfc6cb1d963f90a3df000fb44d895078d7a4c68404d8f776

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page