Co się stanie, jeśli limit partycji 4 miliardów został przekroczony?

46

Co się stanie, jeśli limit 4 miliardów plików zostanie przekroczony na partycji ext4, na przykład w przypadku transferu 5 miliardów plików?

Bensuperpc
źródło

Odpowiedzi:

79

Przypuszczalnie zobaczysz smak błędu „Brak miejsca na urządzeniu”:

# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device

W praktyce osiągasz ten limit znacznie wcześniej niż „4 miliardy plików”. Sprawdź oba systemy plików df -hi df -idowiedz się, ile pozostało miejsca.

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       93M  2.1M   84M   3% /dev/shm/loop
# df -i loop/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop0      25688 25688     0  100% /dev/shm/loop

W tym przykładzie, jeśli twoje pliki nie mają przeciętnie rozmiaru 4K, zabraknie miejsca inode znacznie wcześniej niż miejsca do przechowywania. Jest to możliwe, aby określić inny stosunek ( mke2fs -N number-of-inodesczy -i bytes-per-inodelub -T usage-typejak zdefiniowano w /etc/mke2fs.conf).

frostschutz
źródło
1
Dziękuję za odpowiedź, czasem się martwię, mam ponad 400 milionów plików na mojej głównej partycji (RAID 50), mam wiele repozytoriów git, gdyby miało to nastąpić dla bezpieczeństwa
Bensuperpc
5
@ensuperpc: Jeśli wiele plików nie jest regularnie używanych - tylko tam do celów tworzenia kopii zapasowych - możesz rozważyć umieszczenie każdego projektu we własnym pliku tar. To znacznie zmniejsza liczbę plików, a także zajmuje miejsce, jeśli używasz opcji kompresji.
jamesqf
27
@jamesqf Jeśli jeszcze tego nie zrobiłeś, spróbuj uruchomić git repackw każdym repozytorium git, aby połączyć wszystkie oddzielne obiekty w plik pakietu.
user253751
13
+1 Ponieważ tylko używasz touch, nie ma w tym nic dziwnego echo, pokazujesz także ważną kwestię i często popełniane nieporozumienia: możliwe jest wypełnienie dysku pustymi plikami.
rexkogitans
6
@jamesqf git repacknie traci żadnej funkcjonalności, jest funkcjonalnie tym samym repozytorium git, tarczyni go nieczytelnym dla wielu programów oczekujących projektu lub repozytorium git
Ferrybig
52

Po osiągnięciu limitu kolejne próby utworzenia plików zakończą się niepowodzeniem ENOSPC, co oznacza, że ​​docelowy system plików nie ma miejsca na nowe pliki.

W opisanym scenariuszu zazwyczaj spowoduje to przerwanie transferu po osiągnięciu limitu.

Stephen Kitt
źródło