Bagaimana cara menemukan file mana yang mengambil 80% dari ruang pada server web Linux?


15

Drive terus mengisi. Anda telah memburu semua file cadangan dan acak yang Anda bisa. menerima file coredump dan bahkan menghapus beberapa cadangan yang tidak diperlukan ...

Apa yang akan menjadi langkah Anda selanjutnya.

Server sebenarnya memiliki 10GB file situs web dan OS seharusnya tidak mengambil lebih dari 10GB jadi bagaimana Anda melacak apa yang mengisi drive 50GB (virtual)?


Jawaban:



23

Tentunya ada cara yang lebih rumit, tetapi yang saya ingat adalah

du --max-depth = 1 -h /

Sekarang ambil direktori yang menggunakan banyak ruang (du --max-depth=1 -h /yourdir)dan masuk lebih dalam sampai Anda menemukan pelakunya.
Jika ingin output Anda diurutkan berdasarkan ukuran dan tidak peduli dengan format yang dapat dibaca manusia, Anda juga bisa melakukannyadu --max-depth=1 /your_dir | sort -n


Ya. Saya melakukan hal yang hampir sama, "du -S | sort -n -r | less". Saya benar-benar akan senang melihat sebuah program yang terlihat seperti htop dan cron'd seperti mlocate tetapi ketika dijalankan memberi Anda informasi yang akurat dan kontemporer tentang file pada sistem Anda.
Gareth

1
Alih-alih memulai dari / pada server web coba mulai dari http_root. Jika tidak ada keberhasilan di sana, maka seseorang bisa pergi untuk '/'. Direktori yang menjalankan du pada '/' akan memakan banyak waktu.
Saurabh Barjatiya

4

Saya menggunakan baobab program Gnome. Anda dapat menjalankan ini di desktop dan t dapat terhubung melalui SSH ke server. Ini menunjukkan peta grafis penggunaan ruang disk yang mudah dibaca. Itu diinstal di bawah Gnome sebagai "Disk Usage Analyzer"



2

df -k menunjukkan fs mana masalahnya. Kemudian cd ke dir level atas untuk itu dan jalankan du -xk | sort -n | ekor -25 ini akan menampilkan 25 dir teratas, disortir, untuk matahari 9 atau lebih awal, ganti x dengan d.


Ya, mirip dengan apa yang baru saja saya sebutkan dalam jawaban @Marie Fischer. Mengapa menggunakan -k (ukuran blok) meskipun daripada -h untuk manusia?
Gareth

-k digunakan sehingga semua ukuran dilaporkan dalam kb. Ini berguna untuk pengurutan jenis lain yang akan menempatkan 10kb sebelum 20mb saat menyortir.
Saurabh Barjatiya

1

Perhatikan bahwa file dapat dihapus saat masih ditulis, jadi mereka menggunakan diskspace saat proses pembuatannya berjalan, tetapi tidak memiliki nama file.

Ini membuatnya tidak bisa dihindarkan dengan alat biasa - Anda dapat menggunakan lsof untuk menyelidiki proses mana yang memiliki file terbuka.


Saya gunakan /usr/sbin/lsof | grep deleteduntuk mendapatkan ini.
Kevin M

0

Jika Anda dapat menjalankan perangkat lunak pada sistem, maka xdiskusage akan menunjukkan kepada Anda direktori / file mana yang memakan ruang Anda. Sangat bermanfaat.

Saya percaya KDE mengandung sesuatu yang serupa.

Jika hanya teks dan Anda tidak dapat menginstal perangkat lunak tambahan, maka penggunaan kreatif dumungkin akan membawa Anda ke sana juga.


0
  1. cd ke direktori home server web (direktori home apache)
  2. jalankan perintah "du -a | head -30 | sort -nr"
  3. itu akan memberi Anda 30 file / direktori pengonsumsi disk terbesar
  4. Anda dapat menemukannya dan menghapusnya (jika tidak berguna)

Ini tidak akan berfungsi kecuali Anda mengubah urutan headdan sort. Anda juga harus menggunakan fitur pemformatan.
kasperd

0

Anda dapat menggunakan perintah berikut untuk menemukan file atau folder apa yang mengambil terlalu banyak ruang.

Misalnya untuk menampilkan 20 direktori terbesar di folder saat ini, gunakan one-liner berikut:

du -ah . | sort -rh | head -20

atau:

du -a . | sort -rn | head -20

Untuk 20 file terbesar di direktori saat ini (secara rekursif):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

atau dengan ukuran yang dapat dibaca manusia:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Perintah kedua untuk bekerja pada OSX / BSD dengan benar (seperti sorttidak ada -h), Anda harus menginstal sortdari coreutils. Kemudian tambahkan folder bin ke folder Anda PATH.

Anda dapat mendefinisikan perintah ini sebagai alias (mis. Tambahkan ke file rc Anda seperti .bash_profile):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

Kemudian jalankan bigatau big-filesdi dalam folder yang menurut Anda terjadi (misalnya di /home).


0

inilah sesuatu yang saya buat bersama untuk melacak beberapa proses jahat pada server database kami: rabbitfinder

#!/bin/sh
tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp

itu agak kludgey dan tidak terlalu kuat, tetapi bekerja dengan demikian:

  1. menghasilkan daftar pohon rekursif dari direktori saat ini
  2. tunggu 5 detik
  3. buat daftar lain
  4. bandingkan dua output
  5. fuser file yang telah berubah ukuran dan
  6. ps -lFp akan menampilkan file proses apa yang dimiliki mereka

    user@poseidon:~$ tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp
    ./tmp/output:       
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
    0 R 1000     14310 14275 23  80   0 -  1072 -        748   1 22:19 pts/2    00:00:06 dd if /dev/zero of ./output bs 1024 count 10000000
    
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.