루트 드라이브에 디스크 공간이 부족합니다. 공간을 확보하려면 어떻게해야합니까?


33

Ubuntu 11.04를 사용하고 있으며 루트 디렉토리에 약간의 공간을 확보하고 싶습니다. 과부하되었습니다. 특히 응용 프로그램 설치에 사용되는 경로를 변경하고 싶습니다 (루트 드라이브에 직접 설치됨).

또 다른 고려 사항은 MySQL 데이터베이스 서버에서 작업하고 있다는 것입니다. 서버는 루트 디렉토리 자체에 설치되어 있으므로 데이터 손실 위험이 없습니다.

이 문제를 해결하는 데 도움이되는 몇 가지 팁을 알려주세요.

답변:


36

최근에 나는 비슷한 상황에 직면했다. 너무 많은 응용 프로그램이 설치되어 내 루트 마운트 공간을 사용하기 시작했습니다. 내가 따라야 할 몇 가지 단계를 나열하고 있으며 동일한 단계를 사용할 수 있기를 바랍니다.

  1. apt-get 캐시를 정리하십시오. 다음 명령은 apt-get 캐시 디렉토리에서 다운로드 된 모든 deb 파일을 제거합니다.

    이 명령을 실행하십시오 : sudo apt-get clean

  2. / home 마운트 지점을 다른 드라이브로 이동하십시오 . 이전에는 내 홈 폴더가 루트 드라이브에있었습니다. 그래서 홈 폴더를 별도의 드라이브로 옮겼습니다. 이것은 대부분의 응용 프로그램이 데이터를 / home / user_name / 폴더에 저장하기 때문에 루트 마운트에서 많은 스트레스를 해제하는 데 도움이되었습니다. 홈 폴더를 별도의 드라이브로 이동하는 방법을 읽으십시오 .

  3. 루트 파티션의 크기를 늘리면 매우 확실한 대답이라는 것을 알고 있습니다. 하지만 시간이지나면서 데이터가 변경되어야한다고 믿습니다. 20GB / 루트 마운트로 충분하다고 생각했지만 1 년이 지나면 루트 마운트의 크기를 조정하고 50GB로 늘 렸습니다.


8
예상보다 정리 해방 공간, +1을 apt-get을 sudo는
BTK

그주의 apt-get clean도 패키지를 설치을 제거합니다. 업그레이드에 실패한 경우이를 유지해야 할 수 있습니다.
timss

캐시를 정리하고 10Gb를 정리했습니다! +1
Numeri에 따르면 Reinstate Monica는

27

다음 명령을 사용하여 오래된 헤더와 이미지를 제거하여 3.5GB를 성공적으로 지 웠습니다.

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

명령의 첫 번째 부분을 실행하여 제거 할 패키지를 확인할 수 있습니다.

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

참고


다른 팁은 도움이되지 않았지만 5G 주위를 구했습니다. 감사.
baltasvejas

-yapt-get 명령 의 옵션 은 실제로 필요하지 않습니다. 생략하면 apt-get은 모든 파이프 패키지를 제거해야하는지 묻습니다 (한 번만). Imho 사용하지 않는 것이 좋습니다 -y. 위에서 언급 한 두 번째 명령 외에도 확인할 가능성이 하나 더 있습니다. 나를 위해 이것은 루트 파티션에서 15GB를 해제했습니다!
Boris Däppen

2
이 명령 dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge 은 시스템에 현재 설치된 커널 버전을 제거하려고 시도했습니다. 시스템을 부팅 할 수 없도록주의하십시오.
Antony

@Antony yaikes! 나는 이것을 시도하려고했다. 삭제할 것이 어떤지 어떻게 확인할 수 있습니까?
소닉 소울

2
@SonicSoul 나는 결국 아래 답변 중 하나 ( askubuntu.com/a/778442/333806 )가 제안 하는 것을 끝내 었습니다 . 기본적으로 uname -r현재 커널을 찾아서 제거하지 않도록주의했습니다. homebrand제거 할 패키지를 확인하기 위해 제공 한 명령에 현재 커널이 표시되지 않으면 해당 패키지에서 언급 한 제거 명령을 안전하게 실행해야합니다.
Antony

22

dpkg-query가장 큰 패키지를 찾고 더 이상 필요하지 않은 패키지를 제거하는 데 사용하십시오 ( source ).

dpkg-query --show --showformat='${Package;-50}\t${Installed-Size}\n' | sort -k 2 -n | grep -v deinstall | awk '{printf "%.3f MB \t %s\n", $2/(1024), $1}'

1
이제 이것은 정말 유용한 원 라이너입니다. 가장 큰 설치 패키지를 빠르게 요약 할 수 있습니다. 내 도트 파일로 오세요!
arainone

이것을 통해 얻을 수 있습니다wajig sizes
Pablo A

13
sudo apt autoclean  # clean /var/cache/apt/archives folder which save packages while install.
sudo apt autoremove # this command remove unused packages.

sudo shutdown -rf   # it will restart your PC immediately and check filesystem in next boot.

