Как аккуратно удалить ненужные ядра? [дубликат]

На этот вопрос уже есть ответ здесь:

] У меня мало места на диске, и я заметил, что у меня есть несколько ядер, которые я, вероятно, никогда не собираюсь использовать, занимая место. Была программа под названием компьютерный уборщик, которая убирала вещи (и многие вещи, которые вы не хотел убирать), но я не могу его найти. Есть ли предпочтительная альтернатива?

Большое спасибо!

2
задан 8 April 2013 в 04:16

3 ответа

У меня есть старый ответ на эту тему, который очень полезен: Как найти старые ядра

Он целенаправленно останавливается без удаления пакетов, потому что это большая ответственность для ] мои плечи. Сценарий удалит новые ядра, если вы не перезагрузили их с момента их установки. Он не будет держать тебя за руку.

Я написал быстрый вариант команды, который показывает все, кроме текущего ядра. Вы можете использовать это как основу для удаления, но что бы вы ни делали с этим, вам нужно убедиться, что вы не удаляете ядра, которые вы только что установили.

dpkg -l | grep -Eo "^.i +linux-(image|headers)[^ ]+" | cut -c 5- | grep -v `uname -r`
0
ответ дан 8 April 2013 в 04:16
  1. Во-первых, вам нужно увидеть, какое ядро ​​вы используете в данный момент, потому что вы не должны его удалять. Yoy может видеть, что с помощью команды:

    uname -r

  2. Затем вы можете увидеть установленные ядра с помощью команды:

    dpkg - список | grep linux-image

  3. И вы можете удалить дополнительное ядро, используя apt-get следующим образом:

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

Где xxx-x - ядро, которое вы хотите удалить. Помните, что вы не должны удалять тот, который используется в данный момент (вывод uname -r). Вам следует сохранить второе ядро ​​в качестве резервной копии на случай, если первое произойдет сбой.

В качестве альтернативы можно привести «Дворник» Ubuntu Tweak, который может удалять неиспользуемые ядра.

0
ответ дан 8 April 2013 в 04:16

Я написал функцию Bash для этой цели. Совместное использование является заботой, поэтому здесь мы используем функцию Bash, которую я успешно использовал в Debian 5 и 6, а также версии Ubuntu между 10.04 и 12.10. Со временем оно немного изменилось, но никогда не подводило меня. Он автоматизирует «процесс принятия решения».

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

function prune-kernels
{
        [[ -f "/etc/debian_version" ]] || { echo -e "\033[01;32mERROR:\033[00m This has only been tested on Debian/Ubuntu."; return; }
        [[ -e "/vmlinuz" ]] || { echo -e "\033[01;32mERROR:\033[00m Expected /vmlinuz to exist."; return; }
        [[ "$UID" -eq "0" ]] || local SUDO=sudo
        # Figure out the name of the newest and the previous kernel
        local OLDKRNL=$(readlink -f /vmlinuz.old)
        local NOWKRNL=$(readlink -f /vmlinuz)
        # If vmlinuz doesn't exist, Also prune "/vmlinuz.old"?
        [[ -e "/vmlinuz.old" ]] || OLDKRNL="$NOWKRNL"
        # Also prune "/vmlinuz.old"? If so, pretend old and new have the same name to skip only the new one
        [[ "$1" == "--old" ]] && local OLDKRNL="$NOWKRNL"
        # Strip path
        OLDKRNL="${OLDKRNL##*/vmlinuz-}"
        NOWKRNL="${NOWKRNL##*/vmlinuz-}"
        local VERSIONS=$(echo $(for krnl in /boot/vmlinuz-*; do echo "${krnl##*/vmlinuz-}"; done) $(for krnl in $(dpkg -l|command grep 'linux-image'|command grep '^ii'|command grep -v 'meta-package'|command grep 'linux-image-[[:digit:]]\.[[:digit:]]*\.[[:digit:]]'|awk '{print $2}'); do echo ${krnl##linux-image-}; done)|sort|uniq|sed -e "s:$NOWKRNL::g;s:$OLDKRNL::g;s:$(uname -r)::g")
        echo -ne "\033[01;32mSkipping \033[01;33mthe following kernels:\033[00m $NOWKRNL"
        [[ "$(uname -r)" == "$NOWKRNL" ]] || { echo -ne ", $(uname -r)"; }
        echo -ne " (\033[0;32mcurrently running\033[00m)"
        [[ "$OLDKRNL" == "$NOWKRNL" ]] || echo -ne ", $OLDKRNL (\033[0;33mold kernel\033[00m)"
        echo ""
        # Remove packages
        local PACKAGES=$(for i in $VERSIONS; do echo -n "linux-image-$i linux-headers-$i "; done)
        if [[ -n "$PACKAGES" ]]; then
                echo -e "\033[0;32m[STEP 1] \033[01;33mRemoving packages\033[00m"
                $SUDO apt-get remove $PACKAGES || { echo -e "\033[01;31mSeems that apt-get was not successful, aborting.\033[00m"; return; }
        else
                echo -e "\033[01;32mNo packages need to be removed.\033[00m"
        fi
        # Remove any remaining kernel images etc from /boot
        local FILES=$(for fname in $(for i in $VERSIONS; do echo -n "/boot/abi-$i /boot/initrd.img-$i config-$i System.map-$i vmcoreinfo-$i vmlinuz-$i "; done); do [[ -f "$fname" ]] && { echo -n "$fname "; }; done)
        if [[ -n "$FILES" ]]; then
                echo -e "\033[0;32m[STEP 2] \033[01;33mNow removing remaining files:\033[00m $FILES"
                $SUDO rm -f $FILES
        else
                echo -e "\033[01;32mNothing else to clean up.\033[00m"
        fi
}

Поместите функцию в файл и отправьте ее из вашего .bashrc или просто извлеките из специальной оболочки и запустите ее. Если вы не сделали что-то замысловатое в настройках apt-get, это будет отображаться перед выполнением действий.

Функция также принимает параметр --old для удаления всего, кроме работающего ядра. По умолчанию он пропускает работающее и старое (/vmlinuz.old) ядра во время сокращения.

Также обратите внимание: эта функция прекрасно работает даже в тех случаях, когда работающее ядро ​​старше текущей (ссылка /vmlinuz) и старой (ссылка /vmlinuz.old) ядра.

Раскрытие: почти 1: 1 копия из моего более раннего ответа здесь .

0
ответ дан 8 April 2013 в 04:16

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

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