Wir haben gesehen, dass das Betriebssystem die Optimierung beim Kopieren beim Schreiben durchführt, wenn ein Prozess gegabelt wurde. Grund dafür ist, dass die Gabelung in den meisten Fällen von exec ausgeführt wird, sodass die Kosten für die Zuweisung von Seiten und das unnötige Kopieren der Daten aus dem Adressraum des Anrufers vermieden werden sollen.
Dies geschieht auch, wenn CP unter Linux mit ext4- oder xfs-Dateisystemen (Journaling) ausgeführt wird. Wenn es nicht passiert, warum dann nicht?
linux
filesystems
ext4
xfs
copy-on-write
Mridul Verma
quelle
quelle
Antworten:
Das zu suchende Schlüsselwort lautet
reflink
. Es wurde kürzlich in XFS implementiert.BEARBEITEN: Die XFS-Implementierung wurde ursprünglich als EXPERIMENTELL markiert. Diese Warnung wurde in der Kernel-Version 4.16 entfernt, einige Monate nachdem ich oben geschrieben hatte :-).
quelle
Aus der
cp
Manpage :Dies funktioniert auf Dateisystemen, die Copy-on-Write ( reflink ) unterstützen, im Moment hauptsächlich BTRFS. Die XFS-Reflink-Implementierung befindet sich in der Entwicklung [1] [2] .
quelle
Linux hat einen Systemaufruf, mit dem Userspace-Prozesse den Kernel anweisen können, beim Schreiben von Kopien von Dateien Kopien anzufertigen. Mit FICLONERANGE und FICLONE, die als Optionen für ioctl verwendet werden, können Kopien von Dateien und Bereichen innerhalb von Dateien erstellt werden.
Dies wird von cp --reflink verwendet, um die Kopien zu erstellen, sofern das Dateisystem dies unterstützt.
quelle
Wenn Sie keinen Systemaufruf für
cp
(oder zumindest zum Kopieren eines Blocks) einführen , kann das Betriebssystem nur schwer feststellen, dass die Daten, die dascp
Programm schreiben wird , mit den Daten übereinstimmen, die es gerade aus einem anderen Block gelesen hat. Darüber hinaus wäre ein zusätzlicher Aufwand erforderlich, um das Szenario "Mehrere Dateien teilen sich die gleichen Blöcke" zu verwalten. Große ähnliche Dateien, die sich nur in wenigen Blöcken unterscheiden, kommen selten vor. Es ist also insgesamt billiger, nur diese Blöcke zu kopieren und dann diesen Verwaltungsaufwand allen Dateien hinzuzufügen .Wenn Sie nun Dateien (viele von ihnen) durch Hinzufügen eines weiteren Klons / Snapshots des Dateisystems in BTRFS "kopieren", sieht die Situation anders aus: Jetzt haben Sie alle Dateien im Dateisystem "kopiert" und alle Änderungen an Sie werden beim Schreiben kopiert. Dies existiert, aber nicht in ext4.
"Journalling" ist ein völlig unabhängiges Konzept, es sind die Verwaltungsstrukturen für die Dateien, die zählen.
quelle