Drive root kehabisan ruang disk. Bagaimana saya bisa membebaskan ruang?

35

Saya menggunakan Ubuntu 11.04 dan saya ingin membebaskan beberapa ruang di direktori root saya, yang kelebihan beban. Saya terutama ingin mengubah jalur yang digunakan untuk menginstal aplikasi (mereka terinstal langsung ke drive root).

Pertimbangan lain adalah bahwa saya sedang mengerjakan server database MySQL. Server diinstal di direktori root itu sendiri, jadi saya tidak ingin mengambil risiko kehilangan data apa pun.

Tolong beri saya beberapa tips untuk membantu menyelesaikan masalah ini.

rihan
sumber

Jawaban:

36

Baru-baru ini saya menghadapi situasi yang sama. Terlalu banyak aplikasi yang diinstal dan mereka mulai menggunakan ruang mount root saya. Saya mendaftar beberapa langkah yang saya ikuti dan berharap Anda juga bisa menggunakan yang sama.

  1. Bersihkan cache apt-get. Perintah berikut akan menghapus semua file deb yang diunduh dari direktori cache apt-get.

    Jalankan perintah ini: sudo apt-get clean

  2. Pindahkan / home mount point ke drive yang berbeda . Sebelumnya, folder rumah saya terletak di root drive. Jadi saya pindah folder rumah saya ke drive yang terpisah. Ini membantu saya melepaskan banyak tekanan dari mount root karena sebagian besar aplikasi menyimpan data mereka di / home / user_name / folder. Baca cara memindahkan folder rumah ke drive yang terpisah.

  3. Menambah ukuran partisi root Saya tahu jawabannya sangat jelas. Tapi percayalah, data kami perlu diubah seiring waktu. Saya pikir 20 GB / root mount sudah mencukupi tetapi dalam satu tahun saya telah me-ukuran kembali root mount saya dan meningkat menjadi 50 GB.

Amey Jah
sumber
8
sudo apt-get clean membebaskan lebih banyak ruang dari yang diharapkan, +1
btk
Waspadalah yang apt-get cleanmenghapus paket yang terinstal sekalipun. Anda mungkin ingin menyimpannya jika upgrade gagal.
timss
Saya membersihkan cache saya dan membersihkan 10 Gb! +1
Numeri berkata Reinstate Monica
28

Saya berhasil membersihkan 3,5 GB dengan menghapus tajuk dan gambar lama, menggunakan perintah berikut:

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

Anda dapat memeriksa paket apa yang akan dibersihkan dengan mengeksekusi bagian pertama dari perintah:

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

Referensi

rumah
sumber
Kiat lain tidak membantu, tetapi ini menyelamatkan saya sekitar 5G. Terima kasih.
baltasvejas
Opsi -ydalam perintah apt-get sebenarnya tidak diperlukan. Jika Anda menghilangkannya, apt-get akan bertanya kepada Anda (hanya sekali), apakah semua paket yang disalurkan harus dihapus. Saya lebih baik tidak menggunakan -y, itu memberi Anda satu kemungkinan lagi untuk memeriksa (selain perintah kedua yang disebutkan di atas). Bagi saya ini membebaskan 15GB di partisi root!
Boris Däppen
2
Perintah 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 mencoba untuk menghapus versi kernel yang saat ini diinstal di sistem saya. Berhati-hatilah agar sistem Anda tidak bisa di-boot.
Antony
@Antony yaikes! saya akan mencoba ini. bagaimana saya bisa memverifikasi mana yang ok untuk dihapus?
Sonic Soul
2
@SonicSoul Saya akhirnya melakukan apa yang disarankan oleh salah satu jawaban di bawah ini ( askubuntu.com/a/778442/333806 ). Pada dasarnya, jalankan uname -runtuk menemukan kernel saat ini dan berhati-hati untuk tidak menghapusnya. Jika perintah yang diberikan oleh homebranduntuk memeriksa paket mana yang akan dibersihkan tidak menunjukkan kernel saat ini, maka Anda harus aman menjalankan perintah pembersihan yang disebutkan olehnya.
Antony
22

Gunakan dpkg-queryuntuk menemukan paket terbesar dan menghapus yang tidak lagi Anda perlukan ( sumber ):

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}'
michaeljoseph
sumber
1
Sekarang ini adalah one-liner yang sangat berguna. Sempurna untuk ringkasan singkat dari paket instalasi terbesar. Datanglah ke dotfiles saya!
arainone
Anda bisa mendapatkan ini denganwajig 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.
shantanu
sumber
19
Anda tidak memberikan penjelasan. Jika seseorang hanya menyalin / menempelkan kode Anda, maka sistem akan dimatikan tanpa peringatan, mungkin menyebabkan hilangnya data. Tolong jangan memberikan perintah tanpa penjelasan apa pun yang mereka lakukan. -1
Jo-Erlend Schinstad
9
Mengapa perlu memeriksa sistem file?
Nathan Osman
10

