Çok fazla boş dosya oluşturarak disk alanım bitebilir mi?


35

Boş metin dosyalarının sıfır bayt olduğu iyi bilinir:

görüntü tanımını buraya girin

Ancak, her biri araştırmam uyarınca, inode olarak depolanan ve boşluk kullanan meta veri içeriyor .

Bu göz önüne alındığında, sadece boş metin dosyaları oluşturarak bir diski doldurmak mümkün bana mantıklı geliyor. Bu doğru mu? Eğer öyleyse, kaç tane boş metin dosyasını 1GB'lık bir disk doldurmam gerekir?


Bazı kontrolleri yapmak için koştum, df -iancak bu görünüşte, ağırlıkça değil, kullanılan inode yüzdesini (?) Göstermektedir.

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho

Yanıtlar:


40

Bu çıktı, 28786688genel olarak inode'ları önerir , daha sonra kök dosya sisteminde (cihazda /dev/sda2) bir dosya oluşturma girişimi ENOSPC("cihazda yer kalmaz" ) geri döner .

Açıklama: Orijinal * nix dosya sistemi tasarımında, maksimum inode sayısı dosya sistemi oluşturma zamanında belirlenir. Özel alan onlara tahsis edilmiştir. Veriler için alan yetersiz kalmadan önce inode bitebilir veya bunun tersi olabilir. En yaygın varsayılan Linux dosya sistemi ext4hala bu sınırlamaya sahiptir. Ext4'teki inode boyutlarıyla ilgili bilgi için mkfs.ext4 kılavuz sayfasına bakın.

Linux bu sınırlama olmadan diğer dosya sistemlerini desteklemektedir. Açık btrfs, alan dinamik olarak tahsis edilir. "İnode yapısı nispeten küçüktür ve gömülü dosya verilerini ya da genişletilmiş öznitelik verilerini içermez." (ext3 / 4 , genişletilmiş öznitelikler için düğümlerin içine biraz boşluk ayırır ). Tabii ki çok fazla meta veri / dizin girişi oluşturarak hala disk alanınız tükenebilir.

Bir düşününce, tmpfs, inode'un dinamik olarak tahsis edildiği başka bir örnektir. Rapor edilen maksimum inode sayısının df -ibu dosya sistemleri için pratikte ne anlama geldiğini bilmek zor . Gösterilen değere bir anlam eklemem.


"XFS, dinamik olarak inode da tahsis eder. JFS de yapar. / Reiserfs de yapar. F2FS de yapar. Geleneksel Unix dosya sistemleri mkfs zamanında statik olarak inode'lar tahsis eder ve modern FS'ler de mirasını geri alan ext4 gibi modern FS'ler yapar, ancak bu günlerde istisna, kural değil.

"BTW, XFS, inode'lar tarafından kullanılan azami alan yüzdesi için bir sınır belirlemenize izin veriyor, böylece mevcut dosyalara ekleyemediğiniz noktaya gelmeden önce inode bitebilir. (FSes için varsayılan değer% 25'tir.) 1 TB altında, 50 TB'a kadar dosya sistemlerinde% 5, bundan daha büyükler için% 1'dir.) Yine de, meta verilerde bu alan kullanımı (inode ve kapsam haritaları) normal olarak yansıtılacaktır df -h"- Peter Cordes bu cevabın yorumunda


Yani, eğer 28786688-667980=28118708boş dosyalar oluşturursam , aslında inode bitip "sistemimi yıkarım" diyeceğimi mi söylüyorsunuz ?
luchonacho,

1
XFS ayrıca, inodes'ı dinamik olarak tahsis eder. JFS de öyle. Yani, reiserfs yaptı / yaptı. F2FS de öyle . Geleneksel Unix dosya sistemleri, mkfs zamanında statik olarak inode'lar tahsis eder ve modern FS'leri miraslarını geri alan ext4 gibi modern FS'ler de kullanır, ancak bugünlerde kural değil, istisna budur. (Yüklü tabana göre bazı şeyleri ağırlıklandırmadıkça, muhtemelen şu anda diskte bulunan * nix sistemlerinde bulunan dosya sistemlerinin çoğunun vahşi ortamdaki statik olarak ayrılmış düğümleri olduğunu söylemek doğrudur.)
Peter Cordes

BTW, XFS, inode'lar tarafından kullanılan azami alan yüzdesi için bir sınır belirlemenize izin verir, böylece mevcut dosyalara ekleyemediğiniz noktaya gelmeden önce inode'ların bitmesine neden olabilirsiniz. (Varsayılan olarak 1 TB altındaki FS'ler için% 25, ​​50 TB'a kadar dosya sistemlerinde% 5, bundan daha büyükler için% 1'dir.) Yine de, metadatadaki bu alan kullanımı (inode ve kapsam haritaları) normal df -hlucucacho'da yansıtılacaktır .
Peter Cordes

26

Boş dosyalar oluşturmak aşağıdakileri içerir:

  • dosya başına bir adet inode;
  • ek dizin girişleri, ayrıca dosya başına bir tane, ancak birleştirilmiş

Kullanılabilir inode'ların sayısı genellikle bir dosya sistemi oluşturulduğunda belirlenir ve değiştirilemez (Btrfs veya XFS gibi bazı dosya sistemleri dinamik olarak inode'lar tahsis eder). Bu ölçülen şey df -i. İnode'larınız bittiğinde, boş disk alanı olsa bile yeni dosyalar veya dizinler oluşturamazsınız.

