fix(deploy): ensure_swap не ломается на уже активном swap провайдера
- проверяем /proc/swaps, а не только имя /swapfile - rm -f перед созданием и мягкая обработка ошибки swapon - на VPS с /swap.img установщик больше не падает с 'Text file busy'
This commit is contained in:
+23
-6
@@ -622,26 +622,43 @@ EOF
|
||||
}
|
||||
|
||||
ensure_swap() {
|
||||
local want_gb="$1" current_mb
|
||||
local want_gb="$1" current_mb active_file
|
||||
want_mb=$((want_gb * 1024))
|
||||
current_mb="$(awk '/SwapTotal/ {printf "%d", $2/1024}' /proc/meminfo)"
|
||||
if [ "$current_mb" -ge $((want_gb * 1024 - 256)) ]; then
|
||||
|
||||
# Достаточно активного swap (в том числе созданного провайдером или
|
||||
# cloud-init — файл может называться иначе, чем /swapfile).
|
||||
if [ "$current_mb" -ge $((want_mb - 256)) ]; then
|
||||
ok "swap уже есть: ${current_mb} MB"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Файл /swapfile может уже использоваться как swap под другим именем в /proc/swaps.
|
||||
active_file="$(awk 'NR > 1 {print $1}' /proc/swaps 2>/dev/null | grep -E '^/swapfile$' || true)"
|
||||
if [ -n "$active_file" ]; then
|
||||
ok "swap уже активен: ${active_file} (${current_mb} MB)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! have fallocate && ! have dd; then
|
||||
warn "не удалось создать swap: нет fallocate/dd"
|
||||
return 0
|
||||
fi
|
||||
info "создаём swap ${want_gb} GB"
|
||||
rm -f /swapfile 2>/dev/null || true
|
||||
if have fallocate; then
|
||||
fallocate -l "${want_gb}G" /swapfile 2>/dev/null || dd if=/dev/zero of=/swapfile bs=1M count=$((want_gb * 1024)) status=none
|
||||
fallocate -l "${want_gb}G" /swapfile 2>/dev/null ||
|
||||
dd if=/dev/zero of=/swapfile bs=1M count="$want_mb" status=none
|
||||
else
|
||||
dd if=/dev/zero of=/swapfile bs=1M count=$((want_gb * 1024)) status=none
|
||||
dd if=/dev/zero of=/swapfile bs=1M count="$want_mb" status=none
|
||||
fi
|
||||
chmod 600 /swapfile
|
||||
mkswap /swapfile >/dev/null
|
||||
swapon /swapfile
|
||||
if ! grep -q '^/swapfile' /etc/fstab; then
|
||||
swapon /swapfile || {
|
||||
warn "не удалось активировать swap"
|
||||
return 0
|
||||
}
|
||||
if ! grep -qE '^/swapfile[[:space:]]' /etc/fstab; then
|
||||
printf '/swapfile none swap sw 0 0\n' >>/etc/fstab
|
||||
fi
|
||||
ok "swap ${want_gb} GB активирован"
|
||||
|
||||
Reference in New Issue
Block a user