Sorunun nedeni
Sorun, XFS'nin inodeları nasıl paylaştığıyla ilgili. Çoğu dosya sisteminden farklı olarak, yeni dosyalar oluşturuldukça dağıtım dinamik olarak gerçekleşir. Ancak, aksi belirtilmedikçe, inode'lar 32 bitlik değerlerle sınırlıdır; bu, dosya sistemindeki ilk terabaytlık depoya sığmaları gerektiği anlamına gelir. Bu yüzden, ilk terabayt'ı tamamen doldurduysanız ve sonra diski büyütüyorsanız, inode'lar yeni alanda oluşturulamadığından, hala yeni dosyalar oluşturamazsınız.
1. Çözüm - montaj seçeneklerini değiştirin
Çözümlerden biri, dosya sistemini mount seçeneğiyle yeniden monte etmektir inode64
. Bununla birlikte, bazı uygulamalar bu konuda tuhaf davranacaktır (örneğin, MySQL) ve NFS'nin kafası karışacaktır. Dolayısıyla, sisteminizin bu seçenekle çalışacağından emin değilseniz, bir sonraki seçeneğe geçebilirsiniz.
2. Çözüm - dosyaları taşıyın
İkinci çözüm, şu anda ilk terabaytta depolanan dosyaların bazılarını bulmak ve bunları dosya sisteminin başka bir alanına taşımaktır.
Yaşa göre taşıma
Bizim durumumuzda, bu kolaydı - dosya sistemi yıllardır kullanılıyordu, bu yüzden en eski dosyaları bulabildik ve onları dosya sisteminden uzağa taşıyabildik ve sonra geri taşıyabildik. Bu kolayca bulmak kullanarak yapıldı:
find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt
2 yıldan daha eski olan bağlama noktasının tam 3 seviyesindeki tüm dizinler için boyut ve dizin adını içeren bir liste verdi. Daha sonra en büyük dizinleri bulmak için listeyi sıralayabilir ve mv
bunları başka bir dosya sistemine taşımak ve tekrar kullanmak için kullanabiliriz .
Tahsisat grubuna göre taşıma
Yaşınıza göre kolayca gidemiyorsanız, örneğin aynı anda birçok dosya oluşturulduğunda, taşınacak doğru dosyaları hala bulabilirsiniz, ancak bu işlem biraz zaman alır.
XFS (aka ayırma gruplarına sahip AG kullanarak, ilk terabaytın üzerinde edilebilen gruplar olan anlamaya bloğu ve her AG'nin bloklarının sayısını kontrol edebilir 0 ile başlayarak, s) xfs_info /path/to/mountpoint
. Veya hangilerinin dolu olduğunu görmek için ilk birkaç AG'yi kontrol edebilir ve sonra bunları temizleyebilirsiniz.
- İlk dört AG'de boş alanı kontrol etme:
seq 0 1 5'teki ag için; AG $ ag’da boş alan yok mu; xfs_db -r -c "serbest -s-a-$ ag" / dev / CACHE / CACHE; grep "toplamı serbest"; tamam
Herhangi bir gruptaki toplam boş alan 40'tan küçükse, içinde yeni dosyalar oluşturamazsınız.
- Bu AG’deki dosyaları bulun
Bu, dosya sistemindeki her bir dosyanın meta verilerinin kontrol edilmesini gerektirir. Uzun zaman alacak ... İşte bir öneri:
find / extra -mindepth 3 tipi f türü -exec xfs_bmap -v {} \; > /tmp/agfilelist.txt
" 0 "
AG 0'daki tüm dosyaları bulmak için grep (bu bir boşluk, sıfır ve başka bir alan), AG 1 üzerindeki dosyaları " 1 "
bulmak için grep yapabilirsiniz. AG 0 ile başlayın, en büyük dosyaları uzaklaştırın (kullanarak mv
, değil cp
!) ve sonra tekrar geri. Boş alan yeterli miktarda alana kadar tekrarlayın.
Sonuç
Bir kez / extra'dan yeterince uzak bir yere taşıdık ve sonra tekrar geri döndük, AG 0'da çok fazla alan vardı ve bir kez daha yeni dosyalar oluşturmak mümkün oldu.