Dizin girişleri de kullanılabilir disk alanından yer kaplar. Bunu bir dizinin boyutuna bakarak görebilirsiniz: her zaman blok boyutunun bir katıdır ve bir dizin çok sayıda dosya içerdiğinde, boyutu büyür. Disk alanınız tükenirse, “dolu” olan bir dizinde ( yani , yeni bir dosya eklemenin yeni bir blok tahsis etmeyi gerektireceği yerlerde), inode'unuz olsa bile yeni dosyalar veya dizinler oluşturamayabilirsiniz .

Yani evet, sadece boş dosyalar kullanarak disk alanınız tükenebilir.


Yani% 100 inode kullanımına ulaşacak kadar boş dosya oluşturmam gerekecek mi?
luchonacho,

@luchonacho evet, etkin bir inode başına bir boş dosya.
Stephen Kitt

Ayrıca, üstüne boşluk ekleyebilecek genişletilmiş özniteliklere de dikkat edin. Örneğin, dizinde çok sayıda varsayılan ACL varsa, içinde bir dosya oluşturmak için bu ACL'leri depolamak için alan gerekir.
Stéphane Chazelas,

Tamam, düzeltilmiş duruyorum. Sorun şu ki, tarayıcımdaki hem oluşturulan hem de sabit genişlikli yazı tipleriyle bana tuhaf geliyor. Meraktan, onları nasıl yerleştirirsiniz? Klavyenizde bu karakter ve U + 0022 bir karakter için farklı bir tuş var mı?
Stéphane Chazelas

Teşekkürler, merakım dışında, İngiltere klavye düzeninde olup olmadıklarını kontrol ettim ve gerçekten AltGr + Shift + V / B'de (vardiya olmadan çift tırnak) olduklarını kontrol ettim. Yine de U + 0022 ile bağlı kalacağım.
Stéphane Chazelas,

7

Saf mantık argümanı:

Bir dosya adı sıfır olmayan miktarda bayttan oluşur. Mutlak maksimum dosya adı miktarına izin verecek şekilde tasarlanan varsayımsal bir dosya sisteminde teorik maksimum sıkıştırma olsa bile, her dosya adı fiziksel diskinizde bir yerde en az bir bit tüketir . Muhtemelen daha fazla, ama "dosya başına 1 bit" önemsiz minimumdur.

Tablalarınıza sığabilecek bit miktarını hesaplayın ve bu, üzerine kaydedebileceğiniz teorik olarak maksimum (boş veya boş olmayan) dosya sayısıdır.

Yani cevabı evet. Ne de olsa boş dosyalar eklemeye devam ederseniz, hangi depolama alanını kullanırsanız kullanın, alanınız tükenir. Açıkçası, bu şekilde hesaplanan maksimumdan daha erken tükenecek, ancak tükeneceksiniz.


0

Basitçe hayır, ancak Linux üzerinde inode'ların tükenmesi ile aynı olabilir.

kabuğunda böyle bir şey deneyebilirsin n=0; while :; do touch $n; let n=n+1; done

Sanal makinede çalıştırdığınızdan emin olun, yoksa çok hızlı bir şekilde inode dışı kalırsınız.


Bu komut ne yapıyor?
luchonacho

Her sırayla 0'dan sonra 1 2 3'ten başlayarak bir tamsayı olan bir dosya adı oluşturan gerçek sonsuz döngüde başlar ... sonuçta dosya sisteminin tüm düğümlerini kullanmak için yeterli dosyalar oluşturur.
in1t3r,

1
Eğer bu komutu / home bölümünüzde çalıştırıyorsanız, o zaman / bölüm bağımsızsa / bölümünüze artık yazamayacaksınız. Önerim, içine inodetest cd adında bir dizin hazırlayın ve daha sonra artık dosya sisteminde dosya oluşturamayacağınız hataları gördükten sonra komutu çalıştırın rm -fr inodetest. :)
in1t3r

0

Boş dosyalar oluşturarak diski dolduramazsınız - diskte hala yeni dosyalar için yeterince boş alan olacaktır. Ancak evet, dosya sisteminin sonlu boş inode kaynağını tüketebilirsiniz - bu noktada yeni dosyalar oluşturamazsınız (diskiniz - kullanılan alan az olsa bile - pratikte boş). Disk sadece pratik olarak boşken, dosya sisteminin yalnızca kullanılan disk listesi değil, dosya sistemi doluydu. İnode-table, diskte yer kullanır, ancak dosya eklediğinizde tablo büyümez - tıpkı satırlarına yazdığınızda bir sayfanın büyümesi gibi.

(Baard Kopperud'un yorumuna cevap)


Aynı şeyi söyleyen başka bir cevaba ihtiyacımız olduğundan emin değil misiniz?
Jeff Schaller
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.