Was passiert, wenn das Limit von 4 Milliarden Dateien in einer ext4-Partition überschritten wurde?

46

Was passiert, wenn das Limit von 4 Milliarden Dateien in einer ext4-Partition überschritten wurde, zum Beispiel bei einer Übertragung von 5 Milliarden Dateien?

Bensuperpc
quelle

Antworten:

79

Möglicherweise wird der Fehler "Kein Platz mehr auf dem Gerät" angezeigt:

# 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

Und in der Praxis haben Sie diese Grenze viel früher als "4 Milliarden Dateien" erreicht. Überprüfen Sie Ihre Dateisysteme mit beiden df -hund df -ifinden Sie heraus, wie viel Speicherplatz noch frei ist.

# 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

Wenn in diesem Beispiel Ihre Dateien im Durchschnitt nicht 4 KB groß sind, ist der Inode-Speicher viel früher als der Speicherplatz erschöpft. Es ist möglich , ein anderes Verhältnis (zu spezifizieren mke2fs -N number-of-inodesoder -i bytes-per-inodeoder -T usage-typewie definiert in /etc/mke2fs.conf).

Frostschutz
quelle
1
Vielen Dank für Ihre Antwort, irgendwann mache ich mir Sorgen, ich habe über 400 Millionen Dateien in meiner Hauptpartition (RAID 50), ich habe viele Git-Repository, es war aus Sicherheitsgründen, wenn das passieren sollte
Bensuperpc
5
@ensuperpc: Wenn viele der Dateien nicht regelmäßig verwendet werden - nur für Sicherungszwecke - können Sie erwägen, jedes Projekt in eine eigene TAR-Datei zu packen. Dies reduziert die Anzahl der Dateien erheblich und den Speicherplatz, der belegt wird, wenn Sie eine Komprimierungsoption verwenden.
Jamesqf
27
@jamesqf Wenn Sie dies noch nicht getan haben, versuchen Sie, git repackin jedem Git-Repository alle separaten Objekte in einer Packdatei zu kombinieren.
user253751
13
+1 Da Sie gerade verwenden touch, echozeigen Sie auch einen wichtigen Punkt und ein häufig vorkommendes Missverständnis: Es ist möglich, eine Festplatte mit leeren Dateien zu füllen.
Rexkogitans
6
@jamesqf verliert git repackkeine Funktionalität, es ist funktional immer noch das gleiche Git-Repo, tarwas es für viele Programme, die ein Projekt oder ein Git-Repository erwarten , unlesbar macht
Ferrybig
52

Sobald das Limit erreicht ist, schlagen nachfolgende Versuche, Dateien zu erstellen, fehl ENOSPC, was darauf hinweist, dass das Zieldateisystem keinen Platz mehr für neue Dateien hat.

In dem von Ihnen beschriebenen Szenario wird die Übertragung normalerweise abgebrochen, sobald das Limit erreicht ist.

Stephen Kitt
quelle