19
설명이 없습니다. 누군가 코드를 복사 / 붙여 넣기 만하면 경고없이 시스템이 종료되어 데이터가 손실 될 수 있습니다. 명령에 대한 설명없이 명령을 제공하지 마십시오. -1
Jo-Erlend Schinstad

9
파일 시스템을 확인해야하는 이유는 무엇입니까?
Nathan Osman

10

이전 커널 버전을 제거하면 ( homebrand에서 이미 제안한 대로 ) 아직 그렇게하지 않은 경우 상당한 공간을 확보 할 수 있습니다.

이전 커널 버전을 제거하는 방법은 여러 가지가 있으며 다음과 같은 답변에서 다양한 옵션을 찾을 수 있습니다. 이전 커널 버전을 제거하여 부팅 메뉴를 정리하는 방법은 무엇입니까?

내가 선호하는 방법은 대부분이 간단한 답변으로 이해할 수있는 단계로 나뉘어 진 penreturns의 대답입니다 .

터미널을 열고 현재 커널을 확인하십시오.

uname -r

이 커널을 제거하지 마십시오!

그런 다음 시스템에 설치된 모든 커널을 보거나 나열하려면 아래 명령을 입력하십시오.

dpkg --list | grep linux-image

현재 커널보다 낮은 모든 커널을 찾으십시오. 제거 할 커널을 알면 아래에서 계속하여 제거하십시오.

아래 명령을 실행하여 선택한 커널을 제거하십시오.

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

그런 다음 제거가 끝나면 'update-grub2'라고 대답합니다.이 날짜는 최신 버전이 아닙니다 sudo update-grub. 우분투 14.04 이상이면 충분합니다. 그런 다음 '시스템 재부팅'(정리 된 부팅 메뉴를 볼 수있는 것처럼 보임)이라고 말하므로이 경우에는 필요하지 않습니다.

grub 부트 로더 메뉴는 기본 페이지에 모든 이전 커널 버전을 표시하는 데 사용되었지만 이제는 하위 메뉴 뒤에 배치됩니다. 훨씬 깔끔하지만 Ubuntu / Linux를 처음 접하는 사람들은 공간을 차지하고 있음을 인식하지 못할 수 있습니다.

제안한대로 현재 커널을 제거하지 말고 이전 커널 버전으로 롤백해야하는 경우를 대비하여 이전 커널 버전도 유지하는 것이 좋습니다.

이 작업을 수행하는 더 빠른 방법이 있지만 주로 각 방법을 따라 각 명령을 이해할 수 있기 때문에이 방법의 단순성을 선호합니다.

"어떤 커널 버전은 내가 좋아?이 퍼지 할 커널 버전은 무엇? 사용하고 있음을 하나."

헹구고, 반복하고, 확보 한 공간에 감탄하십시오.

dpkg --list | grep linux-image터미널에서 제공 하는 결과에서 제거하려는 특정 이전 커널의 이름을 복사 한 다음 sudo apt-get purge복사 한 이름 을 사용 하여 붙여 넣기 가 매우 쉽습니다 .

3 개 또는 4 개의 이전 커널을 제거하면 일반적으로 루트 드라이브에서 약 GB의 공간이 확보됩니다.


1
리눅스 이미지 외에도 리눅스 헤더를 grep하고 제거 할 수도 있습니다
kdopen

8

서버에서 여유 공간을 더 확보해야 할 때이 명령을 사용합니다.

find / -type f -size +50M -exec du -h {} \; | sort -n

50MB보다 큰 모든 파일을 찾은 다음 " du -h"더 나은 파일 목록을 "sort -n만들고 파이프 뒤에 ""를 파일 크기별로 숫자 순으로 정렬합니다.


시스템의 크기에 따라 시간이 다소 걸릴 수 있습니다. HDD에서 약 500 기가 바이트에 15 분
Gabriel Fair

7

우분투 커뮤니티 문서 의 지침에 따라 방대한 휴지통 파일을 발견했습니다 ./var/log/syslog.1의 백업처럼 보였으며 아마도 syslog에 많은 양의 출력이 퍼져 나갔을 것입니다 ...

찾은 명령은 다음과 같습니다.

sudo find / -size +1G

그리고 폴더에있는 큰 파일 .Trash은 아마도 삭제하는 것이 좋습니다 ...


5

루트 파티션의 여유 공간을 확보하기 위해 실행하는 스크립트는 다음과 같습니다.

