aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/mddc-add-block-sym
blob: 7ee1ecae5c46ce7fd7c2e7c84ec2aad82fd5b62a (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
#!@shebangdir@/execlineb -P

importas -Si MDEV

if -x0 { eltest -d /sys/block/${MDEV} }

#skip cryptsetup nodes
if -nx0 { eltest ${MDEV} =~ dm-[0-9] }

background { mkdir -p /dev/disk/by-diskseq }
background { mkdir -p /dev/disk/by-partuuid }
background { mkdir -p /dev/disk/by-uuid }
background { mkdir -p /dev/disk/by-id }
#background { mkdir -p /dev/disk/by-path }

backtick -Ei DISKSEQ { cat /sys/block/${MDEV}/diskseq }
background { ln -sf ../../${MDEV} /dev/disk/by-diskseq/${DISKSEQ} }

pipeline { if { eltest -e /sys/block/${MDEV}/device/model } cat /sys/block/${MDEV}/device/model }
pipeline { sed -e s/\ *$// -e s/\ /_/g }
withstdinas -ED "" MODEL
pipeline { if { eltest -e /sys/block/${MDEV}/device/serial } cat /sys/block/${MDEV}/device/serial }
pipeline { sed -e s/\ *$// -e s/\ /_/g -e s/^/_/g }
withstdinas -ED "" SERIAL
background { if { eltest "${MODEL}${SERIAL}" }
		ln -sf ../../${MDEV} /dev/disk/by-id/${MODEL}${SERIAL}
}

execline-cd /sys/block/${MDEV}

elglob -0d "" PARTS ${MDEV}*
if { eltest ${PARTS} }
define -sd "" SPARTS ${PARTS}
forx -pE PART { ${SPARTS} }
	# by-partuuid
	background {
		pipeline { grep -- ^PARTUUID= ${PART}/uevent }
		pipeline { sed -e s/PARTUUID=// }
		withstdinas -E PARTUUID
		ln -sf ../../${PART} /dev/disk/by-partuuid/${PARTUUID}
	}
	# by-diskseq, by-id
	background {
		backtick -Ei PARTN { cat ${PART}/partition }
		background { ln -sf ../../${PART} /dev/disk/by-diskseq/${DISKSEQ}-part${PARTN} }
		if { eltest "${MODEL}${SERIAL}" }
			ln -sf ../../${PART} /dev/disk/by-id/${MODEL}${SERIAL}-part${PARTN}
	}
	# only if blkid exists
	if { redirfd -w 1 /dev/null tryexec { blkid } exit 1 }
	# by-uuid
	background {
		if {
			pipeline { blkid /dev/${PART} }
			pipeline { grep " UUID" }
			pipeline {
				sed
					-e s/^.*\ UUID=\"//
					-e s/\".*//
			}
			withstdinas -E UUID
			if { eltest ${UUID} }
			ln -sf ../../${PART} /dev/disk/by-uuid/${UUID}
		}
	}
	# by-label
	background {
		if {
			pipeline { blkid /dev/${PART} }
			pipeline { grep " LABEL" }
			pipeline {
				sed
					-e s/^.*\ LABEL=\"//
					-e s/\".*//
			}
			withstdinas -E LABEL
			if { eltest ${LABEL} }
			ln -sf ../../${PART} /dev/disk/by-label/${LABEL}
		}
	}