Ich habe ein mehrere GB großes Verzeichnis, auf das selten zugegriffen wird. Wenn dies der Fall ist, möchte ich die darin enthaltenen Dateien schnell lesen können, anstatt warten zu müssen. Da die Dateien selten aufgerufen werden, befinden sie sich nicht im Dateisystemcache. Ich möchte jedoch vorschlagen, dass Linux sie vor dem Zugriff darauf in den Dateisystemcache lädt.
Manche werden vielleicht argumentieren, dass ich auf das erste Laden warten muss und daher keine Zeit spare – es genügt zu sagen, dass ich dies in meinem speziellen Anwendungsfall automatisieren kann, sodass es nicht darum geht, Systemzeit zu sparen, sondern darum, Zeit des Benutzers zu sparen (da er nicht warten muss, wenn die Dateien zwischengespeichert sind).
Mir ist auch klar, dass der Dateisystem-Cache ohne die Verwendung von etwas wie tmpfs keine Garantie darstellt. Es handelt sich um einen Vorschlag an das Betriebssystem, und ich bin damit einverstanden.
Die naheliegendste Methode scheint also folgende zu sein:
tar -cf - /mydirectory > /dev/null
Wenn ich dies jedoch mache, wird der Befehl sofort zurückgegeben, sogar bei einem Verzeichnis mit mehreren GB. Es scheint, dass Bash erkennt, dass die Ausgabe an /dev/null umgeleitet wird, und den gesamten Befehl optimiert, sodass Tar nicht einmal aus dem Verzeichnis liest.
Mit welchem einfachen Befehl lässt sich das Betriebssystem dazu veranlassen, alle Dateien in einem Verzeichnis zu lesen?
Antwort1
Diese Optimierung wird nicht von Bash durchgeführt, sondern von GNU Tar. Es erkennt, wann seine Ausgabe erfolgt, /dev/null
und liest den Inhalt der Dateien nicht.
Sorgen Sie dafür, dass die Ausgabe nicht wie folgt aussieht /dev/null
:
tar -cf - /mydirectory > /dev/zero
Oder verwenden Sie ein anderes Tool, wie zum Beispiel
find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null