2015-01-29 15:58:46 -08:00
|
|
|
# Selectively disable growroot -*- shell-script -*-
|
|
|
|
set -e
|
2015-09-23 16:55:16 -07:00
|
|
|
PREREQ=""
|
|
|
|
prereqs()
|
|
|
|
{
|
|
|
|
echo "$PREREQ"
|
|
|
|
}
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
prereqs)
|
|
|
|
prereqs
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
esac
|
2015-01-29 15:58:46 -08:00
|
|
|
|
|
|
|
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"
|
|
|
|
|
2015-09-23 16:55:16 -07:00
|
|
|
# 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
|
|
|
|
|
2015-01-29 15:58:46 -08:00
|
|
|
# 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
|
|
|
|
|