Zum Inhalt springen

Fallocate: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
 
(29 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''fallocate''' - Beschreibung
'''fallocate''' - einer Datei Platz im Dateisystem zuweisen oder enziehen


== Beschreibung ==
== Beschreibung ==
; Blöcke für eine Datei reservieren oder die Reservierung aufzuheben
Wenn das Dateisystem den fallocate(2)-Systemaufruf unterstützt, geschieht dies schnell durch Zuweisung von Blöcken und Markierung dieser Blöcke als nicht initialisiert
* Dadurch ist direkter E/A-Zugriff auf die Datenblöcke unnötig
* Diese Vorgehensweise ist bedeutend schneller als die Erzeugung der Datei durch Füllen mit Nulle


== Installation ==
== Installation ==
[[fallocate]] ist Teil von [[Util-linux]]


== Aufruf ==
== Aufruf ==
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1-3" line copy>
fallocate [-c|-p|-z] [-o Versatz] -l Länge [-n] Dateiname
fallocate -d [-o Versatz] [-l Länge] Dateiname
fallocate -x [-o Versatz] -l Länge Dateiname
</syntaxhighlight>
</syntaxhighlight>


=== Optionen ===
=== Optionen ===
; Länge und Versatz
Nachfolgend kann den Argumenten Länge und Versatz eines der multiplikativen Suffixe KiB (=1024), MiB (=1024*1024) und so weiter für GiB, TiB, PiB, EiB, ZiB und YiB folgen (das »iB« ist optional, zum Beispiel ist »K« gleichbedeutend mit »KiB«) oder die Suffixe KB (=1000), MB (=1000*1000) und so weiter für GB, TB, PB, EB, ZB und YB folgen
The options --collapse-range, --dig-holes, --punch-hole, --zero-range and --posix are mutually exclusive
{| class="wikitable sortable options gnu big"
{| class="wikitable sortable options gnu big"
|-
|-
! Unix !! GNU !! Parameter !! Beschreibung
! Unix !! GNU !! Parameter !! Beschreibung
|-
|-
| || || ||  
| -c || --collapse-range || || entfernt einen Bereich aus einer Datei, ohne ein »Loch« zu hinterlassen
* Der »zusammenzuklappende« Dateibereich beginnt bei Versatz und erstreckt sich über die angegebene Länge in Byte
* Nach Abschluss des Vorgangs ist der Inhalt der Datei, der ursprünglich an der Stelle Versatz+Länge stand, nun an der Stelle Versatz und die Datei ist Länge Byte kleiner
* Die Option --keep-size kann für die Anwendung von »collapse-range« nicht angegeben werden
 
Dies ist seit Linux 3.15 für ext4 (nur für Extent-basierte Dateien) und XFS verfügbar
 
Ein Dateisystem kann Einschränkungen bezüglich der Granularität der Aktion setzen, um eine effiziente Implementierung sicherzustellen
* Typischerweise müssen der Versatz und die Länge Vielfache der logischen Blockgröße des Dateisystems, die vom Dateisystemtyp und der Konfiguration abhängt, sein
* Falls ein Dateisystem so eine Anforderung hat, wird die Aktion mit dem Fehler EINVAL fehlschlagen, falls diese Anforderung verletzt ist
|-
| -d || --dig-holes || || Erkennen und Erstellen von »Löchern«
* Hierdurch wird am Speicherort der Datei eine Sparse-Datei erstellt, ohne zusätzlichen Platz auf der Platte zu verwenden
* Die minimale Größe des »Lochs« hängt von der E/A-Blockgröße des Dateisystems ab (üblicherweise 4096 Byte)
* Außerdem ist --keep-size impliziert, wenn diese Option verwendet wird
* Wenn kein Bereich durch --offset und --length angegeben wurde, wird die gesamte Datei auf »Löcher« hin analysiert
 
Sie können sich diese Option wie das Ergebnis des Befehls »cp --sparse« vorstellen, wobei die Zieldatei den Namen der Ursprungsdatei erhält und kein zusätzlicher Speicherplatz erforderlich ist
 
Mit der Option --punch-hole erhalten Sie eine Liste der unterstützten Dateisysteme
|-
| -i || --insert-range || || fügt ein Loch der Länge Länge Bytes bei Versatz ein und verschiebt bestehende Daten
|-
| -l || --length || Länge || gibt die Länge des Zuweisungsbereiches in Byte an
|-
|-
| -n || --keep-size || || verhindert die Änderung der eigentlichen Länge der Datei
* Dadurch können tatsächlich auch Blöcke nach dem Dateiende (EOF) zugewiesen werden, die durch Abschneiden entfernt werden können
|-
| -o || --offset || Versatz || gibt den Anfang des Zuweisungsbereiches in Byte an
|-
| -p || --punch-hole || || löscht eine Zuweisung (d.&nbsp;h.&nbsp;erzeugt ein »Loch«) im Bereich, der bei Versatz beginnt und sich über die angegebene Länge in Bytes erstreckt
* Innerhalb des angegebenen Bereiches werden Dateisystemblöcke partiell auf Null gesetzt und ganze Dateisystemblöcke aus der Datei entfernt
* Nach erfolgreichem Aufruf geben nachfolgende Aufrufe Nullen aus diesem Bereich zurück
* Diese Option darf nicht gleichzeitig mit --zero-range angegeben werden
* Außerdem wird in dieser Option --keep-size impliziert
Dies wird für XFS (seit Linux 2.6.38), ext4 (seit Linux 3.0), Btrfs (seit Linux 3.7), tmpfs (seit Linux 3.5) und gfs2 (seit Linux 4.16) unterstützt
|-
| -v || --verbose || || aktiviert den ausführlichen Modus
|-
| -x || --posix || || aktiviert den POSIX-Betriebsmodus
* In diesem Modus wird die Zuweisung immer abgeschlossen, aber es kann länger dauern, wenn schnelle Zuweisung nicht vom darunterliegenden Dateisystem unterstützt wird
|-
| -z || --zero-range || || Belegt den Raum in dem bei Versatz beginnenden Byte-Bereich für Länge Bytes mit Nullen
* Innerhalb des angegebenen Bereichs werden Blöcke für die Regionen, die die Löcher in der Datei überbrücken, vorbelegt
* Nach einem erfolgreichen Aufruf liefern nachfolgende Leseanforderungen aus diesem Bereich Nullen zurück
Das Nullen erfolgt innerhalb des Dateisystems, vorzugsweise durch Umwandlung des Bereichs in ungeschriebene Extents
* Dieser Ansatz bedeutet, dass der angegebene Bereich nicht physisch auf dem Gerät mit Nullen gefüllt wird (außer für Teilblöcke an beiden Enden des Bereichs) und E/A (andernfalls) nur zur Aktualisierung von Metadaten benötigt wird
Die Option --keep-size kann angegeben werden, um Änderungen der Länge der Datei zu verhindern
Dies ist seit Linux 3.14 für ext4 (nur für Extent-basierte Dateien) und XFS verfügbar
|-
| -h || --help || || zeigt einen Hilfetext an und beendet das Programm
|-
| -V || --version || || Display version and exit
|}
|}


Zeile 27: Zeile 95:
| 0 || Erfolg
| 0 || Erfolg
|-
|-
| >0 || Fehler
| >0 || Fehler
|}
|}


== Anwendung ==
== Anwendung ==
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
< /syntaxhighlight>
</syntaxhighlight>


=== Problembehebung ===
=== Problembehebung ===
Zeile 42: Zeile 110:
! Datei !! Beschreibung
! Datei !! Beschreibung
|-
|-
| ||  
| ||
|-
|-
| ||  
| ||
|}
|}


Zeile 58: Zeile 126:


=== Dokumentation ===
=== Dokumentation ===
; Man-Page  
; Man-Page
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]
# [https://manpages.debian.org/stable/util-linux-locales/fallocate.1.de.html fallocate (1)]
 
# [https://manpages.debian.org/trixie/manpages-dev/fallocate.2.en.html fallocate (2)]
<!--
; Info-Pages
-->


=== Links ===
=== Links ===
==== Projekt ====
==== Projekt ====
==== Weblinks ====
==== Weblinks ====
# https://superuser.com/questions/850267/how-to-append-data-in-a-file-by-dd


{{DEFAULTSORT:fallocate}}
{{DEFAULTSORT:fallocate}}
Zeile 75: Zeile 141:


</noinclude>
</noinclude>
= TMP =
Im Linux-Kernel 4.1 wurde die Option <tt>FALLOC_FL_INSERT_RANGE</tt> hinzugefügt
* Von <tt>fallocate(2)</tt> [http://manpages.org/fallocate/2 man page]
Durch die Angabe des Flags FALLOC_FL_INSERT_RANGE (verfügbar seit Linux 4.1) im Modus wird der Speicherplatz der Datei vergrößert, indem ein Loch innerhalb der Datei Größe eingefügt wird, ohne vorhandene Daten zu überschreiben
* Die Lücke beginnt am Offset und erstreckt sich über len Bytes
* Beim Einfügen des Lochs in die Datei wird der Inhalt der Datei ab dem Offset um len Bytes nach oben (d.&nbsp;h.&nbsp;zu einem höheren Datei-Offset) verschoben
* Das Einfügen eines Lochs innerhalb einer Datei erhöht die Dateigröße um len Bytes
Und vor Kurzem wurde diese Option [https://github.com/karelzak/util-linux/commit/b439065634e693dda385a6e5269e1d9258d6d471 zu util-linux hinzugefügt]
-i, --insert-range
Insert a hole of length bytes from offset, shifting existing data
Wenn also <tt>util-linux</tt> Version 2.30 veröffentlicht wird und Ihre Linux-Distribution auf diese Version aktualisiert wird, werden wir in der Lage sein, die Dateigröße blitzschnell zu erhöhen, indem wir sie ausführen
<syntaxhighlight lang="bash" highlight="1" line copy>
fallocate -i -l 1G -o 128M /path/to/file
</syntaxhighlight>
wobei <tt>128M</tt> die aktuelle Dateigröße ist
; Quelle
# https://superuser.com/questions/850267/how-to-append-data-in-a-file-by-dd

Aktuelle Version vom 4. September 2025, 14:03 Uhr

fallocate - einer Datei Platz im Dateisystem zuweisen oder enziehen

Beschreibung

Blöcke für eine Datei reservieren oder die Reservierung aufzuheben

Wenn das Dateisystem den fallocate(2)-Systemaufruf unterstützt, geschieht dies schnell durch Zuweisung von Blöcken und Markierung dieser Blöcke als nicht initialisiert

  • Dadurch ist direkter E/A-Zugriff auf die Datenblöcke unnötig
  • Diese Vorgehensweise ist bedeutend schneller als die Erzeugung der Datei durch Füllen mit Nulle

Installation

fallocate ist Teil von Util-linux

Aufruf

fallocate [-c|-p|-z] [-o Versatz] -l Länge [-n] Dateiname
fallocate -d [-o Versatz] [-l Länge] Dateiname
fallocate -x [-o Versatz] -l Länge Dateiname

Optionen

Länge und Versatz

Nachfolgend kann den Argumenten Länge und Versatz eines der multiplikativen Suffixe KiB (=1024), MiB (=1024*1024) und so weiter für GiB, TiB, PiB, EiB, ZiB und YiB folgen (das »iB« ist optional, zum Beispiel ist »K« gleichbedeutend mit »KiB«) oder die Suffixe KB (=1000), MB (=1000*1000) und so weiter für GB, TB, PB, EB, ZB und YB folgen

The options --collapse-range, --dig-holes, --punch-hole, --zero-range and --posix are mutually exclusive

Unix GNU Parameter Beschreibung
-c --collapse-range entfernt einen Bereich aus einer Datei, ohne ein »Loch« zu hinterlassen
  • Der »zusammenzuklappende« Dateibereich beginnt bei Versatz und erstreckt sich über die angegebene Länge in Byte
  • Nach Abschluss des Vorgangs ist der Inhalt der Datei, der ursprünglich an der Stelle Versatz+Länge stand, nun an der Stelle Versatz und die Datei ist Länge Byte kleiner
  • Die Option --keep-size kann für die Anwendung von »collapse-range« nicht angegeben werden

Dies ist seit Linux 3.15 für ext4 (nur für Extent-basierte Dateien) und XFS verfügbar

Ein Dateisystem kann Einschränkungen bezüglich der Granularität der Aktion setzen, um eine effiziente Implementierung sicherzustellen

  • Typischerweise müssen der Versatz und die Länge Vielfache der logischen Blockgröße des Dateisystems, die vom Dateisystemtyp und der Konfiguration abhängt, sein
  • Falls ein Dateisystem so eine Anforderung hat, wird die Aktion mit dem Fehler EINVAL fehlschlagen, falls diese Anforderung verletzt ist
-d --dig-holes Erkennen und Erstellen von »Löchern«
  • Hierdurch wird am Speicherort der Datei eine Sparse-Datei erstellt, ohne zusätzlichen Platz auf der Platte zu verwenden
  • Die minimale Größe des »Lochs« hängt von der E/A-Blockgröße des Dateisystems ab (üblicherweise 4096 Byte)
  • Außerdem ist --keep-size impliziert, wenn diese Option verwendet wird
  • Wenn kein Bereich durch --offset und --length angegeben wurde, wird die gesamte Datei auf »Löcher« hin analysiert

Sie können sich diese Option wie das Ergebnis des Befehls »cp --sparse« vorstellen, wobei die Zieldatei den Namen der Ursprungsdatei erhält und kein zusätzlicher Speicherplatz erforderlich ist

Mit der Option --punch-hole erhalten Sie eine Liste der unterstützten Dateisysteme

-i --insert-range fügt ein Loch der Länge Länge Bytes bei Versatz ein und verschiebt bestehende Daten
-l --length Länge gibt die Länge des Zuweisungsbereiches in Byte an
-n --keep-size verhindert die Änderung der eigentlichen Länge der Datei
  • Dadurch können tatsächlich auch Blöcke nach dem Dateiende (EOF) zugewiesen werden, die durch Abschneiden entfernt werden können
-o --offset Versatz gibt den Anfang des Zuweisungsbereiches in Byte an
-p --punch-hole löscht eine Zuweisung (d. h. erzeugt ein »Loch«) im Bereich, der bei Versatz beginnt und sich über die angegebene Länge in Bytes erstreckt
  • Innerhalb des angegebenen Bereiches werden Dateisystemblöcke partiell auf Null gesetzt und ganze Dateisystemblöcke aus der Datei entfernt
  • Nach erfolgreichem Aufruf geben nachfolgende Aufrufe Nullen aus diesem Bereich zurück
  • Diese Option darf nicht gleichzeitig mit --zero-range angegeben werden
  • Außerdem wird in dieser Option --keep-size impliziert

Dies wird für XFS (seit Linux 2.6.38), ext4 (seit Linux 3.0), Btrfs (seit Linux 3.7), tmpfs (seit Linux 3.5) und gfs2 (seit Linux 4.16) unterstützt

-v --verbose aktiviert den ausführlichen Modus
-x --posix aktiviert den POSIX-Betriebsmodus
  • In diesem Modus wird die Zuweisung immer abgeschlossen, aber es kann länger dauern, wenn schnelle Zuweisung nicht vom darunterliegenden Dateisystem unterstützt wird
-z --zero-range Belegt den Raum in dem bei Versatz beginnenden Byte-Bereich für Länge Bytes mit Nullen
  • Innerhalb des angegebenen Bereichs werden Blöcke für die Regionen, die die Löcher in der Datei überbrücken, vorbelegt
  • Nach einem erfolgreichen Aufruf liefern nachfolgende Leseanforderungen aus diesem Bereich Nullen zurück

Das Nullen erfolgt innerhalb des Dateisystems, vorzugsweise durch Umwandlung des Bereichs in ungeschriebene Extents

  • Dieser Ansatz bedeutet, dass der angegebene Bereich nicht physisch auf dem Gerät mit Nullen gefüllt wird (außer für Teilblöcke an beiden Enden des Bereichs) und E/A (andernfalls) nur zur Aktualisierung von Metadaten benötigt wird

Die Option --keep-size kann angegeben werden, um Änderungen der Länge der Datei zu verhindern

Dies ist seit Linux 3.14 für ext4 (nur für Extent-basierte Dateien) und XFS verfügbar

-h --help zeigt einen Hilfetext an und beendet das Programm
-V --version Display version and exit

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Man-Page
  1. fallocate (1)
  2. fallocate (2)

Links

Projekt

Weblinks

  1. https://superuser.com/questions/850267/how-to-append-data-in-a-file-by-dd