diff --git a/readme.md b/readme.md index de24afd3..f2352403 100644 --- a/readme.md +++ b/readme.md @@ -60,6 +60,8 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti environment: DISK_SIZE: "256G" ``` + + This can also be used to resize the existing disk to a larger capacity without data loss. * ### How do I change the location of the virtual disk? diff --git a/run/disk.sh b/run/disk.sh index 55e373fd..f9f98e66 100644 --- a/run/disk.sh +++ b/run/disk.sh @@ -39,7 +39,9 @@ if [ -f "${DATA}" ]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then # Resize file by changing its length - truncate -s "${DATA_SIZE}" "${DATA}"; + if ! truncate -s "${DATA_SIZE}" "${DATA}"; then + error "Could not resize the file for the virtual disk." && exit 85 + fi else @@ -55,7 +57,9 @@ if [ -f "${DATA}" ]; then # Resize file by allocating more space if ! fallocate -l "${DATA_SIZE}" "${DATA}"; then - error "Could not allocate a file for the virtual disk." && exit 85 + if ! truncate -s "${DATA_SIZE}" "${DATA}"; then + error "Could not resize the file for the virtual disk." && exit 85 + fi fi if [[ "${ALLOCATE}" == [Zz]* ]]; then @@ -84,7 +88,10 @@ if [ ! -f "${DATA}" ]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then # Create an empty file - truncate -s "${DATA_SIZE}" "${DATA}" + if ! truncate -s "${DATA_SIZE}" "${DATA}"; then + rm -f "${DATA}" + error "Could not create a file for the virtual disk." && exit 87 + fi else @@ -98,8 +105,10 @@ if [ ! -f "${DATA}" ]; then # Create an empty file if ! fallocate -l "${DATA_SIZE}" "${DATA}"; then - rm -f "${DATA}" - error "Could not allocate a file for the virtual disk." && exit 87 + if ! truncate -s "${DATA_SIZE}" "${DATA}"; then + rm -f "${DATA}" + error "Could not create a file for the virtual disk." && exit 87 + fi fi if [[ "${ALLOCATE}" == [Zz]* ]]; then diff --git a/run/install.sh b/run/install.sh index 068a1df5..8bdc8124 100644 --- a/run/install.sh +++ b/run/install.sh @@ -179,7 +179,9 @@ SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1) (( SYSTEM_SIZE > SPACE )) && error "Not enough free space to create a 4 GB system disk." && exit 87 if ! fallocate -l "${SYSTEM_SIZE}" "${SYSTEM}"; then - rm -f "${SYSTEM}" && error "Could not allocate a file for the system disk." && exit 88 + if ! truncate -s "${SYSTEM_SIZE}" "${SYSTEM}"; then + rm -f "${SYSTEM}" && error "Could not allocate a file for the system disk." && exit 88 + fi fi if [[ "${ALLOCATE}" == [Zz]* ]]; then diff --git a/run/run.sh b/run/run.sh index 4cc2c7dc..0d6fd478 100755 --- a/run/run.sh +++ b/run/run.sh @@ -21,6 +21,7 @@ trap 'error "Status $? while: ${BASH_COMMAND} (line $LINENO/$BASH_LINENO)"' ERR STORAGE="/storage" KERNEL=$(uname -r | cut -b 1) +MINOR=$(uname -r | cut -d '.' -f2) ARCH=$(dpkg --print-architecture) VERS=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1) @@ -92,7 +93,7 @@ set -m ) set +m -if (( KERNEL > 4 )); then +if (( KERNEL > 5 )) || ( (( KERNEL == 5 )) && (( MINOR > 2 )) ); then pidwait -F "${_QEMU_PID}" & wait $! else tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!