dphys-своп-файл не вычислит больше, чем файл подкачки на 2 ГБ

Динамический dphys-своп-файл программы файла подкачки (доступный из Кв.) не реконфигурировал при изменении конфигурации в /etc/dphys-swapfile.

В основном я удалил комментарий '#' и изменил значение на 8 ГБ.

# restrict size (computed and absolute!) to maximally this limit
#   can be set to empty for no limit, but beware of filled partitions!
#   this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
#   but is also sensible on 64bit to prevent filling /var or even / partition
CONF_MAXSWAP=8192

Затем я работаю

sudo dphys-swapfile setup

Но новая конфигурация не вычисляется, и я получаю это, как произведено

computing size, username@ubuntu:~$

Остановка dphys-своп-файла и выполнение установки, затем запускающейся, не делают, что-либо и размер своп-файла продолжают быть 2 ГБ.

Удаление своп-файла /var/swap затем повторное выполнение установки производит тот же вывод выше затем попытки запустить его ошибки, потому что своп-файл отсутствует.

username@ubuntu:~$ sudo dphys-swapfile swapon
/sbin/dphys-swapfile: ERROR: swap file /var/swap missing! you need to first run  /sbin/dphys-swapfile setup  to generate one
3
задан 3 October 2018 в 00:34

2 ответа

Прекращение выполнения при вычислении LP # 1788681 уже зафиксировано в текущей ветке разработки Cosmic, но еще не в 18.04 Bionic. (Кажется, я не могу пометить эту ошибку как влияющую на конкретную версию Ubuntu, поэтому кто-то другой должен это делать.) заменяет все вхождения p q (отображаются только в командах, переданных в dc) просто p.

Полный патч доступен в Gitlab Debian.

Вероятно, самый простой способ исправить это локально на Bionic - это установить dphys-swapfile из Ubuntu Cosmic на Bionic. Например. Загрузите соответствующий бинарный пакет с Launchpad , а затем установите его или обновите его, используя dpkg -i dphys-swapfile_20100506-5_all.deb с правами root.

P.S .: Нет необходимости переключать скрипт на bash.

2
ответ дан 1 December 2019 в 16:16

Это появляется это sudo apt install dphys-swapfile выполнения /bin/sh сценарии правильно на Ubuntu 18.04

Однако на повторном использовании /sbin/dphys-swapfile /bin/sh сбой вычислений arithmitic.

После помещения некоторых echo отладки вокруг места и после осмотра кода, я замечаю, что перерасчеты должны были повторить намного больше текста при использовании setup/install параметры. После большего количества отладки я заметил, что это - строки с arithmitic вычислениями, которые выходят/допущение ошибки.

Таким образом, то, что я сделал, изменяется хижина от /bin/sh кому: /bin/bash и добавил let перед всеми строками с вычислениями.

Это решило проблему, и теперь файл подкачки может быть изменен динамично!

Внизу копия моего фиксированного сценария dphys-своп-файла от /sbin/dphys-swapfile необходимо отредактировать это с sudo.


#! /bin/bash
# /sbin/dphys-swapfile - automatically set up an swapfile
# author Neil Franklin, last modification 2010.05.05
# This script is copyright ETH Zuerich Physics Departement,
#   use under either BSD or GPL license

# this script is intended to be run as root user, usually while booting

# 2018/10/01 - DanglingPointer - Changed shebang line from /bin/sh to /bin/bash; then added 'let' to all arithmetic calculations to fix bug wherein "setup/install" parameter would not work in Ubuntu.


### ------ configuration for this site


# --- CONF_* various site dependant user config variables

# where we want the swapfile to be, this is the default
CONF_SWAPFILE=/var/swap

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=

# set size to computed value, this times RAM size, dynamically adapts,
#   guarantees that there is enough swap without wasting disk space on excess
CONF_SWAPFACTOR=2

# restrict size (computed and absolute!) to maximally this limit
#   can be set to empty for no limit, but beware of filled partitions!
#   this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
#   but is also sensible on 64bit to prevent filling /var or even / partition
CONF_MAXSWAP=2048


### ------ actual implementation from here on
# no user settings any more below this point

set -e

# sanitise this place, else some commands may fail
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH


# what we are
NAME=dphys-swapfile
PNAME=dphys-swapfile

# check user config file, let user override settings
#   swap file place/filename and size
if [ -f /etc/"${PNAME}" ] ; then
  . /etc/"${PNAME}"
fi


