Bagaimana cara menghentikan kehilangan ruang kosong yang konstan ini?

15

Saya menjalankan Ubuntu, seperti biasa, ketika tiba-tiba saya mendapat kotak dialog yang mengatakan bahwa saya hanya memiliki ruang kosong 1,2 GB yang tersisa. Satu jam sebelumnya, saya memiliki ruang kosong 30 GB.

Saya menghapus beberapa barang dan membawa ruang kosong hingga 25 GB. Namun itu terus menurun. Saya mencoba menghapus file log lama dan memotong file log dan semacamnya, dan itu terus berkurang!

Saya mencoba menggunakan Disk Analyzer untuk menemukan dari mana semua kehilangan ruang bebas ini berasal dan itu tidak berhasil, karena ia menunjukkan semuanya sebagaimana mestinya. Saya reboot dan akhirnya Ubuntu melakukan pemeriksaan disk yang entah bagaimana membawa ruang kosong kembali ke 40 GB tetapi masih terus berkurang sekitar 10 GB sehari. Saya terus mencoba dan menemukan cara baru untuk mengosongkan ruang, tetapi ini seperti proses otomatis mengurangi ruang disk yang tidak dapat saya hentikan.

Saya tidak tahu harus berbuat apa. Bagaimana saya bisa menemukan penyebabnya, dan menghentikan ruang kosong saya agar tidak berkurang?