function myclean {
    ## Show free space
    df -Th | grep -v fs
    # Will need English output for processing
    LANG=en_GB.UTF-8

    ## Clean apt cache
    apt-get update
    apt-get -f install
    apt-get -y autoremove
    apt-get clean

    ## Remove old versions of snap packages
    snap list --all | while read snapname ver rev trk pub notes; do
        if [[ $notes = *disabled* ]]; then
            snap remove "$snapname" --revision="$rev"
        fi
    done
    ## Set snap versions retain settings
    if [[ $(snap get system refresh.retain) -ne 2 ]]; then snap set system refresh.retain=2; fi
    rm -f /var/lib/snapd/cache/*

    ## Remove old versions of Linux Kernel
    # This one-liner is deprecated since 18.04
    # dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs apt-get -y purge
    # New 2 lines to remove old kernels
    dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
    dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

    ## Rotate and delete old logs
    /etc/cron.daily/logrotate
    find /var/log -type f -iname *.gz -delete
    sudo journalctl --rotate
    sudo journalctl --vacuum-time=1s

    ## Show free space
    df -Th | grep -v fs
}

편집 : 새로운 2 줄 오래된 커널 클리너
cmak.fr

감사! "오래된 로그 회전 및 삭제"로 인해 드라이브에서 몇 개의 기가 지워집니다.
SaTa

좋은. 개발자는 사용하지 않은 도커 이미지제거 할 수도 있습니다 .docker system prune
Pablo A

@Pablo A 그들도 볼 수 /var/crash/*.crash있습니다
cmak.fr

2

우분투에서 각 폴더는 자체 파일 시스템을 가질 수 있습니다. 즉, 폴더를 자체 파티션, 다른 디스크 또는 원격 네트워크로 옮길 수 있습니다. 개인 설정을 변경하거나 파일을 잃지 않고 Ubuntu를 다시 설치할 수 있기 때문에 홈 디렉토리에 특히 인기가 있습니다. 또한 사용자가 다른 컴퓨터에 로그온하여 여전히 개인 설정 및 파일을 얻을 수 있어야하는 네트워크에서 인기가 있습니다. 그러나 당신과 같은 많은 다른 경우에 유용합니다.

제안한 것처럼 응용 프로그램이 특정 폴더에 설치되어 있지 않습니다. 응용 프로그램의 다른 부분은 파일 시스템의 다른 부분에 배치됩니다. 메인 프로그램은 보통 / usr / bin에 있고, 설정 파일은 / etc에 있습니다. 귀하의 경우 MySQL의 경우 데이터베이스 자체는 / var에 있습니다. / var / mysql이라고 생각합니다.

/ usr 및 / var는 모두 루트 파일 시스템의 디렉토리이므로 루트 파일 시스템 공간을 사용합니다. 그러나 내가 말했듯이 다른 파일 시스템으로 옮길 수 있습니다. MySQL의 경우 데이터베이스가 저장되는 위치를 구성 할 수 있습니다. 예를 들어 데이터베이스를 /home/username/.mysql/databases로 쉽게 이동할 수 있습니다.


1

패키지 관리자가 응용 프로그램을 설치하는 경로는 변경할 수 없습니다. 대부분의 응용 프로그램 파일은에 저장됩니다 /usr. 루트 파티션의 공간을 복구 /usr하려면 다른 파티션으로 이동 하는 것이 가능한 해결책입니다.

의견에서 :

  • 복사 할 때 권한을 유지하십시오. 즉, 파일 관리자가 무엇을할지 확실하지 않은 경우 명령 줄을 사용하는 것이 좋습니다.

  • 이를위한 올바른 방법은 / usr에 새 파일 시스템을 마운트하거나를 사용하는 것 mount --bind입니다. 심볼릭 링크가 얼마나 잘 작동하는지는 확실하지 않습니다.


/ usr 이동에주의하십시오. cp 명령을 사용하여 usr 폴더를 동일한 권한으로 복사하십시오. 그런 다음 원본 / usr 폴더를 삭제하고 /에 usr 폴더 링크를 만듭니다.
shantanu

1
마운트 포인트가 있어야합니다. 링크가 아닙니다.
Jo-Erlend Schinstad

작은 참고 : 많은 응용 프로그램은 바이너리 및 응용 프로그램 데이터를에 설치합니다 /opt.
Nathan Osman

@ george-edison 글쎄, 일부 응용 프로그램은 /opt"규칙" 에 반하여 설치 합니다.
Jan

1

별도의 파일 시스템이 많을 경우 다음과 같은 트릭이 유용 할 수 있습니다. 다른 시간에 마운트 / 이번에는 / mnt 아래에 있습니다. 이제 잘못된 파일 시스템을 가로 지르지 않고 크거나 많은 파일을 검색 할 수 있습니다.

또한 다른 마운트 아래에 숨겨져있는 파일을 찾는 데 도움이 될 수 있습니다.



0

mssql 데이터베이스 서버가 설치되어 있으면 메모리가 소모 될 수 있습니다. NCurses 디스크 사용량 실행

$ sudo ncdu / 

최대 저장 공간을 사용하는 폴더 및 파일을 확인합니다. mssql 데이터는 일반적으로

/var/opt/mssql/backup/

질문은 데이터베이스가 남아 있어야한다고 말합니다.
Stephen Rauch 2016 년

질문은 MySql 데이터베이스를 언급 했으므로 MsSQL 데이터베이스 데이터를 제거하면 꽤 공정한 답변 인 것 같습니다.
Yogesh

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.