Linux sunucusu alan dışı


31

Bu soruyu arka arkaya iki röportajda sordum, ancak çeşitli sistem yöneticileri ile yapılan bir araştırma ve kontrol sonrasında iyi bir cevap alamadım. Biri bana yardım edebilir mi acaba?

Bir sunucuda boş disk alanı yok. Çok büyük bir günlük dosyası farkedersiniz ve kaldırmanın güvenli olduğunu belirlersiniz. Dosyayı siliyorsunuz ancak disk hala dolu olduğunu gösteriyor. Buna ne sebep olur ve nasıl telafi edersiniz? Ve bu devasa günlük dosyasını hangi işlemin yazdığını nasıl buluyorsunuz?


3
Daha iyi sistem yöneticileri ile konuşmanız gerekir. Bu önemsiz şeyler.
Womble

2
Önemsiz, ancak durum ve soru yeterince sık ortaya çıkıyor ...
yine de

OP bunu kabul edebilecek mi?
ewwhite

5
Önemsiz veya değil, konuşamayan biri için * akıcı bir şekilde nix (örneğin öncelikle bir Windows admin) bu öğrenmek için iyi bir şey.
John Gardeniers

Yanıtlar:


56

Bu ortak bir görüşme sorusu ve çeşitli üretim ortamlarında ortaya çıkan bir durumdur.

Dosyanın dizin girişleri silindi, ancak kayıt işlemi hala çalışıyor. Alan, tüm dosya tanıtıcıları kapatılmadan (örneğin, işlem öldürülmüş) ve tüm dizin girişleri kaldırılıncaya kadar işletim sistemi tarafından geri alınmayacaktır. Dosyaya işlem yazmayı bulmak için, lsofkomutu kullanmanız gerekir .

Sorunun diğer kısmı bazen "Süreci öldürmeden yazılan bir dosyayı nasıl temizlersiniz?" Olabilir. İdeali, olur "sıfır" veya "kesiğinin" günlük dosyası gibi bir şey ile : > /var/log/logfileyerine dosyayı silmek.


1
... ya fuser.
Steven Pazartesi

1
Biraz genişletme: Diskteki bir dosyaya yapılan tüm referanslar kaybolana kadar, bu alan başka bir şey tarafından kullanılamaz. Bu dosya tanıtıcıları içerir. Bu aynı zamanda bu hilenin çalışmasını sağlar: serverfault.com/questions/45237/link-to-a-specific-inode
Jeff Ferland 5:12

1
Eğer varsa no-clobberset, deneyin:>| /var/log/logfile
Belmin Fernandez

2
Her röportajda bu sorunun bir türevini soruyorum: "Disk dolu mesajlar alıyorsunuz. dfAlanınız azalıyor , duneredeyse hiç kullanmıyorsunuz. Buna neden olan nedir ve iki araç neden aynı fikirde değil?"
voretaq7

> /var/log/fileDiskteki alan hala% 100’den sonra ise ne yapmalı ? Günlük dosyası boş görünüyor ... ancak yalnızca bu günlük dosyasına yazan programı yeniden başlattıktan sonra alan kurtarıldı. Programı yeniden başlatmadan disk alanını kurtarmanın bir yolu var mı?
alemani

14

Dosyaya hala başka bir bağlantı var (sabit bağlantı veya açık dosya tanıtıcısı). Bir dosyayı silmek yalnızca dizin girişini siler; dosya verisi ve inode, son referansı kaldırılıncaya kadar takılır.

Bir hizmetin geçici bir dosya oluşturması ve dosyayı açık tutarken derhal silmesi biraz yaygın bir uygulamadır. Bu, diskte bir dosya oluşturur, ancak işlem anormal biçimde sonlanırsa dosyanın silineceğini garanti eder ve ayrıca diğer işlemlerin yanlışlıkla dosya üzerinde durmasını önler. MySQL bunu örneğin diskteki geçici tabloların tümü için yapar. Kötü amaçlı yazılım, dosyalarını gizlemek için genellikle benzer taktikler kullanır.

Linux altında bu silinmiş dosyalara kolayca erişebilirsiniz /proc/<pid>/fd/<filenumber>.


8

Ben bir sysadmin değilim, ama Unix.SE'de topladıklarımdan bir Linux sistemi bir dosyayı silmeyecek (aslında alanı boş / tekrar kullanılabilir olarak işaretleyecektir), dosya işaretleyicileri kendilerine işaret eden tüm dosya tanımlayıcıları bulana kadar kapatıldı. Böylece ilk kısmı cevaplamak için, alan henüz boş değil çünkü bir süreç hala onu okuyor. İkincisi yanıtlamak için, dosyayı hangi işlemin kullandığını görebilirsiniz lsof.


2

Bariz açık link / açık dosya cevabının yanı sıra alternatif bir cevap: bu dosya /var/log/lastlogRHEL gibi aslında o kadar fazla yer kaplamayan çok seyrek bir dosyadır . Silme işleminin çok az bir etkisi oldu, bu yüzden bir sonraki en büyük dosyaya bakmanız gerekiyor.


1

Dosyayı yazma işlemi root ise, superuser ayrılmış dosya alanına yazacaktır. Dosya sistemi, bir kullanıcının görevi diski doldurması durumunda sistemi çalışır durumda tutmak için bu alana sahiptir. Bu alan (varsayılan olarak% 5 gibi) birçok araç tarafından görünmez.

lsof size hangi sürecin dosyayı kilitlediğini gösterebilir, ergo ona yazıyor.


1
Bu yedek yüzdesini tune2fs kullanarak da ayarlayabilirsiniz. Bu, disk alanını boşaltırken sunucunun çalışmaya devam etmesine izin vermenin hızlı bir yolu olabilir.
sjbotha

1

Dosyanın bir işlem tarafından açılmasının yanı sıra, 2. durumda btrfsveya benzeri anlık görüntüleri destekleyen bir dosya sisteminiz varkenZFS .

Örneğin, bu büyük günlük dosyasıyla birlikte anlık görüntü alıyorsunuz. Dosyayı şimdi silerseniz, yalnızca deltaları silersiniz. Delta yalnızca dosya kullanımda değilken silinir.

Ayrıca bakınız:

Üçüncü bir durum, blok düzeyinde çoğaltmanın kaldırılmasını destekleyen bir dosya sistemine sahipseniz ve dosyanın çoğu başka bir dosya ile aynı olduğunda. Günlükleri aynı FS'yi paylaşan bir syslog kabına veya VM'ye gönderen bir konteyner veya VM'niz yoksa, günlük içeriğinin aynı olması için bunun bir günlük olmasını beklemiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.