ŞİMDİ fs'e silinmiş dosyalardan alan boşaltmasını söyle


73

Çekirdeğe şimdi boş disk alanını geri vermesini söylemenin bir yolu var mı? / Proc / içindeki bir şeye yazmak gibi mi? Ext4 ile Ubuntu 11.10 kullanılması.

Bu muhtemelen eski ve çok tekrarlanan bir tema. Sadece 0 boşluk bıraktıktan sonra, editörüm açmış olduğum kaynak kod dosyalarını kaydedemediğinde fark ettim, ki korku artık klasör listesinde 0 byte büyüklüğünde, silme çılgınlığına geçtim.

100'lerce MB büyük dosyayı hem kullanıcıdan hem de kökten sildim ve bazı bağlantılar da yaptım.

apt-get cleanYapmadan hemen önce 900 MB’dan fazla / var / cache / apt / archives vardı, şimdi sadece 108KB:

# du
108 /var/cache/apt/archives

Bir saat sonra hala boş alan yok ve değerli dosyalarımı düzenleyicide açarak kaydedemiyorum, ancak aşağıdaki eşitsizliklere dikkat edin:

# sync; df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4             13915072  13304004         0 100% /

Baska öneri? Bazı hizmetleri / işlemleri kapattım ancak kimin aktif olarak disk alan yiyebileceğini nasıl kontrol edeceğimden emin değilim.

Daha fazla bilgi

# dumpe2fs  /dev/sda4
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              884736
Block count:              3534300
Reserved block count:     176715
Free blocks:              422679
Free inodes:              520239
First block:              0
Block size:               4096
Fragment size:            4096

4
Dosya sistemi hemen boşluğu açar. Bununla birlikte, ext [234] 'ün kök ayrılmış blokları özelliği ve çekirdeğin açık dosyaları nasıl sakladığı, kaybolan alanın görünümünü verebilir.
hhaamu

Birkaç dosya sisteminiz (yamalar) varsa, birinde boş yer açmak diğerinde hiçbir işe yaramaz.
von

"Ayrılmış" 5Go blokları kendilerini geri talep etmeden önce neden bölümü doldurmayı başardım?
Psddp

Yanıtlar:


116

lsofAçık tutulan dosyalar olup olmadığını görmek için kontrol edin . Boşluklar kapanana kadar serbest bırakılmaz.

sudo /usr/sbin/lsof | grep deleted

Hangi silinen dosyaların hala açık tutulduğunu size söyleyecektir.


İyi. Bana mysqld/ tmp dizininde bazı kilitler gösterdi, ancak apport-gtgörünüşe göre birikmiş olan / var / lib / apt / listeleri / partial / içindeki soyu tükenmiş dosyaların birçok kullanımı. Öyleyse belki killall apport-gtönce araştırırım.
Marcos

1
En yakın cevap olarak işaretlemek, ancak bunları kullanarak dosya tanıtıcılarını / işlemlerini kapattıktan hemen sonra alanı gerçekten "geri vermedi". Diğer çekirdek / proc / fs tabanlı yaklaşımları aramak.
Marcos

18
Ayrıca kullanabilirsiniz lsof +L1(bağlantısız olan açık dosyaları seçin).
Martin Fido

Bu cevaptaki bilgiler doğrudur, ancak OP'nin sahip olduğu problem büyük olasılıkla bundan kaynaklanmamıştır, bunun yerine kök ayrılmış alan (diğer bir cevap adresleri).
marcelm

37

lsofSilinen, ancak açık, dosyayı hala alan tüketen bulmak için kullanın :

lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome     3446       user  128u      REG              253,2              16400       2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)  

/proc/<pid>/fd/Dosya kulesine karşılık gelen girişi bulun :

ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

Şimdi, sadece cat /dev/nullfd içine:

cat /dev/null > /proc/3446/fd/128

İnode'un hala açık olduğunu unutmayın, ancak şimdi 0 uzunluk

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

5
Kısaltmak için gereksiz kullanımı cat. Bourne kabuğundaki sadece > /proc/3446/fd/128yapacağım.
200_success

2
Programınızın, gelecekte sayfa önbelleğinde bulunabilecek veya bulunmayabilecek dosyanın bir bölümünü yeniden okuması bekleniyorsa, bunu YAPMAYIN.
Michael R. Hines,

13

dfiçin ayrılmış alanı göstermeyecek root(farklı çalıştırıldığında bile root):

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

"Ayrılmış blok yüzdesi" nasıl değiştirilir

  1. Ayrılmış alanı% 4'e kadar azaltın

    # tune2fs -m4 /dev/sda4

df -h şimdi 45M serbest gösterdi.

  1. Dosyalarımı hızlı bir şekilde kaydettim
  2. % 5'e geri koy

    # tune2fs -m5 /dev/sda4


