mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-24 19:28:09 +00:00
Merge pull request #775 from justincormack/extend
Resize device if there is free space
This commit is contained in:
commit
e35e337503
@ -18,6 +18,40 @@ do_fsck()
|
|||||||
return "${EXIT_CODE}"
|
return "${EXIT_CODE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_fsck_extend_mount()
|
||||||
|
{
|
||||||
|
DRIVE="$1"
|
||||||
|
DATA="$2"
|
||||||
|
|
||||||
|
do_fsck "$DATA" || return 1
|
||||||
|
|
||||||
|
# only try to extend if there is a single partition and free space
|
||||||
|
PARTITIONS=$(sfdisk -J "$DRIVE" | jq '.partitiontable.partitions | length')
|
||||||
|
|
||||||
|
if [ "$PARTITIONS" -eq 1 ] && \
|
||||||
|
sfdisk -F "$DRIVE" | grep -q 'Unpartitioned space' &&
|
||||||
|
! sfdisk -F "$DRIVE" | grep -q '0 B, 0 bytes, 0 sectors'
|
||||||
|
then
|
||||||
|
SPACE=$(sfdisk -F "$DRIVE" | grep 'Unpartitioned space')
|
||||||
|
printf "Resizing disk partition: $SPACE\n"
|
||||||
|
|
||||||
|
START=$(sfdisk -J "$DRIVE" | jq -e '.partitiontable.partitions | map(select(.type=="83")) | .[0].start')
|
||||||
|
|
||||||
|
sfdisk -q --delete "$DRIVE" 2> /dev/null
|
||||||
|
echo "${START},,83;" | sfdisk -q "$DRIVE"
|
||||||
|
|
||||||
|
# update status
|
||||||
|
blockdev --rereadpt $diskdev 2> /dev/null
|
||||||
|
mdev -s
|
||||||
|
|
||||||
|
resize2fs "$DATA"
|
||||||
|
|
||||||
|
do_fsck "$DATA" || return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mount "$DATA" /var
|
||||||
|
}
|
||||||
|
|
||||||
do_mkfs()
|
do_mkfs()
|
||||||
{
|
{
|
||||||
diskdev="$1"
|
diskdev="$1"
|
||||||
@ -25,11 +59,11 @@ do_mkfs()
|
|||||||
# new disks does not have an DOS signature in sector 0
|
# new disks does not have an DOS signature in sector 0
|
||||||
# this makes sfdisk complain. We can workaround this by letting
|
# this makes sfdisk complain. We can workaround this by letting
|
||||||
# fdisk create that DOS signature, by just do a "w", a write.
|
# fdisk create that DOS signature, by just do a "w", a write.
|
||||||
# http://bugs.alpinelinux.org/issues/show/145
|
# http://bugs.alpinelinux.org/issues/145
|
||||||
echo "w" | fdisk $diskdev >/dev/null
|
echo "w" | fdisk $diskdev >/dev/null
|
||||||
|
|
||||||
# format one large partition, offset 1M
|
# format one large partition
|
||||||
printf "1M,,83\n" | sfdisk --quiet $diskdev
|
echo ";" | sfdisk --quiet $diskdev
|
||||||
|
|
||||||
# update status
|
# update status
|
||||||
blockdev --rereadpt $diskdev 2> /dev/null
|
blockdev --rereadpt $diskdev 2> /dev/null
|
||||||
@ -45,8 +79,8 @@ do_swapfile()
|
|||||||
SWAP=/var/spool/swap
|
SWAP=/var/spool/swap
|
||||||
if [ "$(mobyplatform)" = "mac" ] || [ "$(mobyplatform)" = "windows" ] && [ ! -f $SWAP ]
|
if [ "$(mobyplatform)" = "mac" ] || [ "$(mobyplatform)" = "windows" ] && [ ! -f $SWAP ]
|
||||||
then
|
then
|
||||||
mkdir -p "$(basename $SWAP)"
|
mkdir -p "$(dirname $SWAP)"
|
||||||
dd if=/dev/zero of=$SWAP bs=1k count=4090876
|
dd if=/dev/zero of=$SWAP bs=1k count=1048576
|
||||||
chmod 600 $SWAP
|
chmod 600 $SWAP
|
||||||
mkswap $SWAP
|
mkswap $SWAP
|
||||||
swapon $SWAP
|
swapon $SWAP
|
||||||
@ -80,26 +114,27 @@ start()
|
|||||||
|
|
||||||
DRIVE="/dev/${DEV}"
|
DRIVE="/dev/${DEV}"
|
||||||
|
|
||||||
if fdisk -l "${DRIVE}" | grep -q "doesn't contain a valid partition table"
|
# see if it has a partition table already
|
||||||
|
if sfdisk -d "${DRIVE}" >/dev/null 2>/dev/null
|
||||||
then
|
then
|
||||||
do_mkfs "${DRIVE}"
|
DATA=$(sfdisk -J "$DRIVE" | jq -e -r '.partitiontable.partitions | map(select(.type=="83")) | .[0].node')
|
||||||
else
|
if [ $? -eq 0 ]
|
||||||
DATA=$(fdisk -l "${DRIVE}" | grep 'Linux$' | head -1 | awk '{print $1}')
|
|
||||||
if [ -z "$DATA" ]
|
|
||||||
then
|
then
|
||||||
do_mkfs "${DRIVE}"
|
do_fsck_extend_mount "$DRIVE" "$DATA" || do_mkfs "$DRIVE"
|
||||||
else
|
else
|
||||||
( do_fsck "${DATA}" && mount "${DATA}" /var ) || do_mkfs "${DRIVE}"
|
do_mkfs "$DRIVE"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
do_mkfs "$DRIVE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SWAP=$(fdisk -l "${DRIVE}" | grep 'Linux swap' | head -1 | awk '{print $1}')
|
# Use existing swap partition of present; we do not create one now
|
||||||
[ -z "${SWAP}" ] && do_swapfile || swapon "${SWAP}"
|
SWAP=$(fdisk -l "$DRIVE" | grep 'Linux swap' | head -1 | awk '{print $1}')
|
||||||
|
[ -z "$SWAP" ] && do_swapfile || swapon "$SWAP"
|
||||||
|
|
||||||
# boot2docker compat, has /var and /tmp on partition
|
# boot2docker compat, has /var and /tmp on partition
|
||||||
[ -d /var/var/lib/boot2docker/ ] && mount --bind /var/var /var
|
[ -d /var/var/lib/boot2docker/ ] && mount --bind /var/var /var
|
||||||
|
|
||||||
|
|
||||||
# can remove when we run before bootmisc
|
# can remove when we run before bootmisc
|
||||||
[ -L /var/run ] || ln -s /run /var/run
|
[ -L /var/run ] || ln -s /run /var/run
|
||||||
[ -L /var/run ] || ln -s /run/lock /var/lock
|
[ -L /var/run ] || ln -s /run/lock /var/lock
|
||||||
@ -108,7 +143,7 @@ start()
|
|||||||
[ -d /var/spool ] || mkdir -m 755 /var/spool
|
[ -d /var/spool ] || mkdir -m 755 /var/spool
|
||||||
[ -d /var/tmp ] || mkdir -m 1777 /var/tmp
|
[ -d /var/tmp ] || mkdir -m 1777 /var/tmp
|
||||||
|
|
||||||
mount | grep -q "${DEV}. on /var type"
|
mount | grep -q ' on /var type '
|
||||||
|
|
||||||
eend $? "Failed to mount block device"
|
eend $? "Failed to mount block device"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user