From 4c17080c02d4bf5c79c2197f34e3d505f1a0bc48 Mon Sep 17 00:00:00 2001 From: grendervill Date: Sat, 19 Sep 2026 20:23:43 +0300 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20ensure=5Fswap=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=BC=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=83=D0=B6=D0=B5=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=20swap=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - проверяем /proc/swaps, а не только имя /swapfile - rm -f перед созданием и мягкая обработка ошибки swapon - на VPS с /swap.img установщик больше не падает с 'Text file busy' --- deploy/install.sh | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/deploy/install.sh b/deploy/install.sh index d42b624..3d27542 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -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 активирован"