Ổ đĩa gốc đang hết dung lượng đĩa. Làm thế nào tôi có thể giải phóng không gian?


35

Tôi đang sử dụng Ubuntu 11.04 và tôi muốn giải phóng một số dung lượng trong thư mục gốc đã bị quá tải. Tôi đặc biệt muốn thay đổi đường dẫn được sử dụng để cài đặt các ứng dụng (chúng đang được cài đặt trực tiếp vào ổ đĩa gốc).

Một cân nhắc khác là tôi đang làm việc trên một máy chủ cơ sở dữ liệu MySQL. Máy chủ được cài đặt trong thư mục gốc, vì vậy tôi không muốn có nguy cơ mất bất kỳ dữ liệu nào.

Xin vui lòng cho tôi một số lời khuyên để giúp loại bỏ vấn đề này.

Câu trả lời:


36

Gần đây tôi phải đối mặt với tình huống tương tự. Quá nhiều ứng dụng đã được cài đặt và chúng bắt đầu sử dụng không gian gắn kết gốc của tôi. Tôi liệt kê ra vài bước mà tôi đã làm theo và hy vọng rằng bạn cũng có thể sử dụng tương tự.

  1. Làm sạch bộ đệm apt-get. Lệnh sau sẽ xóa tất cả các tệp gỡ lỗi đã tải xuống khỏi thư mục bộ đệm apt-get.

    Chạy lệnh này: sudo apt-get clean

  2. Di chuyển / điểm gắn kết nhà vào ổ đĩa khác nhau . Trước đây, thư mục nhà của tôi nằm trên ổ đĩa gốc. Vì vậy, tôi chuyển thư mục nhà của tôi để ổ đĩa riêng. Điều này giúp tôi giải phóng rất nhiều căng thẳng từ root mount vì hầu hết các ứng dụng lưu trữ dữ liệu của họ trong thư mục / home / user_name /. Đọc làm thế nào để di chuyển thư mục nhà để tách ổ đĩa.

  3. Tăng kích thước của phân vùng gốc tôi biết đó là câu trả lời rất rõ ràng. Nhưng hãy tin tôi, dữ liệu của chúng tôi cần thay đổi theo thời gian. Tôi nghĩ rằng 20 GB / root mount sẽ đủ nhưng trong một năm tôi đã thay đổi kích thước mount gốc của mình và tăng lên 50 GB.


8
sudo apt-get sạch sẽ giải phóng nhiều không gian hơn dự kiến, +1
btk

Cẩn thận apt-get cleanloại bỏ các gói thậm chí cài đặt. Bạn có thể muốn giữ những người trong trường hợp nâng cấp thất bại.
timss

Tôi đã xóa bộ nhớ cache của mình và nó đã xóa 10 Gb! +1
Numeri nói Phục hồi lại

28

Tôi đã xóa thành công 3,5 GB bằng cách xóa các tiêu đề và hình ảnh cũ, sử dụng lệnh sau:

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

Bạn có thể kiểm tra những gói nào sẽ bị xóa khi thực hiện phần đầu tiên của lệnh:

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

Tài liệu tham khảo


Các mẹo khác không giúp được gì, nhưng điều này đã giúp tôi tiết kiệm khoảng 5G. Cảm ơn.
baltasvejas

Tùy chọn -ytrong lệnh apt-get là không thực sự cần thiết. Nếu bạn bỏ qua nó, apt-get sẽ hỏi bạn (chỉ một lần), nếu tất cả các gói đường ống sẽ bị xóa. Imho tốt hơn là không sử dụng -y, nó cung cấp cho bạn thêm một khả năng để kiểm tra (bên cạnh lệnh thứ hai được đề cập ở trên). Đối với tôi điều này giải phóng 15GB trên phân vùng gốc!
Boris Däppen

2
Lệnh 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 đã cố gắng loại bỏ phiên bản kernel hiện được cài đặt trong hệ thống của tôi. Hãy cẩn thận để không làm cho hệ thống của bạn không thể khởi động.
Antony

@Antony yaikes! tôi đã định thử cái này Làm thế nào tôi có thể xác minh đó là ok để xóa?
Linh hồn Sonic

2
@SonicSoul Cuối cùng tôi đã thực hiện được những gì một trong những câu trả lời dưới đây ( askubfox.com/a/778442/333806 ) gợi ý. Về cơ bản, chạy uname -rđể tìm kernel hiện tại và chú ý không loại bỏ nó. Nếu lệnh được cung cấp bởi homebrandđể kiểm tra gói nào sẽ bị xóa không hiển thị kernel hiện tại, thì bạn nên an toàn khi chạy lệnh thanh lọc được đề cập bởi anh ta.
Antony

22

Sử dụng dpkg-queryđể tìm các gói lớn nhất và xóa những gói bạn không cần nữa ( nguồn ):

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
Bây giờ đây là một lót thực sự hữu ích. Hoàn hảo cho một bản tóm tắt nhanh chóng của các gói cài đặt lớn nhất. Hãy đến với dotfiles của tôi!
arainone

