Hallo zusammen, wie viele Dateien kann man auf einem ext4 System pro Verzeichnis anlegen? Gibt es da eine Begrenzung oder ist das nur durch die gesamte Anzahl verfügbarer Inodes begrenzt? Die Frage bezieht sich auf eine Standardinstallation von Ubuntu 10.04 LTS mit 160 GB Systempartition. Hintergrund ist eine Serienfotoanlage, es wird alle 10 Minuten ein Bild einer Baustelle aufgenommen und mit eindeutigem Zeitstempel in ein Verzeichnis kopiert. Später soll mit ffmpeg ein Zeitraffervideo daraus erstellt werden. Damit ffmpeg automatisch die Bilder einlesen kann, ist es am einfachsten, wenn alle jpeg-Dateien in einem Verzeichnis liegen. Das Bauvorhaben kann bis zu 3 Jahre dauern, ich erwarte also bis zu 160000 Bilder. Was passiert eigentlich, wenn man zu viele Dateien anlegt? Bleibt das System stabil oder gibts dann ein Problem? Wenn nichts schlimmes passiert, könnte ich das ja ausprobieren. Vielleicht weiß das ja zufällig jemand. Viele Grüße, Peter
Eine solche Beschränkung ist mir eigentlich nur vom Ur-FAT bekannt, wo die Größe des Wurzelverzeichnisses begrenzt war, die anderer Verzeichnisse aber nur den allgemeinen Beschränkungen (s.u.) unterlag. Modernere Dateisysteme kennen keine Begrenzung außer der maximalen Dateigröße (die auch für Verzeichnisse gilt), der Zahl der Inodes (so es sie oder etwas Vergleichbares gibt) und der Anzahl der Unterverzeichnisse (wegen des Link-Counts).
Peter Diener schrieb: > Gibt es da eine Begrenzung oder ist das nur durch die gesamte Anzahl > verfügbarer Inodes begrenzt? M.W. und nach dem, was eine schnelle Internetrecherche hergibt, letzteres. Auf dem Ext3-Filesystem auf meinem PC kann ich die 160000 Dateien ohne Probleme anlegen. Ext4 habe ich keins da, auf dem ich das testen könnte. Nur die Anzahl der Unterverzeichnisse innerhalb eines Verzeichnisses ist begrenzt, nämlich auf 64000 bei Ext4 und 32000 bei Ext3. Wenn man versucht, dieses Maximum zu überschreiten, passiert aber nichts Schlimmes, es kommt lediglich die Meldung: mkdir: cannot create directory `foo': Too many links
ich würde es mit einem einfachen shell-Skript ausprobieren. Script könnte so aussehen (ungetestet)
1 | #! /bin/sh
|
2 | |
3 | COUNT=0 |
4 | |
5 | while test $COUNT -le 160000 |
6 | do
|
7 | touch $COUNT.test |
8 | COUNT=`expr $COUNT + 1` |
9 | done
|
10 | |
11 | echo all done |
..für Bruteforceausprobierer geht das (in bash-Syntax) auch in einem Einzeiler: $ for ((i=0; i<160000; i++)) ; do touch ${i}-test ; done Zum Zwecke der Vereinfachung würde ich die Dateien nicht in einem einzigen Verzeichnis zusammenfassen, sondern z.B. jeden Monat eines in der Form 'yyyy-mm' oder so. Mit ein bisschen Schellschgribbt ist das kein Problem. Und man kann die Dateien nachher trotzdem leicht chronologisch sortieren lassen. HF und machts nix kaputt
Es gibt eine theoretische Grenze, aber die liegt bei mehr als 100 Billionen Dateien, also keine Sorge ;)
Vielen Dank für die Antworten! Ich denke, ich kann einfach mal 160000 leere Dateien zum Test anlegen, wenn ich die nächste Wartung mache. >Zum Zwecke der Vereinfachung würde ich die Dateien nicht in einem >einzigen Verzeichnis zusammenfassen, sondern z.B. jeden Monat eines in >der Form 'yyyy-mm' oder so. Mit ein bisschen Schellschgribbt ist das >kein Problem. Und man kann die Dateien nachher trotzdem leicht >chronologisch sortieren lassen. Das wollte ich ursprünglich auch machen, aber ffmpeg braucht alle Quelldateien durchgehend nummeriert in einem Verzeichnis. Oder hat da jemand eine Idee? Grüße, Peter
Erst pro Verzeichnis ein Video erstellen und dann alle Video zusammenfügen.
Es könnte sich allerdings herausstellen, dass solche Dirs etwas abbremsen, je nachdem was man so treibt. Beispielsweise sobald man solche Monster in einem Browser/Explorer zu sehen kriegt.
Hallo! reichen die 160 GB denn für die 160000 Bilder ?
> Das wollte ich ursprünglich auch machen, aber ffmpeg braucht alle > Quelldateien durchgehend nummeriert in einem Verzeichnis. Oder hat da > jemand eine Idee? Ein Stapel Symlinks in einem eigenen Verzeichnis regelt.. kann man auch von einem Einzeiler anlegen lassen: $ i=0 ; find /source/of/evil/ -type f -name "*.jpg" | while read f ; do ln -s "${f}" $(printf "%06d.jpg" $i) ; let i=i+1 ; done HF
Aso Nachtrag falls es so noch nicht sortiert ist: sort regelt :-) $ i=0 ; find /source/of/evil/ -type f -name "*.jpg" | sort | while read f ; do ln -s "${f}" $(printf "%06d.jpg" $i) ; let i=i+1 ; done Hab ich schon mal erwähnt dass Bash und GNU toll ist?
>Erst pro Verzeichnis ein Video erstellen und dann alle Video >zusammenfügen. Ja, die Lösung kenn ich schon, so hab ich das bei meinem vorletzten Zeitrafferprojekt gemacht. Wenn technisch nichts dagegen spricht, fahre ich das aber lieber über ein Verzeichnis. >Es könnte sich allerdings herausstellen, dass solche Dirs etwas >abbremsen, je nachdem was man so treibt. Beispielsweise sobald man >solche Monster in einem Browser/Explorer zu sehen kriegt. Das ist mir auch schon bekannt, alle meine bisherigen Zeitrafferprojekte sind ausnahmslos auf Windows XP gelaufen, das hier ist das erste, das komplett auf Ubuntu läuft. Mit Windows hat man so ab etwa 10000 Bildern schon erhebliche Wartezeiten, bis das im Explorer angezeigt wird. Backups mache ich momentan mit einem Mac Book und OS X 10.4.9, da gibts eigentlich kaum Verzögerungszeiten. Ziel ist es, dass die Fotos bis zur Erstellung des Films auf dem Rechner bleiben, es wird alles notwendige dort durchgeführt. Dunkle Fotos (Nachtaufnahmen) und Wochenendaufnahmen werden nicht mit in den Film aufgenommen. Eventuell bastel ich mir noch eine Datumsanzeige, die mit in die Bilder gemischt wird. Performanceprobleme hab ich bis jetzt noch nicht, es sind schon etwa 10000 Bilder gemacht und das wird alles ganz flüssig angezeigt. Grüße, Peter
@ g457: Die Idee mit den Links ist gut, ich hab das bisher durch Umbenennen der benötigten Bilder und Löschen der unbenötigten gelöst. Die 160 GB reichen für alle Bilder, ein Bild hat zwischen 300 und 800 kB.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.