/lib/partman/undo.d/80lvm is in ubiquity 18.04.14.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #!/bin/sh
# This script sets method "lvm" for all partitions that have the lvm
# flag set. It also discovers the logical volumes and creates in them
# a loop partition table and partition.
. /lib/partman/lib/base.sh
# Avoid warnings from lvm2 tools about open file descriptors
export LVM_SUPPRESS_FD_WARNINGS=1
log-output -t partman pvscan
log-output -t partman vgscan
if [ -x /sbin/vgdisplay ]; then
vgroups=$(/sbin/vgdisplay | grep '^[ ]*VG Name' | \
sed -e 's/.*[[:space:]]\(.*\)$/\1/' | sort)
else
vgroups=''
fi
for dev in /var/lib/partman/devices/*; do
[ -d "$dev" ] || continue
cd $dev
partitions=
open_dialog PARTITIONS
while { read_line num id size type fs path name; [ "$id" ]; }; do
if [ "$fs" != free ]; then
partitions="$partitions $id"
fi
done
close_dialog
for id in $partitions; do
lvm=no
# If the device is in fact being used for lvm, mark it as such.
# This is a hack and it only works for full block devices, not
# partitions. It makes raid devices used for lvm show up as such.
if pvdisplay $(cat $dev/device) >/dev/null 2>&1 ; then
lvm=yes
fi
open_dialog GET_FLAGS $id
while { read_line flag; [ "$flag" ]; }; do
if [ "$flag" = lvm ]; then
lvm=yes
# can not break here
fi
done
close_dialog
if [ "$lvm" = yes ]; then
mkdir -p $id
echo lvm >$id/method
fi
done
if [ -f device ]; then
# Obtain the VG from the device name
device=`cat device`
case "$device" in
# LVM2
/dev/mapper/*)
vglv=${device#/dev/mapper/}
vglv=$(echo "$vglv" | sed -e 's/\([^-]\)-\([^-]\)/\1 \2/' |
sed -e 's/--/-/g')
vg=$(echo "$vglv" | cut -d" " -f1)
;;
# LVM1
*)
vg=$(sed 's,^/[^/]*/\([^/]*\)/.*,\1,' device)
;;
esac
is_vg=no
for vgs in $vgroups; do
[ "$vgs" = "$vg" ] && is_vg=yes
done
if [ "$is_vg" = yes ] ; then
# this is an activated logical volume
# let's create label on it
open_dialog NEW_LABEL loop
close_dialog
# find the free space
open_dialog PARTITIONS
free_space=''
while { read_line num id size type fs path name; [ "$id" ]; }; do
case $fs in
free|unknown)
free_space=$id
free_size=$size
free_fs=$fs
;;
esac
done
close_dialog
# create partition in the free space
if [ "$free_space" ]; then
id=
if [ "$free_fs" = unknown ]; then
# parted >= 3.2 gives us a partition
# automatically.
id=$free_space
else
# With parted < 3.2 we must create a
# partition manually.
open_dialog NEW_PARTITION primary ext2 $free_space full $free_size
read_line num id size type fs path name
close_dialog
fi
if [ "$id" ]; then
open_dialog GET_FILE_SYSTEM $id
read_line filesystem
close_dialog
if [ "$filesystem" != none ]; then
open_dialog CHANGE_FILE_SYSTEM $id $filesystem
close_dialog
fi
fi
fi
open_dialog DISK_UNCHANGED
close_dialog
fi
fi
done
|