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?

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).


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.