/lib/partman/init.d/30parted is in ubiquity 2.21.63.
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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | #!/bin/sh
set -e
. /lib/partman/lib/base.sh
ORIG_IFS="$IFS"
is_inactive_md() {
local number
number=$(echo "$1" | sed -n -e 's,/dev/md/\?,,p')
if [ "$number" ] && ! grep -q "^md$number : active" /proc/mdstat; then
return 0
fi
return 1
}
part_of_mdraid () {
local holder
local dev=${1#/dev/}
for holder in /sys/block/$dev/holders/*; do
local mddev=${holder##*/}
case "$mddev" in
md[0-9]|md[0-9][0-9]|md[0-9][0-9][0-9])
return 0
;;
esac
done
return 1
}
part_of_sataraid () {
local raiddev
for raiddev in $(dmraid -r -c); do
if [ "$(readlink -f $raiddev)" = $1 ]; then
return 0
fi
done
return 1
}
part_of_multipath() {
local mpdev
type multipath >/dev/null 2>&1 || return 1
if is_multipath_part $1; then
return 0
fi
# The block devices that make up the multipath:
# Output looks like "(decoration-symbols) 4:0:0:1 sdc 8:32 ..."
# (decoration-symbols are not matched; they may change again, and the spaces differ for last device)
# (there is 1 or more spaces between fields if any disk has 4 letters; e.g., sdaa)
for mpdev in $(multipath -l | \
grep -o '\([#0-9]\+:\)\{3\}[#0-9]\+ \+[hs]d[a-z]\+ \+[0-9]\+:[0-9]\+' | \
sed 's/ / /' | \
cut -f2 -d' '); do
if [ "$(readlink -f /dev/$mpdev)" = $1 ]; then
return 0
fi
done
return 1
}
if [ ! -f /var/run/parted_server.pid ]; then
mkdir -p /var/run
db_get partman/alignment
PARTMAN_ALIGNMENT="$RET" parted_server
RET=$?
if [ $RET != 0 ]; then
# TODO: How do we signal we couldn't start parted_server properly?
exit $RET
fi
rm -rf /var/lib/partman/old_devices
if [ -d $DEVICES ]; then
mv $DEVICES /var/lib/partman/old_devices
fi
mkdir $DEVICES || true
IFS="$NL"
for partdev in $(parted_devices |
sed 's,^/dev/\(ide\|scsi\|[hs]d\|md/\?[0-9]\+\),!/dev/\1,' |
sort |
sed 's,^!,,' ); do
IFS="$TAB"
set -- $partdev
IFS="$ORIG_IFS"
device=$1
size=$2
model=$3
label=$4
# Skip mtd (not supported by parted) and mmcblk odities
case "${device#/dev/}" in
mtd* | mmcblk?rpmb | mmcblk?boot? )
continue
;;
esac
# Skip MD devices which are not active
if [ -e /proc/mdstat ]; then
if is_inactive_md $device; then
continue
fi
fi
# Skip devices that are part of a mdraid device
if part_of_mdraid $device; then
continue
fi
# Skip devices that are part of a dmraid device
if type dmraid >/dev/null 2>&1 && \
dmraid -r -c >/dev/null 2>&1; then
if part_of_sataraid $device && \
[ -f /var/lib/disk-detect/activate_dmraid ]; then
continue
fi
fi
# Skip devices that are part of a multipathed device
if part_of_multipath $device; then
continue
fi
dirname=$(echo $device | sed 's:/:=:g')
dev=$DEVICES/$dirname
if [ -d /var/lib/partman/old_devices/$dirname ]; then
mv /var/lib/partman/old_devices/$dirname $dev
else
mkdir $dev || continue
fi
printf "%s" "$device" >$dev/device
printf "%s" "$size" >$dev/size
printf "%s" "$model" >$dev/model
printf "%s" "$label" >$dev/label
# Set the sataraid flag for dmraid arrays.
if type dmraid >/dev/null 2>&1 && \
dmraid -s -c >/dev/null 2>&1; then
if dmraid -sa -c | grep -q $(basename $device); then
>$dev/sataraid
fi
fi
cd $dev
open_dialog OPEN "$(cat $dev/device)"
read_line response
close_dialog
if [ "$response" = failed ]; then
cd /
rm -rf $dev
fi
done
db_get partman/filter_mounted
if [ "$RET" = true ]; then
# Get a list of active mounts in a more convenient format.
mounts=
while read dev mp rest; do
[ -e "$dev" ] || continue
mappeddev="$(mapdevfs "$dev")" || true
if [ "$mappeddev" ]; then
dev="$mappeddev"
fi
mounts="${mounts:+$mounts$NL}$dev $mp"
done < /proc/mounts
# For each disk, check for any active mounts on it. If the
# only thing mounted is the installation medium and it uses
# more or less the whole disk, then silently exclude that
# disk; if the installation medium is mounted but doesn't
# use the whole disk, issue a warning that partitioning may
# be difficult; if anything else is mounted, offer to
# unmount it.
disks_unmount=
parts_unmount=
part_warn=
for dev in $DEVICES/*; do
[ -d "$dev" ] || continue
cd $dev
free=0
parts=
instparts=
seen_unmounted=
open_dialog PARTITIONS
while { read_line num id size type fs path name; [ "$id" ]; }; do
if [ "$fs" = free ]; then
free="$(($free + $size))"
continue
fi
mappedpath="$(mapdevfs "$path")" || true
if [ "$mappedpath" ]; then
path="$mappedpath"
fi
mp=
IFS="$NL"
for line in $mounts; do
restore_ifs
if [ "$path" = "${line%% *}" ]; then
mp="${line#* }"
break
fi
IFS="$NL"
done
restore_ifs
if [ "$mp" = /cdrom ]; then
instparts="${instparts:+$instparts }$path"
elif [ "$mp" ]; then
parts="${parts:+$parts }$path"
else
seen_unmounted=1
fi
done
close_dialog
if [ "$instparts" ]; then
if [ -z "$seen_unmounted" ] && \
longint_le "$free" 16777216; then
# The installation medium uses more
# or less the whole disk.
open_dialog CLOSE
close_dialog
cd /
rm -rf "$dev"
else
# There's an installation medium
# here, but it doesn't use the whole
# disk.
part_warn="$instparts"
>installation_medium
fi
elif [ "$parts" ]; then
# Something other than an installation
# medium is mounted.
disks_unmount="${disks_unmount:+$disks_unmount }$(cat device)"
parts_unmount="${parts_unmount:+$parts_unmount }$parts"
fi
done
if [ "$disks_unmount" ]; then
db_subst partman/unmount_active DISKS "$(echo "$disks_unmount" | sed 's/ /, /g')"
db_fset partman/unmount_active seen false
db_input critical partman/unmount_active || true
db_go || exit 10
db_get partman/unmount_active || RET=
if [ "$RET" = true ]; then
umount $parts_unmount || true
fi
fi
if [ "$part_warn" ]; then
db_subst partman/installation_medium_mounted PARTITION "$part_warn"
db_fset partman/installation_medium_mounted seen false
db_capb align
db_input high partman/installation_medium_mounted || true
db_go || true
db_capb backup align
fi
fi
rm -rf /var/lib/partman/old_devices
fi
|