Soru dosya kaldırıldıktan sonra doğru boş alan gösterilmiyor linux df


Dosyaları depolamak için kullanılan dosya sunucularım var. Dosyalar bir hafta ya da bir yıl boyunca orada bulunabilir. Maalesef, dosyaları sunucudan kaldırdığımda, df Komut boş alanı yansıtmaz. Sonuç olarak, sunucu dolduruyor (df % 99 gösterir, ve betiğimde daha fazla dosya göndermiyor, sadece orada birkaç düzine GB boş alan olabilir.

Bende var noatime monte edilmiş bölmelerdeki bayraklarda fark varsa.


107
2018-02-08 07:36


Menşei


Bu, tek bir bölümde mi yoksa tüm bölümlerde mi oluyor? - Khaled
Şey, umurumda olan tek veri olan ana veri bölümümde oluyor, çünkü sadece dosyaları üzerine yazıp / kaldırdığımdan.
Lütfen bana çözümle ya da bir linkle aydınlatın.
Hangi dosya sistemi (ler)? DF, süper blokun bir statüsünü yapar, dosya sisteminizin sb inode'u güncellememesi olabilir. Yıkama önbelleğini denediniz mi? - beans
Ext4 kullanımı. Önbellekleri nasıl yıkıyorsunuz?


Cevaplar:


Dosya adını silmek aslında dosyayı silmez. Diğer bazı süreçler dosyayı açık tutuyor ve silinmemesine neden oluyor; dosyayı serbest bırakmak için bu işlemi yeniden başlatın veya öldürün.

kullanım

lsof +L1

hangi işlemin silinen (bağlantısız) bir dosya kullandığını öğrenmek için.


183
2018-02-08 07:48



Kaldırılan dosyalar bir ay içinde erişilmedi ve onlara erişen tek işlem nginx, bu yüzden şüpheli.
+1. Ayrıca, "lsof + L1", hangi programın dosyaları açık tuttuğunu size söyleyecektir. - pehrs
root dosyası olarak "lsof -n | grep dosyası" olarak, dosyaların hangi sebeple olursa olsun açık kalması nedeniyle dosyaların ne kadar uzun süre çalışabileceğine şaşıracaksınız. Başaramazsa, yeniden başlat, kötü düşündürüyorum ama kesinlikle hiçbir şeyin dosyanın üzerinde durduğundan emin olacak. Pehrs başına, lsof + L1 muhtemelen gitmek için daha iyi bir yoldur. - ScottZ
Az önce beni kurtardın! Bir 93G log dosyası silindi ve alanı geri almadı ve neden işe yaramadı. Teşekkürler. - Luke Cousins
Aynı satırlar boyunca ve bu diğerleri yardımcı olur, ben büyük bir nginx access.log dosyasını sildim ama sadece nginx: service nginx restart yeniden başlattıktan sonra alanı geri kazanmak mümkün oldu - Nick


Ignacio'nun da belirttiği gibi, dosyayı silerek, dosyaya açık tutamaçları olan işlemleri silene kadar alan boş bırakılamaz.

Yine de, süreçleri öldürmeden alanı geri alabilirsiniz. Tek yapmanız gereken dosya tanıtıcılarını kaldırmak.

İlk yürütmek lsof | dosyayı tutan işlemi tanımlamak için grep silindi

[hudson@opsynxvm0055 log]$ /usr/sbin/lsof |grep deleted
java       8859   hudson    1w      REG              253,0 3662503356    7578206 /crucible/data/current/var/log/fisheye.out (deleted)

Sonra yürüt:

cd /proc/PID/fd

sonra

[hudson@opsynxvm0055 fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb  7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)

"1" dosya tanıtıcısı olacaktır. Şimdi o alanı geri almak için "> FD" yaz

> 1

Dosyayı tutan başka işlemler varsa işlemi tekrarlamanız gerekebilir.


21
2018-02-07 01:24



ne yapar > FD yap? - Pred
dosya tanıtıcısını kaldırır - Adrián Deccico
bunu yapar > komutun bir ismi var mı? Kullanabilmek için zsh'den bash'a geçmek zorunda kaldım. Zsh üzerinde çalıştırmak mümkün mü? - ariera
Bu bir çıkış yönlendirmesidir ve bu nedenle dosyayı keser. Uzun, "echo -n> 1" veya "true> 1" olur. FD'yi gerçekten kaldırmaz, daha sonra boş bir dosyaya işaret eder. - eckes


Bir olasılık, sildiğiniz dosya (lar) dosya sisteminde daha fazla referansa sahip olmasıdır. Sabit bağlantılar oluşturduysanız, birkaç dosya adı aynı verilere işaret eder ve veriler (gerçek içerikler), tüm referanslar kaldırılıncaya kadar boş / kullanılabilir olarak işaretlenmez. Dosyaları silmeden önce onları (Bağlantı Adları Girin) ya da onlarda ls -l komutunu yazınız (ikinci sütun olmalıdır).

Dosyaların başka bir yerde referans verildiği ortaya çıkarsa, sanırım in-l'leri bulmak için dosya (lar) ı bulunmalı ve sonra bulmak için -inum <inode-number> ile bir bulma yapmalısınız. Bu dosyaya diğer referanslar (muhtemelen aynı dosya sistemi içinde kalmak için de -mount kullanmak istersiniz).


8
2018-02-08 10:01





Dosya, onu açan işlem tarafından hala kilitlenmiştir. Boş alan açmak için şu adımları uygulayın:

  1. Koşmak sudo lsof | grep deleted ve hangi sürecin dosyayı tuttuğunu görün. Örnek sonuç:

    $ sudo lsof | grep deleted
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
    cron     1623 root    5u   REG   0,21        0 395919638 /tmp/tmpfPagTZ4 (deleted)
    
  2. Kullanarak işlemi öldür sudo kill -9 {PID}. Yukarıdaki örnekte PID 1623'tür.

    $ sudo kill -9 1623
    
  3. Koşmak df boşluğun boşaltıldığını kontrol etmek için Eğer hala doluysa, belki birkaç saniye beklemeli ve tekrar kontrol etmelisiniz.


3
2018-02-16 05:31





Bölüm, yalnızca disk kullanımı için belirli bir disk alanı bölümünü ayırmak üzere yapılandırılmışsa, df bu alanı mevcut olduğu gibi içermeyecektir.

[root@server]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

Alan / dizinler silinerek alanın geri alınmasından sonra bile, root olmayan kullanıcı belirli bir bölüme yazamaz.

Bir cihazda root ve root olmayan kullanıcı olarak bir dosya oluşturmaya çalışarak durumunuzun bu olup olmadığını kolayca kontrol edebilirsiniz.

Ek olarak, dosya sistemi yapılandırmasını çalıştırarak kontrol edebilirsiniz.

tune2fs -l <device> | egrep "Block count|Reserved block count

ve gerçek% 'i kendi hesabınızda hesaplar.

Yalnızca kök kullanım için ayrılmış disk değerini değiştirmek için, yürütme

tune2fs -m <percentage> <device>

2
2018-05-08 10:31





Diğer cevaplar doğrudur: Bir dosyayı silerseniz ve alan serbest kalmazsa, genellikle ya dosyanın açık tutulduğu ya da başka sabit bağlantılar olduğu için.

Sorun gidermede yardımcı olmak için, sürücü alanının nerede harcanacağını söyleyen bir araç kullanın: du Mekanın nereye gittiğine dair genel bir bakış. Daha da iyisi, gibi bir grafik aracı kullanın xdiskusage (bu gibi birçok var) suçluyu avlamak için. xdiskusage ve arkadaşlar, uzayın nereye gittiğini bulmak için en büyük boşlukları bulmanızı sağlar.

Bu sayede, ikinci bir hardlink nedeniyle hala yer işgal eden dosyaları hızlıca bulursunuz. Ayrıca, silinen, ancak açık dosyaların kapladığı alanı da gösterecektir (dosya adı okunamadığı için, (izin reddedildi).


1
2018-02-08 10:11





Bildiğim kadarıyla bir tonunuz bunu redhat için yapıyorsunuz /var ve FS'yi küçültmek için bekleyen dosyalara gzipping, ancak bunun yerine büyür, sadece syslog hizmetini yeniden başlattığınızdan emin olun. ve

lsof -v file

her nasılsa sana bunu gösterirdi.


1
2018-03-23 15:02



Bu gerçekten fazla bir şey eklemiyor; kabul edilen cevap, 2001'de bunun arkasındaki mantığı kapsamıştır. 50 temsilcisi olduğunda, mevcut cevaplara niteleyiciler eklemek isterseniz yorumları kullanın. - Andrew B


Bir seçenek daha: Disk, sürekli olarak veri oluşturan bir işlemden dolayı dolu olabilir: günlükler, çekirdekler ve benzerleri. Boşluğun gerçekten serbest bırakılması mümkündür, ancak hemen doldurulur. Aslında böyle bir vaka gördüm. df Bu durumda sadece delik resmi vermez. kullanım du daha fazla öğrenmek için.


0
2017-07-17 12:01





EXT2 kullanıyorum, FSCK bu durumda bana yardımcı oldu. Şimdi yeniden başlatmayı dene -F, bazı yeniden başlatmalardan ve fscklerden sonra, yarı kullanılan alanı görüyorum.


0
2018-01-16 09:00



Sevgili Marcellus, çözümünüz kabul edilen cevapla kaplıdır; ve zorlanmıyorsanız bazen yeniden başlatmayı istemezsiniz ... - Deer Hunter


Silinen dosyaların hafızayı tuttuğunu kontrol etmek için komuta giriniz.

 $ sudo lsof | grep deleted

Hafızayı tutan silinmiş dosyaları gösterecektir.

Daha sonra işlemi pid veya isim ile öldür

$ sudo kill <pid>
$ df -h

Şimdi kontrol et aynı hafızaya sahip olacaksınız

Hangi dosyanın bellekte kaldığını görmek için aşağıdaki komutu yazmazsanız

# cd /
# du --threshold=(SIZE)

herhangi bir boyuttan bahsetmişsiniz, hangi dosyaların eşik boyutunun üzerinde olduğunu gösterecek ve hafızaya kaydedilmiş olan dosyayı bulacaktır.


-1
2018-03-06 07:16