Bạn có thể có được điều này vớiwajig 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
Bạn không cung cấp giải thích. Nếu ai đó chỉ sao chép / dán mã của bạn, thì hệ thống sẽ tắt mà không có cảnh báo, có thể gây mất dữ liệu. Vui lòng không cung cấp các lệnh mà không có bất kỳ lời giải thích nào về những gì họ làm. -1
Jo-Erlend Schinstad

9
Tại sao cần phải kiểm tra hệ thống tập tin?
Nathan Osman

10

Loại bỏ các phiên bản kernel cũ (như được đề xuất bởi homebrand ) có thể giải phóng một lượng không gian kha khá nếu bạn chưa có cơ hội để làm điều đó.

Có một số cách để loại bỏ các phiên bản kernel cũ và một loạt các tùy chọn khác nhau có thể được tìm thấy trong các câu trả lời được đăng lên: Làm cách nào để xóa các phiên bản kernel cũ để dọn sạch menu boot?

Phương pháp ưa thích của tôi chủ yếu là câu trả lời này từ Penreturns , nơi nó được chia thành các bước khá đơn giản dễ hiểu:

Mở terminal và kiểm tra kernel hiện tại của bạn:

uname -r

ĐỪNG BỎ L K NÀY!

Tiếp theo, gõ lệnh bên dưới để xem / liệt kê tất cả các hạt nhân đã cài đặt trên hệ thống của bạn.

dpkg --list | grep linux-image

Tìm tất cả các hạt nhân thấp hơn hạt nhân hiện tại của bạn. Khi bạn biết loại bỏ kernel nào, hãy tiếp tục bên dưới để loại bỏ nó.

Chạy lệnh dưới đây để loại bỏ kernel bạn đã chọn.

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

Câu trả lời sau đó nói với 'update-grub2' khi bạn hoàn thành việc thanh trừng, có khả năng đã hết hạn ngay bây giờ: sudo update-grubnên đủ cho Ubuntu 14.04 trở đi. Sau đó, họ cũng nói với 'Khởi động lại hệ thống của bạn' (dường như là để bạn có thể thấy menu khởi động đã được dọn sạch) vì vậy trong trường hợp này là không cần thiết.

Menu bootloader grub được sử dụng để hiển thị tất cả các phiên bản kernel cũ hơn trên trang chính, nhưng chúng hiện được đặt ngoài đường phía sau menu phụ. Nó gọn gàng hơn nhiều nhưng một người mới sử dụng Ubuntu / Linux có thể không biết rằng họ đang chiếm dung lượng.

Như đã đề xuất, không xóa kernel hiện tại và bạn cũng nên giữ phiên bản kernel trước đó, chỉ trong trường hợp bạn cần quay lại kernel đó.

Có nhiều cách nhanh hơn để làm điều này, nhưng tôi thích sự đơn giản của phương thức này chủ yếu vì tôi có thể hiểu từng lệnh trên đường đi:

"Tôi đang sử dụng phiên bản kernel nào? Tôi có phiên bản kernel nào? Được rồi, thanh lọc cái đó ."

Rửa sạch, lặp lại, chiêm ngưỡng không gian bạn đã giải phóng.

Thật dễ dàng để sao chép tên của hạt nhân cũ cụ thể mà bạn muốn xóa khỏi kết quả dpkg --list | grep linux-imagecung cấp cho bạn trong thiết bị đầu cuối, sau đó sử dụng sudo apt-get purgevà dán tên đã sao chép vào.

Loại bỏ 3 hoặc 4 hạt nhân cũ hơn thường sẽ giải phóng khoảng một GB dung lượng trong ổ đĩa gốc của bạn.


1
Ngoài hình ảnh linux, bạn cũng có thể grep cho và thanh lọc các tiêu đề linux
kdopen

8

Khi tôi cần tạo thêm không gian trống trên máy chủ, tôi sử dụng lệnh này:

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

Nó tìm thấy tất cả các tệp lớn hơn 50 MB và " du -h" tạo danh sách tệp tốt hơn và "sort -n"sau khi đường ống tạo danh sách được sắp xếp bằng số theo kích thước tệp.


Tùy thuộc vào hệ thống của bạn lớn như thế nào, điều này có thể mất một thời gian. Mất 15 phút cho khoảng 500 gb trên ổ cứng
Gabriel Fair

7

Theo các hướng dẫn trên tài liệu cộng đồng Ubuntu, tôi phát hiện ra một tệp rác khổng lồ - nó trông giống như một bản sao lưu của /var/log/syslog.1, có lẽ có thứ gì đó đã tạo ra vô số đầu ra cho syslog ...

Lệnh tìm thấy nó là:

sudo find / -size +1G

Và sau đó, bất kỳ tệp lớn nào trong một thư mục được gọi .Trashcó lẽ là tốt để xóa ...


5

Đây là đoạn script tôi chạy để giải phóng không gian trên phân vùng gốc

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 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 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
}

Chỉnh sửa: Trình dọn dẹp nhân cũ 2 dòng mới
cmak.fr

Cảm ơn! "Xoay và xóa nhật ký cũ" xóa một số hợp đồng biểu diễn trên ổ đĩa của tôi.
SaTa

