diff options
Diffstat (limited to 'old-school/mdadm-dup.sh')
-rw-r--r-- | old-school/mdadm-dup.sh | 46 |
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 | ||
119 | mdadm_copy_eject() # NOT INITRD; uses non-busybox "losetup" | 119 | cryptsetup_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 | |||
138 | mdadm_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 | |||
163 | mdadm_copy_eject() | ||
120 | { | 164 | { |
121 | local md_dev="$1" output_file="$2" | 165 | local md_dev="$1" output_file="$2" |
122 | 166 | ||