Menghapus versi kernel lama (seperti yang disarankan oleh homebrand ) dapat membebaskan ruang yang cukup jika Anda belum sempat melakukannya.

Ada sejumlah cara untuk menghapus versi kernel lama dan sejumlah opsi berbeda dapat ditemukan dalam jawaban yang diposting di: Bagaimana cara menghapus versi kernel lama untuk membersihkan menu boot?

Metode pilihan saya kebanyakan adalah jawaban ini dari penreturns di mana ia dipecah menjadi langkah-langkah yang cukup dimengerti:

Buka terminal dan periksa kernel Anda saat ini:

uname -r

JANGAN HAPUS KERNEL INI!

Selanjutnya, ketik perintah di bawah ini untuk melihat / mendaftar semua kernel yang diinstal pada sistem Anda.

dpkg --list | grep linux-image

Temukan semua kernel yang lebih rendah dari kernel Anda saat ini. Ketika Anda tahu kernel mana yang harus dihapus, lanjutkan di bawah ini untuk menghapusnya.

Jalankan perintah di bawah ini untuk menghapus kernel yang Anda pilih.

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

Jawabannya kemudian mengatakan 'update-grub2' ketika Anda selesai membersihkan, yang mungkin sudah ketinggalan zaman sekarang: sudo update-grubcukup untuk Ubuntu 14,04 dan seterusnya. Mereka juga kemudian berkata untuk 'Reboot sistem Anda' (yang tampaknya agar Anda dapat melihat menu boot yang dibersihkan) sehingga dalam hal ini tidak perlu.

Menu bootloader grub digunakan untuk menampilkan semua versi kernel yang lebih lama pada halaman utama, tetapi mereka sekarang ditempatkan jauh di belakang sub-menu. Ini jauh lebih rapi tetapi pendatang baru di Ubuntu / Linux mungkin tidak menyadari bahwa mereka ada di sana mengambil ruang.

Seperti yang disarankan, jangan hapus kernel saat ini dan juga disarankan untuk tetap menggunakan versi kernel sebelumnya, kalau-kalau Anda perlu kembali ke yang sebelumnya.

Ada cara yang lebih cepat untuk melakukan ini, tetapi saya lebih suka kesederhanaan metode ini terutama karena saya dapat memahami setiap perintah di sepanjang jalan:

"Versi kernel apa yang saya gunakan? Versi kernel apa yang saya miliki? Oke, bersihkan yang itu ."

Bilas, ulangi, kagumi ruang yang telah Anda bebaskan.

Cukup mudah untuk menyalin nama kernel lama tertentu yang ingin Anda hapus dari hasil itu dpkg --list | grep linux-image Anda berikan di terminal, dan kemudian gunakan sudo apt-get purgedan tempel nama yang disalin.

Menghapus 3 atau 4 kernel yang lebih lama biasanya akan membebaskan sekitar satu GB ruang di root drive Anda.

PHeLiOn
sumber
1
Selain linux-image, Anda juga dapat
menangkap
8

Ketika saya perlu membuat lebih banyak ruang kosong di server saya menggunakan perintah ini:

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

Ia menemukan semua file lebih besar dari 50 MB dan " du -h" membuat daftar file yang lebih baik dan"sort -n "setelah pipa membuat daftar diurutkan berdasarkan ukuran file.

zorbon.cz
sumber
Tergantung pada seberapa besar sistem Anda, ini bisa memakan waktu. Butuh waktu 15 menit untuk sekitar 500 GB pada HDD
Gabriel Fair
7

Mengikuti instruksi pada dokumentasi komunitas Ubuntu saya menemukan file sampah besar - itu tampak seperti cadangan /var/log/syslog.1, mungkin ada sesuatu yang memuntahkan banyak output ke syslog ...

Perintah yang menemukannya adalah:

sudo find / -size +1G

Dan kemudian semua file besar dalam folder yang disebut .Trashmungkin baik untuk dihapus ...

hwjp
sumber
5

