summaryrefslogtreecommitdiff
path: root/old-school/mdadm-dup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'old-school/mdadm-dup.sh')
-rw-r--r--old-school/mdadm-dup.sh46
1 files changed, 45 insertions, 1 deletions
diff --git a/old-school/mdadm-dup.sh b/old-school/mdadm-dup.sh
index 16e3dfd..fe18e92 100644
--- a/old-school/mdadm-dup.sh
+++ b/old-school/mdadm-dup.sh
@@ -116,7 +116,51 @@ mdadm_subdevices()
116 mdadm -D "$md_dev" -Y | sed -ne 's/^MD_DEVICE_.*_DEV=//p' 116 mdadm -D "$md_dev" -Y | sed -ne 's/^MD_DEVICE_.*_DEV=//p'
117} 117}
118 118
119mdadm_copy_eject() # NOT INITRD; uses non-busybox "losetup" 119cryptsetup_temp()
120{
121 local sectors="$1" cryptname="$2" temp_file="$3" parms=$- secret
122 set +x
123 # Add 4096 sectors for LUKS header
124 truncate -s $(((sectors + 4096) * 512)) "$temp_file" || return
125 cleartext_dev=$(LoSetup -f --show "$temp_file") || return
126 secret="$(head -c256 /dev/urandom)" || return
127 printf %s "$secret" |
128 cryptsetup luksFormat "$cleartext_dev" - || return
129 printf %s "$secret" |
130 cryptsetup --key-file - luksOpen "$cleartext_dev" "$cryptname" || return
131 unset secret
132 set $parms
133
134 wait_for_dm_device /dev/mapper/"$cryptname"
135 echo /dev/mapper/"$cryptname"
136}
137
138mdadm_copy_eject_crypt()
139{
140 local md_dev="$1" temp_file="$2"
141
142 [ -b "$md_dev" ] || return
143 [ ! -e "$temp_file" ] || return
144
145 local output_dev sectors
146
147 old_subdev=$(mdadm_subdevices "$md_dev"|head -n1) || return
148 [ -b "$old_subdev" ] || return
149 # TODO: truncate to the ISO fs size if the device is larger
150 sectors=$(blockdev --getsz "$md_dev") || return
151
152 output_dev=$(cryptsetup_temp "$sectors" samizdatiso "$temp_file") || return
153
154 mdadm "$md_dev" --add "$output_dev" || return
155 mdadm "$md_dev" --grow -n2 || return
156
157 mdadm_wait_remove "$md_dev" "$old_subdev" || return
158
159 mdadm "$md_dev" --grow -n1 --force || return
160 dm_snapshot_teardown "$old_subdev"
161}
162
163mdadm_copy_eject()
120{ 164{
121 local md_dev="$1" output_file="$2" 165 local md_dev="$1" output_file="$2"
122 166