case "$1" in

  setup)
    # (re-)size/-generate, fast if no memory size change

    if [ "${CONF_SWAPSIZE}" = "" ] ; then
      # no absolute size given, so automatically compute optimal size
      echo -n "computing size, " 
      echo
      # this seems to be the nearest to physical RAM size, lacks about 60k
      #   but it actually then fails from AMD64 kernel 2.6.32 onwards
      #KCORESIZE="`ls -l /proc/kcore | awk '{ print $5 }'`"
      ## make MBytes which rounded down will be exactly 1 too few, so add 1
      #MEMSIZE="`echo "${KCORESIZE} 1048576 / 1 + p q" | dc`"
      # so second attempt at finding out physical RAM size, lacks about 10M
      #   see how long this variant stays usable :-)
      MEMTOTAL="`grep '^MemTotal:' /proc/meminfo | awk '{ print $2 }'`"
      echo "Current MEMTOTAL = $MEMTOTAL " 
      echo
      # make MBytes which rounded down will be about 10 too few, so add 10
      let MEMSIZE="`echo "${MEMTOTAL} 1024 / 10 + p q" | dc`"
      echo "Computed MEMSIZE = $MEMSIZE " 
      echo

      # compute desired swap size, as factor * RAM
      let CONF_SWAPSIZE="`echo "${MEMSIZE} ${CONF_SWAPFACTOR} * p q" | dc`"
      # remove any fractional MBytes
      CONF_SWAPSIZE="`echo "${CONF_SWAPSIZE}" | cut -f 1 -d '.'`"
    fi

    # announce end resulting config
    echo -n "want ${CONF_SWAPFILE}=${CONF_SWAPSIZE}MByte"

    if [ "${CONF_MAXSWAP}" != "" ] ; then
      # check for swap size limit and restrict to it
      if [ "${CONF_SWAPSIZE}" -gt "${CONF_MAXSWAP}" ] ; then
        echo -n ", restricting to config limit: ${CONF_MAXSWAP}MBytes"
        CONF_SWAPSIZE="${CONF_MAXSWAP}"
      fi
    fi


    # we will be later starting, and in between possible deleting/rebuilding
    #   so deactivate any already running swapfile, to avoid errors
    "$0" swapoff



    # compare existing swapfile (if one exists) to see if it needs replacing
    if [ -f "${CONF_SWAPFILE}" ] ; then

      echo -n ", checking existing"

      # we need bytes for comparing with existing swap file
      let SWAPBYTES="`echo "${CONF_SWAPSIZE} 1048576 * p q" | dc`"

      FILEBYTES="`ls -l "${CONF_SWAPFILE}" | awk '{ print $5 }'`"

      # wrong size, get rid of existing swapfile, after remake
      if [ "${FILEBYTES}" != "${SWAPBYTES}" ] ; then

        echo -n ": deleting wrong size file (${FILEBYTES})"

        # deactivate and delete existing file, before remaking for new size
        "$0" uninstall

      else

        echo -n ": keeping it"

      fi
    fi

    # if no swapfile (or possibly old one got deleted) make one
    if [ ! -f "${CONF_SWAPFILE}" ] ; then

      echo -n ", generating swapfile ..."

      # first deleting existing mount lines, if any there (same code as above)
      grep -v "^${CONF_SWAPFILE}" /etc/fstab > /etc/.fstab
      mv /etc/.fstab /etc/fstab

      # use fallocate if found to create swapfile, else use dd
      type fallocate > /dev/null
      if [ $? -eq 0 ]; then
        fallocate -l "${CONF_SWAPSIZE}"M "${CONF_SWAPFILE}" 2> /dev/null
      else
        dd if=/dev/zero of="${CONF_SWAPFILE}" bs=1048576 \
          count="${CONF_SWAPSIZE}" 2> /dev/null
      fi

      # ensure that only root can read possibly critical stuff going in here
      chmod 600 "${CONF_SWAPFILE}"

      mkswap "${CONF_SWAPFILE}" > /dev/null

      # do not mount swapfile via fstab, because swapfile may only
      #   be created after partitions are all mounted, not here yet
      # so just add warning comment line that swapfile is not in fstab
      #   and because of this will get mounted by this script
      # get rid of possibly already existing comment about
      #   swapfile mounted by this script, to avoid duplicate comments
      grep -v "a swapfile is not" /etc/fstab > /etc/.fstab
      grep -v "${NAME}" /etc/.fstab > /etc/fstab
      # add new comment about this
      echo "# a swapfile is not a swap partition, no line here" >> /etc/fstab
      echo "#   use  ${NAME} swap[on|off]  for that" >> /etc/fstab

      # and inform the user what we did
      echo -n " of ${CONF_SWAPSIZE}MBytes"

    fi

    echo

    ;;


  install)
    # synonym for setup, in case someone types this
    "$0" setup

    ;;


  swapon)
    # as there can be no swapon in /etc/fstab, do it from here
    #   this is due to no possible insertion of code (at least in Debian)
    #     between mounting of /var (where swap file most likely resides)
    #     and executing swapon, where the file already needs to be existing

    if [ -f "${CONF_SWAPFILE}" ] ; then
      swapon "${CONF_SWAPFILE}" 2>&1 > /dev/null
    else
      echo "$0: ERROR: swap file ${CONF_SWAPFILE} missing!" \
          "you need to first run  $0 setup  to generate one"
    fi

    ;;


  swapoff)
    # as there can also be no swapoff in /etc/fstab, do it from here

    # first test if swap is even active, else error from swapoff
    if [ "`swapon -s | grep "${CONF_SWAPFILE}" | \
        cut -f 1 -d ' '`" != "" ] ; then
      swapoff "${CONF_SWAPFILE}" 2>&1 > /dev/null
    fi

    ;;


  uninstall)
    # note: there is no install), as setup) can run from any blank system
    #   it auto-installs as side effect of recomputing and checking size

    # deactivate before deleting
    "$0" swapoff

    if [ -f "${CONF_SWAPFILE}" ] ; then
      # reclaim the file space
      rm "${CONF_SWAPFILE}"
    fi

    # and get rid of now superfluous comment about swapfile mounting
    grep -v "a swapfile is not" /etc/fstab > /etc/.fstab
    grep -v "${NAME}" /etc/.fstab > /etc/fstab

    ;;


 *)
    echo "Usage: $0 {setup|swapon|swapoff|uninstall}"

    exit 1
    ;;

esac

exit 0
1
ответ дан 1 December 2019 в 16:16

Другие вопросы по тегам:

Похожие вопросы: