#!/bin/bash all=$( find /dev -mindepth 1 -maxdepth 1 -type b -regextype grep \ \( \ -regex '.*/sd[a-z]\+' -o \ -regex '.*/md[0-9]\+' -o \ -regex '.*/dm-[0-9]\+' \ \) \ -printf '%f\n' | \ sort -u ) crypts=$( grep '^[^#]' /etc/crypttab | \ awk '{print $2}' | \ xargs -rn1 readlink -f | \ sed 's|^.*/||' | \ sort -u ) diffs=$( find /dev/mapper -mindepth 1 -maxdepth 1 -name '*_dif' \ -exec readlink -e {} \; | \ sed 's,^.*/,,' | \ sort -u ) legs=$( sed -n ' s/^md[0-9]\+ : active raid[0156] // T p ' /proc/mdstat | \ tr ' ' '\n' | \ sed ' s/(R)$// s/\[[^]]\+]$// /^sd/s/[0-9]\+$// ' | \ sort -u ) mounts=$( mount | \ cut -d' ' -f1 | \ grep '^/dev/\(sd[a-z]\+\|md[0-9]\+\|dm-[0-9]\+\)$' | \ sed 's|^.*/||' ) { echo "$all" echo "$crypts" echo "$diffs" echo "$legs" echo "$mounts" } | \ grep -vxF '' | \ sort | \ uniq -u | \ while read dev; do printf '%s:' "$dev" if mdadm --examine "/dev/$dev" &> /dev/null; then printf ' mdadm' fi if cryptsetup luksDump "/dev/$dev" &> /dev/null; then printf ' luks' fi if e2label "/dev/$dev" &> /dev/null; then printf ' ext[234]' fi printf '\n' done