bootstrap-vz/bootstrapvz/providers/gce/assets/initramfs-tools/scripts/local-premount/gce-disable-growroot

78 lines
2.1 KiB
Text
Raw Normal View History

# Selectively disable growroot -*- shell-script -*-
set -e
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
message() { echo "DISABLE-GROWROOT:" "$@" ; }
error_exit() { message "$@"; exit 1; }
. /scripts/functions
# initramfs-tools exports the following variables, used below:
# $ROOT - Generally "/dev/disk/by-uuid/<id>" which is a link to /dev/sda1
# $ROOTFLAGS - Generally empty
# $ROOTFSTYPE - Generally empty
# $rootmnt - Set to "/root"
# According to the initramfs documentation, it's supposed to wait until
# the disks have been attached and verified before the local-premount scripts
# run. This does not happen, however, and failures can happen below if $ROOT
# is referenced before the disk that it points to is attached. This allows for
# up to 4 seconds for that to happen. In practice, it generally takes less
# than half a second.
for i in $(seq 1 20); do
if [ -e "${ROOT}" ]; then
break
fi
sleep 0.2
done
# Follow link to get real root location
if [ ! -L "${ROOT}" ]; then
real_root=${ROOT}
else
real_root=$(readlink -f "${ROOT}")
fi
# Remove partition number to get disk
disk=$(echo ${real_root} | sed 's/[0-9]*$//')
# Determine number of 512-byte sectors in 2TB
two_tb=$((2*(1024**4)))
max_sectors=$((${two_tb}/512))
# Determine number of sectors on disk
geometry=$(sfdisk ${disk} --show-pt-geometry)
cyl=$(echo $geometry | cut -d " " -f 2)
heads=$(echo $geometry | cut -d " " -f 4)
secs=$(echo $geometry | cut -d " " -f 6)
sectors=$((${cyl}*${heads}*${secs}))
# If disk is >2TB, disable growroot
if [ "$sectors" -gt "$max_sectors" ]; then
message "Disk size >2TB - Not expanding root partition"
# Temporarily mount filesystem
if [ -z "${ROOTFSTYPE}" ]; then
fstype=$(get_fstype "${ROOT}")
else
fstype=${ROOTFSTYPE}
fi
mount -w ${fstype:+-t ${fstype} }${ROOTFLAGS} ${ROOT} ${rootmnt} ||
error_exit "failed to mount ${ROOT}."
# Disable growroot
touch "${rootmnt}/etc/growroot-disabled"
# Unmount filesystem
umount "${rootmnt}" || error_exit "failed to umount ${rootmnt}";
fi