* Fix swapfile creation for all memory sizes In certain situation awk prints the swapfile size in scientific notation. The script can't deal with that, in which case swap file creation fails. Use int to convert the number to an integer. Since pages are 4k, also make sure swapsize is aligned to 4k blocks. * Add info message
24 lines
645 B
Bash
Executable File
24 lines
645 B
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
swapfile="/mnt/data/swapfile"
|
|
# Swap space in 4k blocks
|
|
swapsize="$(awk '/MemTotal/{ print int($2 * 0.33 / 4) }' /proc/meminfo)"
|
|
|
|
|
|
if [ ! -s "${swapfile}" ] || [ "$(stat "${swapfile}" -c '%s')" -lt $((swapsize * 4096)) ]; then
|
|
# Check free space (in 4k blocks)
|
|
if [ "$(stat -f /mnt/data -c '%f')" -lt "${swapsize}" ]; then
|
|
echo "[WARNING] Not enough space to allocate swapfile"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[INFO] Creating swapfile of size $((swapsize *4))k"
|
|
dd if=/dev/zero of="${swapfile}" bs=4k count="${swapsize}"
|
|
fi
|
|
|
|
if ! swaplabel "${swapfile}" > /dev/null 2>&1; then
|
|
/usr/lib/systemd/systemd-makefs swap "${swapfile}"
|
|
fi
|
|
|