#!/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";