blob: 78dda0a73449206b590abaddd11c739e680aaafc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#!/bin/bash
drives=$(
find /dev -maxdepth 1 -regex '.*/sd[a-z]+'
)
raids=$(
sed '
1d
s/^\(\S\+\) \+: \+\S\+ \+\(\S\+\) \+/\1 \2 /
t
d
' /proc/mdstat \
| sed '
s/\[\S\+]//g
s/^\(\S\+\) \+\(\S\+\) \+\(\S\+\) \+/\1 \2 \3\n\1 \2 /
P
D
' \
| sed '
s,^\(\S\+ \S\+ \)\(\S\+\)$,/dev/\1/dev/\2,
'
)
crypt_devices=$(
find /dev -maxdepth 1 -name 'dm-*' -exec cryptsetup status {} \; \
| grep '^\S\|^\s*device:' \
| sed '
/^\S\+ / {
N
s,^\(\S\+\) .*\n\s*device:\s*\(\S\+\)$,\1 \2,
t
}
d
'
)
drives=$(
printf '%s\n' "${drives}"
printf '%s\n' "${raids}" \
| cut -d' ' -f1 \
| sort -u
)
partitions=$(
find /dev -maxdepth 1 \
| grep -F "${drives}" \
| grep -vxF "${drives}"
)
mounts=$(
mount \
| grep -wF "$(printf '%s\n' "${partitions}" "${drives}")" \
| awk '{print $3 " " $1}'
)
printf 'digraph {\n'
printf 'rankdir=LR;\n'
printf '%s\n' "${drives}" \
| sed '
s/^.*$/"\0" [shape="trapezium"];/
'
printf '%s\n' "${raids}" \
| cut -d' ' -f1,2 \
| sort -u \
| sed '
s/^\(\S\+\) \(\S\+\)$/"\1" [label="\1\\n(\2)", shape="box"];/
'
printf '%s\n' "${raids}" \
| cut -d' ' -f1,3 \
| sed '
s/^\(\S\+\) \(\S\+\)$/"\1" -> "\2";/
'
printf '%s\n' "${crypt_devices}" \
| sed '
s/^\(\S\+\) \(\S\+\)$/"\1" -> "\2";/
'
printf '%s\n' "${crypt_devices}" \
| sed '
s/^\(\S\+\) \S\+$/"\1" [shape="hexagon"];/
'
printf '%s\n' "${partitions}" \
| sed '
s/^\(.*[^0-9]\)[0-9]\+$/"\0" -> "\1";/
'
printf '%s\n' "${mounts}" \
| sed '
s/^\(\S\+\) \(\S\+\)$/"\1" -> "\2";/
'
printf '}\n'
|