
Wenn ich eine Datei mit der Option „Reflink“ kopiere, z. B.
cp --reflink foo bar
wie und in welcher Phase der Ausführung von cp bestimmt wird, ob das darunterliegende Dateisystem COW unterstützt. Ich habe versucht, nachzuschauen, coreutils/src/cp.c
konnte aber weder den spezifischen Systemaufruf/ioctl noch eine andere Methode finden, die die COW-Fähigkeit bestimmt und dementsprechend mit der Ausführung von cp fortfährt/Fehler meldet:
cp: „bar“ konnte nicht von „foo“ geklont werden: Ungültige Adresse
Kurz gesagt, ich möchte herausfinden, wie die Auflösung der --reflink=auto
Option erfolgt.
Antwort1
DerCoderuft eine Funktion namensclone_file
wenn die Reflink-Option auf „immer“ oder „auto“ eingestellt ist, und greift auf das Kopieren zurück, wenn Reflink auf „immer“ eingestellt ist (und geht direkt zum Kopieren über, wenn Reflink ausgeschaltet ist). clone_file
ruft denBTRFS_IOC_CLONE
ioctl. Es wird also nicht getestet, ob das System Copy-on-Write unterstützt, sondern es wird einfach die BTRFS-Methode ausprobiert.