Tốt đẹp. Các nhà phát triển cũng có thể muốn xóa hình ảnh docker không sử dụng của họ :docker system prune
Pablo A

@Pablo Một họ có thể nhìn vào /var/crash/*.crashquá
cmak.fr

Vì bạn cần sudogọi hàm, sudotrong hàm có vẻ dư thừa. Cũng vacuum-time=1scó thể không phải lúc nào cũng hoạt động nhưng tôi không chắc chắn vì tôi sử dụng kích thước chân không thay thế: forum.manjaro.org/t/
Khăn

2

Trong Ubuntu, mỗi thư mục có thể có hệ thống tệp riêng. Điều đó có nghĩa là bạn có thể di chuyển bất kỳ thư mục nào vào phân vùng của chính nó, một đĩa khác hoặc thậm chí trên một mạng từ xa. Điều này đặc biệt phổ biến cho các thư mục nhà, vì điều đó có nghĩa là bạn có thể cài đặt lại Ubuntu mà không thay đổi cài đặt cá nhân hoặc mất bất kỳ tệp nào. Nó cũng phổ biến trong các mạng nơi người dùng có thể đăng nhập vào các máy khác nhau và vẫn nhận được các cài đặt và tệp cá nhân của họ. Nhưng nó hữu ích trong nhiều trường hợp khác nhau, chẳng hạn như của bạn.

Các ứng dụng không được cài đặt vào một thư mục cụ thể, như bạn dường như đề xuất. Các phần khác nhau của ứng dụng được đặt trong các phần khác nhau của hệ thống tệp. Chương trình chính thường được đặt trong / usr / bin, trong khi các tệp cấu hình được đặt trong / etc chẳng hạn. Trong trường hợp của bạn, MySQL, chính các cơ sở dữ liệu được đặt ở đâu đó trong / var. Tôi nghĩ / var / mysql.

Vì / usr và / var đều là các thư mục trong hệ thống tập tin gốc, nên chúng sẽ sử dụng không gian hệ thống tập tin gốc. Nhưng như tôi đã nói, bạn có thể di chuyển chúng đến các hệ thống tập tin khác nhau. Trong trường hợp của MySQL, bạn có thể định cấu hình nơi lưu trữ cơ sở dữ liệu. Bạn có thể dễ dàng di chuyển cơ sở dữ liệu đến /home/username/.mysql/database chẳng hạn.


1

Bạn không thể thay đổi đường dẫn nơi trình quản lý gói cài đặt ứng dụng. Hầu hết các tập tin ứng dụng được lưu vào /usr. Nếu bạn muốn khôi phục không gian trên phân vùng gốc, di chuyển /usrđến một phân vùng khác là một giải pháp khả thi.

Từ ý kiến:

  • Giữ nguyên các quyền khi sao chép, tức là sử dụng tốt hơn dòng lệnh nếu bạn không chắc chắn trình quản lý tệp của mình sẽ làm gì.

  • Cách đúng đắn để làm điều này là gắn kết một hệ thống tập tin mới vào / usr hoặc sử dụng mount --bind. Không rõ một symlink sẽ hoạt động tốt như thế nào.


cẩn thận về di chuyển / usr. sử dụng lệnh cp để sao chép thư mục usr với sự cho phép tương tự. sau đó xóa thư mục gốc / usr và tạo một liên kết của thư mục usr trên /.
shantanu

1
Nó nên có một điểm gắn kết. Không phải là một liên kết.
Jo-Erlend Schinstad

Lưu ý nhỏ: rất nhiều ứng dụng cũng cài đặt nhị phân và dữ liệu ứng dụng vào /opt.
Nathan Osman

@ george-edison Vâng, một số ứng dụng cài đặt công cụ /optchống lại "các quy tắc".
tháng 1

1

Nếu bạn có nhiều hệ thống tập tin riêng biệt, thủ thuật sau đây có thể tỏ ra hữu ích: Gắn kết / lần khác, nhưng lần này là dưới / mnt. Bây giờ tất cả các tìm kiếm của bạn cho các tệp lớn hoặc nhiều có thể được thực hiện mà không đi qua các hệ thống tệp sai.

Nó cũng có thể giúp bạn tìm các tập tin được ẩn dưới một mount khác.



0

Nếu bạn đã cài đặt máy chủ cơ sở dữ liệu mssql, điều đó có thể ăn hết bộ nhớ của bạn. Chạy sử dụng đĩa NCurses

$ sudo ncdu / 

Để kiểm tra những thư mục và tập tin nào đang lưu trữ tối đa. Dữ liệu mssql thường được lưu trữ trên

/var/opt/mssql/backup/

Câu hỏi nói rằng Cơ sở dữ liệu cần phải duy trì.
Stephen Rauch

Câu hỏi đã đề cập đến Cơ sở dữ liệu MySql vì vậy nếu anh ta xóa dữ liệu cơ sở dữ liệu MsQuery thì tôi đoán đó có vẻ là một câu trả lời khá công bằng.
Yogesh

Có thể có ích các -xtùy chọn
Pablo Một
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.