Ini adalah output dari sudo du -sh /var/* ~/.xsession-errors:

13M /var/backups
204M    /var/cache
112M    /var/crash
4.0K    /var/games
503M    /var/lib
4.0K    /var/local
0       /var/lock
9.5G    /var/log
85M     /var/mail
4.0K    /var/metrics
24K     /var/opt
0       /var/run
1.7M    /var/spool
391M    /var/tmp
11G     /var/tvmobili
20K     /var/www
224K    /home/school/.xsession-errors
askcompu
sumber
2
Bisakah Anda mengedit posting untuk menambahkan output sudo du -sh /var/* ~/.xsession-errorstolong? (dua tempat yang saya harapkan akan meledak jika ada sesuatu yang konyol). Kalau tidak, saya dengan Eliah - ini menunjukkan masalah disk. Ambil ini dengan serius.
Oli

Jawaban:

26

Anda mendapat beberapa log yang tidak terkontrol. Alih-alih menghapus seperti orang gila setiap hari, temukan file atau file yang tumbuh cepat, dan lihat ke dalam untuk menyelidiki apa yang menyebabkan ini. Mungkin beberapa program berputar dalam satu lingkaran, mencatat beberapa syarat. Baik menonaktifkan program itu, menonaktifkan logging-nya atau mencoba untuk memperbaiki kondisi yang dikeluhkannya.

Jika sebuah file tumbuh di depan mata Anda, dan Anda tidak tahu program mana yang menulisnya, Anda mungkin dapat menemukannya dengan mudah. Berikut ini sebuah contoh. Siapa yang /var/log/syslogmembuka? Kami menggunakan fuserperintah:

# fuser /var/log/syslog
/var/log/syslog:      602

Hanya satu proses yang /var/log/syslogterbuka. Ini adalah proses 602. Apa itu? Mari kita tidak repot-repot dengan psdan grep, tetapi lihat /procfilesystem secara langsung:

# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd

Aha, benar rsyslogd. Kami tidak terkejut karena rsyslogdtelah /var/log/syslog/terbuka.

Metode ini tidak dijamin berfungsi. Alasannya adalah bahwa program tidak harus membuat file tetap terbuka untuk menulis kepada mereka. Misalkan Anda memiliki proses yang membuka file, menambahkannya, dan kemudian menutupnya. Anda akan memiliki penyelidikan yang agak lebih sulit. Anda bisa menjalankan fuserberkali-kali sampai kebetulan Anda menangkap proses "tangan merah". Proses itu sendiri bisa masuk dan keluar dari keberadaan dengan cepat. Masalah lain adalah beberapa proses dapat membuat file terbuka, tetapi hanya satu yang membuatnya lebih besar. Dalam hal ini, Anda dapat melacak panggilan sistem mereka.

# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file:   1234 23459

Ups! Dua proses membuatnya terbuka: 1234 dan 23459. Mari kita lihat apa yang mereka lakukan:

# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}

Itu tidak melakukan apa-apa, hanya memblokir selectpanggilan. Ctrl-C untuk menghentikan jejak:

select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>

Periksa yang berikutnya:

# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C

Ups, yang itu terus-menerus menulis. Itu pasti yang buruk. Kita bahkan dapat memeriksa bahwa deskriptor file 5 yang menjadi proses penulisan sebenarnya adalah file besar:

# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr  3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file

Saya tidak curiga Anda memiliki sistem file yang rusak, tetapi untuk memaksakan pemeriksaan penuh, Anda tidak harus boot DVD.

Pertama, tinjau pengaturan jumlah maksimum pemasangan sistem file Anda. Identifikasi partisi Anda menggunakan perintah df. Contoh pada sistem Ubuntu yang saya miliki di sini:

# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       18062108 5499320  11645284  33% /
udev              392152       4    392148   1% /dev
tmpfs             159768     768    159000   1% /run
none                5120       0      5120   0% /run/lock
none              399416     200    399216   1% /run/shm
/dev/sr0           43668   43668         0 100% /media/VBOXADDITIONS_4.1.4_74291

Anda dapat melihat bahwa sistem /file sudah terpasang /dev/sda1. Begitu /dev/sda1juga perangkat penyimpanan partisi root (dan satu-satunya partisi dalam sistem khusus ini).

Mari kita lihat beberapa atribut dari sistem file itu. Ini aman untuk dilakukan meskipun sudah terpasang. Perintah memuntahkan banyak output. Berikut ini kutipannya:

$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
[ ... SNIP ... ]
Last mount time:          Fri Mar 29 17:45:18 2013
Last write time:          Tue Mar  5 09:08:03 2013
Mount count:              22
Maximum mount count:      22
[ ... SNIP ... ]

Hei lihat, jumlah pemasangan sama dengan jumlah pemasangan maksimum. Lain kali saya reboot, akan ada pemeriksaan sistem file. Yang penting adalah bahwa hitungan mount adalah nilai positif. Jika milik Anda nol, ubah ke beberapa nilai positif seperti 22 gunakan tune2fs -c 22 /dev/whatever. Nol berarti bahwa pemeriksaan tidak pernah dipaksakan terlepas dari berapa kali partisi tersebut dipasang. Sistem yang jarang dinyalakan ulang harus memiliki nilai rendah di sini. Sebuah server yang turun setahun sekali mungkin bisa menggunakan fsck setiap kali reboot. Anda dapat mengatur interval pemeriksaan berbasis tanggal juga.

Sekarang untuk memaksa cek, Anda dapat mengganti jumlah aktual menjadi lebih besar atau sama dengan maksimum, dan kemudian reboot. Itu dilakukan dengan modal C: tune2fs -C 1234 /dev/whatever. Sekarang partisi sepertinya telah dipasang 1234 kali tanpa cek, yang lebih besar dari maksimum satu atau dua digit.

Kaz
sumber
sangat informatif tetapi masalahnya terpecahkan, itu adalah firewall yang menulis file log besar
askcompu
2
Lihat, seperti yang saya duga. Tidak ada kerusakan disk misterius yang mencambuk ruang atas dan ke bawah. Maksud saya itu bisa menjelaskan insiden yang terisolasi, tetapi setelah diperbaiki, itu harus diperbaiki. Dan drive gagal, Anda akan mengharapkan beberapa kesalahan dalam log kernel dan panik.
Kaz
ya saya pikir itu bukan drive, tes SMART mengatakan itu drive lama tapi masih bisa dioperasikan dan berfungsi
askcompu
Cara yang lebih mudah untuk fsck semua sistem file Anda adalah dengan menjalankan 'sudo touch / forcefsck; sudo / sbin / shutdown -r sekarang '.
Blair Zajac
3

Pemeriksaan disk membebaskan beberapa ruang, menunjukkan bahwa masalah ini (atau bagian dari itu) mungkin karena korupsi sistem file. Jika itu masalahnya, maka Anda harus dapat mengosongkan lebih banyak ruang dengan memindai dan memperbaiki sistem file. Namun, jika korupsi terus-menerus terjadi (yang mungkin atau mungkin tidak terjadi), itu biasanya berarti hard drive sedang sekarat. Jika cadangan Anda (dari dokumen Anda dan file penting lainnya yang sulit untuk diganti) tidak sepenuhnya mutakhir, buat cadangan semua yang penting sekarang!

Untuk memeriksa dan memperbaiki disk, disk tidak dapat dipasang (setidaknya tidak baca-tulis). Jadi, Anda harus menjalankan utilitas perbaikan dari lingkungan hidup (live CD / DVD atau USB). Pertama, Anda harus mengetahui nama perangkat dari partisi yang berisi file Anda.

Oleh karena itu, dalam sistem yang diinstal , jalankan:

mount | grep ' on / '

(Pastikan untuk memasukkan ruang antara /dan '.)

Anda akan mendapatkan sesuatu seperti:

/dev/sda8 on / type ext4 (rw,errors=remount-ro)

Teks sebelum on- dalam contoh dari mesin saya, /dev/sda8- adalah nama perangkat lengkap untuk partisi root Anda ( /). Tuliskan ini - Anda akan membutuhkannya.

Kemudian boot komputer Anda dari CD / DVD desktop Ubuntu atau USB flash drive, seperti apa yang Anda gunakan untuk menginstal Ubuntu awalnya. (Jika ini adalah sistem Wubi, diinstal dengan installer Windows, beri tahu kami. Saya tidak mengharapkan itu, mengingat apa yang telah Anda laporkan, tetapi jika ini masalahnya, prosedurnya akan berbeda.)

Pilih Coba Ubuntu tanpa menginstal (bukan Instal Ubuntu ). Saat Anda mendapatkan desktop yang berfungsi, tekan Ctrl+ Alt+ Tuntuk membuka jendela Terminal. Kemudian jalankan perintah ini:

sudo e2fsck -fkccp /dev/sda8

Tetapi pastikan untuk mengganti /dev/sda8dengan nama perangkat lengkap yang tepat untuk /partisi Anda , seperti yang Anda peroleh melalui metode yang dijelaskan di atas.

Ini mungkin memakan waktu cukup lama. The cpilihan termasuk dalam perintah yang menyebabkan itu untuk memindai permukaan disk untuk kesalahan serta filesystem (dan untuk menandai daerah-daerah yang buruk sebagai buruk sehingga mereka tidak digunakan). Anda dapat meninggalkan ccjika Anda suka (jika Anda melakukannya, Anda juga dapat meninggalkan k), tapi saya sarankan tetap menggunakannya.

Anda mungkin diminta memperbaiki masalah tertentu, jika e2fsckberpikir ada kemungkinan signifikan bahwa mencoba memperbaikinya dapat menyebabkan kehilangan data. (Yang pmembuatnya sehingga akan memperbaiki masalah yang yakin dapat diperbaiki tanpa menyebabkan komplikasi.)

Saya sarankan agar Anda cenderung memperbolehkannya memperbaiki apa pun yang diinginkannya, karena Anda seharusnya hanya melakukan ini setelah memastikan cadangan Anda mutakhir . Jika Anda ingin mencoba perbaikan yang bahkan berpotensi berbahaya tanpa diminta, ganti pdengan y.

Setelah ini, boot kembali ke sistem Ubuntu Anda dan lihat apakah ruang kosong. Jika tidak, atau jika masalah berlanjut, beri komentar dan edit pertanyaan Anda untuk memberikan detail.

Eliah Kagan
sumber
bagaimana jika saya tidak punya cadangan?
askcompu
1
@ user2045360 Mencuri, menjarah, meminjam atau membeli. Atau dorong secara online (Ubuntu One, Dropbox, Google Docs, S3, dll).
Oli
@ user2045360 Tergantung berapa banyak dan jenis file penting yang Anda miliki. Jika mereka terdiri dari 20 dokumen kantor (atau bahkan 100, jika Anda sabar), Anda dapat mengirim email kepada diri sendiri. Anda juga dapat menggunakan layanan penyimpanan cloud, seperti Ubuntu One atau DropBox (hanya hati-hati - jika Anda mengatur sesuatu untuk disinkronkan, dan file dihapus atau diubah di komputer Anda, perubahan yang sama akan terjadi di cloud). Di sisi lain, jika Anda seorang pembuat film dan Anda memiliki rekaman 300 gigabytes, maka satu-satunya pilihan Anda mungkin membeli (atau, seperti disarankan Oli) meminjam beberapa media penyimpanan, seperti hard drive eksternal.
Eliah Kagan
saya tidak punya uang dan tidak ada orang untuk meminjam, seberapa besar kemungkinan hilangnya data dengan perintah ini?
askcompu
@ user2045360 Kemungkinan kehilangan data dari e2fsckperintah itu cukup rendah, terutama jika Anda tidak menekan yapa pun yang memperingatkan Anda bahwa Anda mungkin kehilangan data. Tetapi menjalankan perintah itu bukan alasan Anda perlu membuat cadangan data Anda. Anda perlu membuat cadangan data Anda karena sifat cepat dan berkesinambungan dari penurunan ruang kosong Anda sangat menunjukkan bahwa hard drive Anda mungkin akan benar - benar gagal secara fisik . Jika itu terjadi, Anda akan kehilangan data apa pun di dalamnya, dan hampir pasti tidak dapat memulihkannya. Cara lain untuk mencadangkan termasuk melalui jaringan ke komputer lain, atau ke CD / DVD.
Eliah Kagan
0

masalah ini telah dipecahkan, itu firewall menulis banyak log dan file encoding tvmobili

askcompu
sumber