Berikut ini skrip yang saya jalankan untuk mengosongkan ruang pada partisi root

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
}
cmak.fr
sumber
Sunting: Pembersih kernel 2 baris baru
cmak.fr
Terima kasih! "Putar dan hapus log lama" hapus beberapa pertunjukan di drive saya.
SaTa
Bagus. Pengembang mungkin juga ingin menghapus gambar buruh pelabuhan mereka yang tidak terpakai :docker system prune
Pablo A
@Pablo A mereka mungkin melihat /var/crash/*.crashterlalu
cmak.fr
Karena Anda perlu sudomemanggil fungsi tersebut, sudodi dalam fungsi tersebut tampak mubazir. Juga vacuum-time=1smungkin tidak selalu berfungsi tetapi saya tidak yakin karena saya menggunakan ukuran vakum sebagai gantinya: forum.manjaro.org/t/…
WinEunuuchs2Unix
2

Di Ubuntu, setiap folder dapat memiliki sistem file sendiri. Itu berarti Anda dapat memindahkan folder apa pun ke partisi sendiri, disk lain atau bahkan pada jaringan jarak jauh. Ini sangat populer untuk direktori home, karena itu berarti Anda dapat menginstal ulang Ubuntu tanpa mengubah pengaturan pribadi Anda atau kehilangan file apa pun. Ini juga populer di jaringan di mana pengguna harus dapat masuk ke mesin yang berbeda dan masih mendapatkan pengaturan dan file pribadi mereka. Tetapi ini berguna dalam banyak kasus berbeda, seperti kasus Anda.

Aplikasi tidak diinstal ke folder tertentu, seperti yang Anda sarankan. Bagian aplikasi yang berbeda ditempatkan di bagian sistem file yang berbeda. Program utama biasanya ditempatkan di / usr / bin, sedangkan file konfigurasi ditempatkan di / etc, misalnya. Dalam kasus Anda, MySQL, database itu sendiri ditempatkan di suatu tempat di / var. Saya pikir / var / mysql.

Karena / usr dan / var keduanya adalah direktori di sistem file root, mereka akan menggunakan ruang sistem file root. Tetapi seperti yang saya katakan, Anda dapat memindahkannya ke sistem file yang berbeda. Dalam kasus MySQL, Anda dapat mengonfigurasi tempat penyimpanan basis data. Misalnya, Anda dapat dengan mudah memindahkan basis data ke /home/username/.mysql/databases.

Jo-Erlend Schinstad
sumber
1

Anda tidak dapat mengubah jalur tempat pengelola paket menginstal aplikasi. Sebagian besar file aplikasi disimpan /usr. Jika Anda ingin memulihkan ruang di partisi root, pindahkan/usr ke partisi lain adalah solusi yang memungkinkan.

Dari komentar:

  • Pertahankan izin saat menyalin, yaitu lebih baik menggunakan baris perintah jika Anda tidak yakin apa yang akan dilakukan manajer file Anda.

  • Cara yang benar untuk ini, adalah me-mount sistem file baru ke / usr atau gunakan mount --bind. Tidak jelas seberapa baik symlink akan bekerja.

Jan
sumber
hati-hati tentang pindah / usr. gunakan perintah cp untuk menyalin folder usr dengan izin yang sama. kemudian hapus folder asli / usr dan buat tautan folder usr di /.
shantanu
1
Seharusnya memiliki titik mount. Bukan tautan.
Jo-Erlend Schinstad
Catatan kecil: banyak aplikasi juga menginstal binari dan data aplikasi /opt.
Nathan Osman
@ george-edison Nah, beberapa aplikasi menginstal hal-hal yang /optbertentangan dengan "aturan".
Jan
1

Jika Anda memiliki banyak filesystem terpisah, trik berikut ini mungkin berguna: Pasang / kali lain, tetapi kali ini di bawah / mnt. Sekarang semua pencarian Anda untuk file besar atau banyak dapat dilakukan, tanpa melintasi sistem file yang salah.

Ini juga dapat membantu Anda menemukan file yang disembunyikan di bawah mount lain.

steviethecat
sumber
0

Jika Anda memiliki server database mssql diinstal, yang dapat memakan memori Anda. Jalankan Penggunaan Disk NCurses

$ sudo ncdu / 

Untuk memeriksa folder dan file apa yang mengambil penyimpanan maksimal. Data mssql biasanya disimpan

/var/opt/mssql/backup/
Yogesh
sumber
Pertanyaan tersebut menyatakan bahwa Basis Data perlu tetap.
Stephen Rauch
Pertanyaannya menyebutkan MySql Database jadi jika dia ingin menghapus data database MsSQL maka saya kira itu sepertinya jawaban yang cukup adil.
Yogesh
Mungkin berguna dalam -xpilihan
Pablo A