Page MenuHomePhabricator
Paste P11298

nuke-lvm.sh
ActivePublic

Authored by Kormat on May 25 2020, 1:01 PM.
Tags
None
Referenced Files
F31841538: raw.txt
May 25 2020, 1:01 PM
Subscribers
None
#!/bin/sh
# All sizes/offsets are in sectors (512B)
set -exu
[ ! -e /tmp/nuke_lvm ] || exit 0
mkdir /tmp/nuke_lvm
cd /tmp/nuke_lvm
# Find LVM physical volume
pvs -o pv_name,pe_start --units s --noheadings --nosuffix > pvs.list
[ -s pvs.list ] || { echo "No pv's detected: $(pvs)"; exit 0; }
read pv_name pe_start < pvs.list
disk=$(debconf-get partman-auto/disk)
[ "$disk" ] || { echo "ERROR: partman-auto/disk is unset"; exit 1; }
part_num=${pv_name#$disk}
# Find LVM logical volume
lvs -o lv_size,lv_layout --units s --noheadings --nosuffix > lvs.list
[ -s lvs.list ] || { echo "ERROR: no lv's detected: $(lvs)"; exit 1; }
read lv_size lv_layout < lvs.list
[ "$lv_layout" == "linear" ] || { echo "ERROR: unsupported lv layout '$lv_layout' (expected 'linear')"; exit 1; }
sfdisk -d "$disk" | grep "^$pv_name\\>" > sfdisk.part
[ -s sfdisk.part ] || { echo "ERROR: pv $pv_name not found on disk $disk"; exit 1; }
read _ _ _ pv_start _ pv_size _ < sfdisk.part
pv_start=${pv_start%,}
pv_size=${pv_size%,}
sfdisk --delete ${disk:?} ${part_num:?}
echo "start= $((pv_start + pe_start)), size= $lv_size, type=83"
echo "start= $((pv_start + pe_start)), size= $lv_size, type=83" | sfdisk -N"$part_num" "$disk";