Saya mengalami masalah pada salah satu server saya yang menjalankan 16.04: tidak ada ruang disk yang tersisa.
Saya tidak tahu apa yang mengambil ruang. Apakah ada perintah untuk mendaftar ukuran direktori saat ini, jadi saya bisa melintasi dan berakhir di direktori mengambil semua ruang?
disk-usage
Karl Morrison
sumber
sumber
export DISPLAY=:0.0; ssh -Y <user>@<server> filelight
(gantifilelight
dengan alat pilihan Anda). Tentu saja tanpa ruang yang tersisa, jika Anda belum menginstal alat ini, Anda tetap harus menggunakan sesuatu yang lain!Jawaban:
Seperti biasa di Linux, ada lebih dari satu cara untuk menyelesaikan pekerjaan. Namun, jika Anda perlu melakukannya dari CLI, ini adalah metode pilihan saya:
Saya mulai dengan menjalankan ini sebagai root atau dengan sudo:
Grep adalah membatasi garis yang kembali ke garis yang kembali dengan nilai dalam rentang Megabyte atau Gigabyte. Jika disk Anda cukup besar, Anda dapat menambahkan
|T
juga untuk memasukkan jumlah Terabyte. Anda mungkin mendapatkan beberapa kesalahan pada/proc
,,/sys
dan / atau/dev
karena itu bukan file nyata pada disk. Namun, itu harus tetap memberikan output yang valid untuk sisa direktori di root. Setelah Anda menemukan yang terbesar Anda kemudian dapat menjalankan perintah di dalam direktori itu untuk mempersempit jalan Anda pelakunya. Jadi misalnya, jika/var
itu yang terbesar, Anda bisa melakukannya seperti ini selanjutnya:Itu akan menuntun Anda ke masalah anak-anak!
Pertimbangan Tambahan
Sementara perintah di atas pasti akan melakukan trik, saya punya beberapa kritik membangun dalam komentar di bawah ini yang menunjukkan beberapa hal yang juga bisa Anda sertakan.
grep
saya berikan dapat mengakibatkan nilai "K" sesekali dikembalikan jika nama direktori atau file memiliki huruf kapital G atau M. Jika Anda benar-benar tidak ingin ada direktori bernilai K yang muncul, Anda ingin naik gim regex Anda menjadi lebih kreatif dan kompleks. misalnyagrep -E "^[0-9\.]*[MG]"
Jika Anda tahu drive mana yang menjadi masalah dan memiliki drive lain yang terpasang di atasnya yang tidak ingin Anda buang waktu termasuk dalam pencarian Anda, Anda bisa menambahkan
-x
bendera kedu
perintah Anda . Deskripsi halaman manual dari bendera itu:Anda dapat mengurutkan output dari
du
perintah sehingga nilai tertinggi ada di bagian bawah. Cukup tambahkan ini di akhir perintah:| sort -h
sumber
"^[0-9]*[.]*[0-9]*[MG]"
-x
opsi untukdu
tetap menggunakan drive itu (disediakan pada command-line). Anda juga dapat melakukan pipesort -h
untuk mengurutkan dengan benar nilai megabita / gigabita yang dapat dibaca manusia. Saya biasanya meninggalkan--max-depth
opsi dan hanya mencari seluruh drive dengan cara ini, menyortir dengan tepat untuk mendapatkan hal-hal terbesar di bagian bawah./
), dan menggunakan-x
memberi saya jaminan saya tidak akan salah menghitung hal. Jika Anda/
penuh dan Anda memiliki mount terpisah/home
atau apa pun, menggunakan-x
cukup banyak keharusan untuk menyingkirkan hal-hal yang tidak relevan. Jadi saya merasa lebih mudah menggunakannya setiap saat, untuk berjaga-jaga.Anda bisa menggunakannya
ncdu
untuk ini. Ini bekerja dengan sangat baik.sumber
curl http://path/to/ncdu | sh
, dan itu akan berjalan dalam cache stdin IO dalam memori, tapi itu akan membutuhkan keberuntungan. mungkin ada cara untuk membuat ram-disk jugasudo ncdu /
dari baris perintah.sudo
karena jika Anda tidak memasukkan sudo, ia tidak akan melaporkan ukuran untuk folder yang dimiliki oleh root, dan/
karena jika Anda tidak mengetikkan itu hanya akan melaporkan secara tersembunyi dari folder tempat Anda beradaSaya menggunakan perintah ini
sudo du -aBM -d 1 . | sort -nr | head -20
Kadang-kadang, saya perlu menjalankannya dari
/
direktori, karena saya telah menempatkan sesuatu di lokasi yang aneh.sumber
-d 1
saklar (dan biasanya denganless
bukanhead -20
), sehingga saya mendapatkan daftar lengkap semua file dan direktori yang diurutkan berdasarkan ruang yang mereka konsumsi. Dengan begitu, jika saya melihat direktori mengambil banyak ruang, saya hanya bisa menggulir ke bawah untuk melihat apakah sebagian besar ruang sebenarnya diambil oleh beberapa file atau subdirektori tertentu di dalamnya. Ini adalah cara yang baik untuk menemukan beberapa file dan direktori yang tidak dibutuhkan untuk dihapus untuk mengosongkan sebagian ruang: cukup gulir ke bawah sampai Anda melihat sesuatu yang Anda yakin tidak ingin simpan, hapus dan ulangi.sort
menunggu output selesai sebelum memulai output.Sudah ada banyak jawaban bagus tentang cara menemukan direktori yang mengambil sebagian besar ruang. Jika Anda memiliki alasan untuk percaya bahwa beberapa file besar adalah masalah utama, daripada banyak file kecil, Anda dapat menggunakan sesuatu seperti
find / -size +10M
.sumber
Saya tidak tahu Ubuntu dan tidak bisa memeriksa jawaban saya tetapi posting di sini jawaban saya berdasarkan pengalaman saya sebagai admin unix sejak lama.
Cari tahu sistem file mana yang kehabisan ruang
akan mencantumkan semua sistem file, ukurannya dan ruang kosongnya. Anda hanya membuang waktu jika Anda menyelidiki sistem file yang memiliki cukup ruang. Asumsikan bahwa sistem file lengkap adalah / sistem file saya. periksa output df jika ada filesystem yang terpasang pada subdir dari / myfilesystems. Jika demikian, tumpahan berikut harus disesuaikan dengan situasi ini.
Cari tahu berapa banyak ruang yang digunakan oleh file-file dari sistem file ini
Opsi -x dapat digunakan untuk menjamin bahwa hanya file yang menjadi anggota dari sistem file ini yang diperhitungkan. Beberapa varian Unix (misalnya Solaris) tidak tahu opsi -x untuk du. Maka Anda harus menggunakan beberapa solusi untuk menemukan du dari sistem file Anda.
Sekarang periksa apakah du dari file yang terlihat kira-kira ukuran ruang yang digunakan ditampilkan oleh df. Jika demikian, Anda dapat mulai mencari file / direktori besar dari sistem file / myfiles untuk dibersihkan.
untuk menemukan subdirektori terbesar dari direktori /.../dir gunakan
opsi -k memaksa du untuk menampilkan sie dalam kilobyte tanpa unit apa pun. Ini mungkin default pada beberapa sistem. Maka Anda dapat menghilangkan opsi ini. File / subdirektori terbesar akan ditampilkan di bagian bawah output.
Jika Anda telah menemukan file / direktori besar yang tidak Anda perlukan lagi, Anda dapat menghapusnya dengan cara yang sesuai. Jangan repot-repot dengan direktori kecil di bagian atas output. Itu tidak akan menyelesaikan masalah Anda jika Anda menghapusnya. Jika Anda masih belum memiliki cukup ruang daripada Anda dapat mengulangi langkah 4 di subdirektori larges yang ditampilkan di bagian bawah daftar.
Tetapi apa yang terjadi jika output du tidak kira-kira ruang yang tersedia ditampilkan oleh df?
Jika du output lebih besar maka Anda telah melewatkan subdirektori di mana sistem file lain dipasang. Jika output du jauh lebih kecil, maka beberapa file tidak ditampilkan di direktori mana pun yang diperiksa. Mungkin ada alasan berbeda untuk fenomena itu.
beberapa proses menggunakan file yang sudah dihapus. Oleh karena itu file ini dihapus dari direktori dan du tidak dapat melihatnya. Tetapi untuk sistem file blok mereka masih digunakan sampai proses tutup file. Anda dapat mencoba mencari tahu proses yang relevan (misalnya dengan lsof) dan memaksa mereka untuk menutup file ini (misalnya dengan menghentikan aplikasi atau dengan mematikan proses). Atau Anda cukup reboot mesin Anda.
ada file di direktori yang tidak terlihat lagi karena di salah satu direktori induknya, filesystem lain sudah di-mount. Jadi jika Anda memiliki file / myfilesysem / subdir / bigfile dan sekarang me-mount sistem file lain di / myfilesysystem / subdir maka Anda tidak dapat melihat file ini lagi dan
akan melaporkan nilai yang tidak mengandung ukuran / myfilesystem / subdir / bigfile. Satu-satunya cara untuk mengetahui apakah file tersebut ada adalah dengan meng-unmount / myfilesystem / subir dan memeriksanya
jika itu berisi file.
Mungkin ada jenis sistem file khusus yang menggunakan / menyimpan ruang pada disk yang tidak terlihat oleh perintah ls. Anda memerlukan alat khusus untuk menampilkan ini.
Selain cara sistematis ini menggunakan perintah du ada beberapa yang dapat Anda gunakan. Jadi Anda dapat menggunakan perintah find untuk menemukan file yang lebih besar daripada beberapa nilai yang Anda berikan, Anda dapat mencari file yang lebih besar dari nilai yang Anda berikan atau yang baru dibuat atau memiliki nama khusus (mis. * .Log, inti, * .trc). Tetapi Anda harus selalu melakukan df seperti yang dijelaskan dalam 1 sehingga Anda bekerja pada sistem file yang tepat
sumber
/tmp
sistem file yang terpisah (mis. Tmpfs) dan sesuatu membuat file/tmp
sebelum menjadi mount point ke sistem file yang berbeda. Sekarang file-file ini duduk di sistem file root, dibayangi oleh titik mount dan Anda tidak dapat mengaksesnya tanpa reboot ke mode pemulihan (yang tidak memproses/etc/fstab
) atau, seperti yang Anda sarankan, bind-mount.Jika Anda juga tertarik untuk tidak menggunakan perintah, inilah aplikasi: Filelight
Ini memungkinkan Anda dengan cepat memvisualisasikan apa yang menggunakan ruang disk di folder apa pun.
sumber
ssh -X <your host>
dan kemudian jalankan program Anda dari baris perintahCobalah
sudo apt-get autoremove
untuk menghapus file yang tidak digunakan jika Anda belum melakukannyasumber
Saya sering menggunakan yang ini
Lalu jika saya menemukan beberapa folder besar saya akan beralih ke sana dan melakukan penyelidikan lebih lanjut
Jika perlu, Anda juga dapat membuatnya dengan otomatis
sumber
Bukan benar-benar jawaban - tetapi tambahan.
Anda sulit keluar dari ruang dan tidak dapat menginstal ncdu dari jawaban @erman.
Beberapa saran
sudo apt clean all
untuk menghapus paket yang sudah Anda unduh. AMANsudo rm -f /var/log/*gz
bersihkan file log yang lebih lama dari satu atau dua minggu - tidak akan menghapus log yang lebih baru / saat ini. PALING AMANsudo lsof | grep deleted
daftar semua file yang terbuka, tetapi saring ke yang sudah dihapus dari disk. AMAN SAJAsudo rm /tmp/*
hapus beberapa file temp - jika ada yang menggunakannya, Anda dapat mengganggu proses. TIDAK BENAR-BENAR AMANSatu `s satu dapat mengembalikan baris seperti ini:
Tidak dapat berbuat banyak untuk baris init, tetapi baris kedua menyarankan salt-minion memiliki file terbuka yang telah dihapus, dan blok disk akan dikembalikan setelah semua pegangan file ditutup oleh layanan restart.
Tersangka umum lainnya di sini termasuk syslog / rsyslog / syslog-ng, squid, apache, atau proses apa pun yang dijalankan server Anda yang "berat".
sumber
Saya menemukan sangat berharga hasil dari alat seperti Filelight, tetapi, seperti dalam kasus Anda, pada server biasanya tidak ada GUI yang diinstal, tetapi
du
perintah selalu tersedia.Apa yang biasanya saya lakukan adalah:
du
output ke file (du / > du_output.txt
);DuFS
untuk "me-mount"du
output dalam direktori sementara;DuFS
menggunakan FUSE untuk membuat sistem file virtual (= tidak ada file yang benar-benar dibuat, semuanya palsu) sesuai dengandu
output;Penafian: Saya menulis
dufs
- tepatnya karena saya sering harus mencari tahu apa ruang disk babi pada mesin tanpa kepala.sumber
Mirip dengan @ TopHat, tetapi memfilter beberapa file jika mereka memiliki M, G, atau T dalam namanya. Saya tidak percaya itu akan kehilangan ukuran di kolom pertama, tetapi tidak akan cocok dengan nama file kecuali Anda memberi nama file secara kreatif.
Sakelar baris perintah dijelaskan di sini karena saya tidak tahu apa yang c atau lakukan.
sumber