2
Kök için ayrılmış alan günümüzde neredeyse her zaman çok büyük. Yüzde birkaç oranında azaltabilirsiniz. dfnormal kullanıcı için kullanılabilir alanı gösterir. Apt kök olarak çalıştığından, ayrılmış alan yalnızca kök olmayan kullanıcıların neden olduğu dolmalara karşı koruma sağlamak için kullanışlıdır (= normal kullanıcılar ve kendi kullanıcılarına sahip olan hizmetler).
jofel

Katılıyorum; Bir mkfsbugünlerde örneğin ayırmak gerekir. % 5 veya 300 MB, hangisi daha azsa . Sunucularımın bir kısmını% 2 olarak yeniden ayarladım ve GB'leri geri aldım!
Marcos

3
@jofel, hayır, değil. % 90 kullanım oranını geçtiğinizde, çok fazla parçalanma başlar. Daha fazla alan boşaltmanız gerekiyor,% 100 kullanım oranına yaklaşmamanız gerekiyor.
psusi

@psusi Doğru, yorumunuz için teşekkürler. Normal kullanıcı gerçekten pratik ve ext4 ile işler artık o kötü değildir olabilir Ama fırsat (geçici) hemen hemen hepsi kullanılabilir alanı kullanmak, bkz unix.stackexchange.com/a/7965/15241
jofel

7

Ubuntu'da, çöp kutunuzu kullanarak dosyaları sildiyseniz, dosyalarınızın tamamen kaldırılmaması muhtemeldir.

Çöplerinizi boşalttıktan sonra bile, dosyalar ~/.local/share/Trash/expungedyeniden başlatılana kadar ve belki daha da uzun süre kalır .

Bunun için iyi bir neden bulamadım, ancak alanım tükenirse, her zaman rmelden çıkarılmış çöp kutusu dosyalarını elimde tutarım.


1
İyi bir nokta. Her ne kadar ben komut satırına göre yaşayan ve ölen ve ben nadiren grafik dosya yöneticisi kullananlardan biri olmama rağmen. Açılmış klasörü gizlenme yeri olarak henüz fark etmedim - Boş Çöp Kutusu tıklatması her zaman son halini aldı ve gerektiğinde disk alanımı geri döndürdü.
Marcos

6
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done

Açıklama: Sadece silinen dosyaları çıkartmak için çıktıyı
grepleyin lsof. İşlem kimliğini ve dosya tanıtıcısını her satırdan Sed ile alın ve formatta bir dize oluşturun {pid}/fd/{fid}. Döngü ve her dosyaya hiçbir şey çıktı, onları boş olarak ayarlama.


3
Hata "Beklenmeyen belirteci` ('"yakınında sözdizimi hatası
Majid Golshadi

5

syncBurada herhangi bir yardım olup olmadığını merak ediyorum - ama olmamalıdır, çoğu ("birçok"?) Sistemdeki IIRC olduğundan, her 30 saniyede bir dosya sistemi senkronize edilir.

dmesgKötü bir şey olup olmadığını bulmak için çekirdek günlüğünü (yani ) kontrol eder ve lsofbüyük, silinen dosyaların hala açık olup olmadığını görmek için çalışırdım (aslında, silinen dosyaların lsofçıktıda bu şekilde işaretleneceğini düşünüyorum ).

Silinen dosyaların yer açmamasına neden olabilecek iki nedenden (bunlardan biri bağlantı kurduğunuz soruya işaret edilmiştir)

  • gerçekte silinmemiş dosyalar: başka bir yere bağlantısı olan bir dosyayı sildiniz (daha doğrusu, unlink()birden fazla bağlantıya sahip bir dosya edindiniz )
  • hala açık olan dosyalar: açık dosyalar bookkept'tır, iyi, dosyaları, dizin girişlerini değil de kendilerini inode ederler, girişi silerseniz, inode hala açık olduğu sürece orada kalır.

Fakat bunun neden bu kadar çok dosyada olabileceğinin belirli bir sebebini bilmiyorum ...


syncAsla yardım etmedim. Günlükleri gelince, bir Ubuntu sistemi bu yüzden oldukça buggy, bu yüzden evet, genellikle gürültülü. apportHer var apt-get güncellemesinin çökmesine karşın, / var / crash'in yalnızca 77MB olması nedeniyle sık sık konuşlandırılıyor. Ayrıca atd/ var / log / syslog'un tekrar eden çizgilerle su bastığını fark atd[8892]: File a0015c0152ab76 is in wrong format - abortingettik, muhtemelen / var / spool / cron / atspool içindeki birkaç dosya 0 boyutundayken, problemi döngüsel hale getirdi
Marcos

1

Ayrıca CentOS 6.3, aslında boşalmayan çöp bidonu çöp bidonu kasasını da yapıyor. Koştuğum yere kadar geri kazanmanın bir yolunu bulamadım rm -rf ~/.local/share/Trash/expunged/. Çok kafa çizilmeye neden oldu.

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.