Удалить новые ядра / boot full

Да, механизм подкачки ужасающе неэффективен. Обходной путь прост: перебирать процессы вместо перебора замененных страниц. Используйте этот сценарий python (я не являюсь аффилированным лицом):

git clone https://github.com/wiedemannc/deswappify-auto
cd ./deswappify-auto
sudo python3 deswappify_auto.py -d -v info

Обратите внимание, что режим работы демона предназначен только для настольных / портативных компьютеров, которые часто переходят в спящий режим. Я бы не стал запускать его как демон в серверной системе - просто запустите его на некоторое время, подождите, пока он не сообщит, что позаботился о некоторых процессах, затем остановите его и попробуйте:

swapoff /dev/x

Поскольку большинство страниц теперь присутствует как в swap и в памяти, swapoff имеет очень мало функций и теперь должен быть невероятно быстрым (я видел сотни МБ / с).

Впереди раздел истории

Вышеупомянутый сценарий python основан на остальной части этого ответа, который, в свою очередь, был моим улучшением этого более старого ответа , автором jlong ​​. Поскольку сценарий намного безопаснее, я рекомендую попробовать только оставшуюся часть моего ответа в качестве последней линии защиты :

perl -we 'for(`ps -e -o pid,args`) { if(m/^ *(\d+) *(.{0,40})/) { $pid=$1; $desc=$2; if(open F, "/proc/$pid/smaps") { while() { if(m/^([0-9a-f]+)-([0-9a-f]+) /si){ $start_adr=$1; $end_adr=$2; }  elsif(m/^Swap:\s*(\d\d+) *kB/s){ print "SSIZE=$1_kB\t gdb --batch --pid $pid -ex \"dump memory /dev/null 0x$start_adr 0x$end_adr\"\t2>&1 >/dev/null |grep -v debug\t### $desc \n" }}}}}' | sort -Vr | head

Это длится примерно 2 секунды и на самом деле ничего не сделает, просто перечислите верхнюю часть 10 сегментов памяти (на самом деле он печатает больше однострочников; да, я люблю однострочники; просто изучите команды, примите риск, скопируйте и вставьте в вашу оболочку; они фактически будут читать из подкачки).

...Paste the generated one-liners...
swapoff /your/swap    # much faster now

Основной однострочный файл безопасен (для меня), за исключением того, что он много читает / proc.

Подкоманды, подготовленные для вашего ручного исследования, небезопасны . Каждая команда будет зависать от одного процесса на время чтения сегмента памяти из подкачки. Так что с процессами, не допускающими пауз, небезопасно.Скорость передачи данных, которую я видел, была порядка 1 гигабайта в минуту. (Вышеупомянутый скрипт python устранил этот недостаток).

Другой опасностью является чрезмерная нагрузка на память системы, поэтому проверьте с помощью обычного free -m

Что он делает?

for(`ps -e -o pid,args`) {

  if(m/^ *(\d+) *(.{0,40})/) { 
    $pid=$1; 
    $desc=$2; 

    if(open F, "/proc/$pid/smaps") { 

      while() { 

        if(m/^([0-9a-f]+)-([0-9a-f]+) /si){ 
          $start_adr=$1; 
          $end_adr=$2; 
        } elsif( m/^Swap:\s*(\d\d+) *kB/s ){
          print "SSIZE=$1_kB\t gdb --batch --pid $pid -ex \"dump memory /dev/null 0x$start_adr 0x$end_adr\"\t2>&1 >/dev/null |grep -v debug\t### $desc \n" 
        }
      }
    }
  }
}

Результатом этого сценария perl является серия gdb команды вывести память (диапазон) , которые вызывают в память подкачанные страницы.

Вывод начинается с размера, поэтому его достаточно легко передать через | sort -Vr | head , чтобы получить 10 самых больших сегментов по размеру (SSIZE). -V обозначает сортировку по номеру версии, но она работает для моих целей. Я не мог понять, как заставить работать числовую сортировку.

8
28.12.2016, 18:40
4 ответа

Для Ubuntu Grub2 автоматически отображает последнее ядро ​​и скрывает старые ядра. Если вы хотите их увидеть, вы можете нажать Shift во время загрузки.

Итак, перед удалением старых ядер загрузитесь с последним доступным ядром (grub2 загружает его по умолчанию при загрузке). Чтобы проверить, какое ядро ​​вы используете, вы можете использовать команду:

uname -r

Рекомендуется оставить как минимум два, а лучше три ядра, включая последнее. Причина в том, что у вас будет хотя бы одно / два других ядра для загрузки, если окажется, что вы не можете загрузиться с последним ядром.

Чтобы удалить старые ядра, откройте терминал и проверьте текущее ядро:

uname -r 

Затем, чтобы вывести список всех установленных ядер в вашей системе.

dpkg --list | grep linux-image 

Найдите все ядра ниже, чем у вашего текущего ядра. Выполните следующие команды, чтобы удалить выбранное ядро:

sudo apt-get purge linux-image-x.x.x.x-generic 

Наконец, выполните приведенные ниже команды, чтобы обновить grub2

sudo update-grub2 

И перезагрузите систему.

4
27.01.2020, 20:09

apt-get autoremove , запускаемый периодически, должен помочь вам достичь желаемого. Работающего ядра, предыдущего ядра и двух последних ядер должно быть достаточно.

3
27.01.2020, 20:09

Загрузите одно из предыдущих ядер.

Сначала попробуйте apt autoremove --purge

Если не работает dpkg -l 'linux- [ihs] *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s / \ ([- 0-9] * \) - \ ([^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d'

Управляйте тем, что будет деинсталлт.

dpkg -l 'linux- [ihs] *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s / \ ([- 0-9] * \) - \ ([^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d' | xargs sudo dpkg -P Это очистит список ядра из приведенной ниже команды.

sudo apt -f install

и наверняка

 sudo update-grub
3
27.01.2020, 20:09

Чтобы очистить старое ядро, вы можете использовать инструмент командной строки purge-old-kernels .

Эта программа удалит старое ядро ​​и пакеты заголовков из системы , освобождая место на диске. Он никогда не удалит работающее в данный момент ядро ​​ . По умолчанию он сохраняет как минимум 2 последних ядра, но пользователь может переопределить это значение с помощью параметра --keep. Любые дополнительные параметры будут переданы непосредственно в apt-get

. Чтобы установить purge-old-kernels , запустите:

sudo apt install byobu

или

sudo apt install bikeshed

Чтобы сохранить последнюю версию n запуск ядра:

sudo purge-old-kernels --keep n

e, g: n = 2

sudo purge-old-kernels --keep 2

Обновление grub :

sudo update-grub
7
27.01.2020, 20:09

Теги

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