Wie kann ich Windows-Dateiattribute beim Kopieren von Dateien unter Linux beibehalten?

8

Ich verwende ein benutzerdefiniertes Bash-Skript, das auf einem Linux-Computer ausgeführt wird, um FAT32-formatierte USB-Laufwerke massenweise zu duplizieren.

Ich muss Windows-Dateiattribute wie "versteckt" beibehalten.

Ich verwende rsync(oder ddmit findund mkdirin einer neueren Version, um die E / A-Synchronisierung für eine bessere Stabilität und eine optimale Bandbreitennutzung zu erzwingen).

Ich habe blind versucht -Xund -Agewechselt rsync, dass einige Dateiattribute erhalten bleiben sollen, aber sie scheinen für Windows-Dateiattribute nicht zu funktionieren.

Gibt es eine Möglichkeit, Windows-Dateiattribute in einer Linux-Umgebung zu lesen und zu schreiben?

Ich könnte sie nach dem Kopieren anwenden, wenn es keinen einfacheren Weg gibt.

Ich möchte nicht ddein komplettes Quelldateisystem verwenden, da dies nicht optimiert wird, insbesondere wenn Sie Hunderte von Laufwerken schreiben müssen. Manchmal haben die Laufwerke eine Kapazität von 16 GB und nur wenige GB Dateien - und ein Dummkopf ddkopiert alle 16 GB, was viel zu lange dauert, bis dies in der Produktion funktioniert.

Ich habe im Web gesucht, aber es sieht so aus, als hätten erweiterte Linux-Attribute nichts mit Windows-Dateiattributen zu tun, und ich habe keine Möglichkeit gefunden, diese Informationen zu lesen und zu schreiben (oder sie einfach mit den Dateien zu kopieren).

unfa
quelle
Ist "versteckt" der einzige, den Sie bewahren möchten, oder gibt es einen anderen?
M. Becerra
2
Interessant. Exportiert der Linux-VFAT-Treiber diese Attribute überhaupt auf eine Art und Weise, die geschrieben werden könnte?
Ilkkachu
@ M.Becerra - momentan brauche ich nur das "versteckte" Attribut und ich werde wahrscheinlich in Zukunft kein anderes mehr brauchen.
unfa
@StephenKitt - Ich muss das aus dem Quelldateisystem lesen und diese Informationen auf meine neuen duplizierten Dateisysteme übertragen können. Ich denke, eine sehr grobe Methode, um dieses Problem zu überschreiben, wäre, das Quelldateisystem mit Null zu füllen (um den leeren Speicherplatz zu bereinigen), ein komprimiertes dd-Image zu erstellen und dieses auf die neuen Laufwerke zu schreiben, wobei spärliche Teile übersprungen werden, um zu vermeiden, dass leere Teile des Bild. Das ist ein bisschen Bruteforce und ich denke, es hätte keine vergleichbare Leistung rsyncoder manuelle find/ mkdir/ ddBedienung, die ich gerade benutze.
unfa
1
@ilkkachu Ja, es gibt zwei Ioctls, mit denen FAT-Attribute abgerufen und festgelegt werden können. Siehe fatattrfür eine Implementierung eines Tools, das diese verwendet.
Stephen Kitt

Antworten:

1

Ich kann mir ein paar Möglichkeiten vorstellen, damit umzugehen.

Die erste besteht darin, Mtools zum Kopieren der Dateien zu verwenden. Damit dies funktioniert, müssen Sie "Laufwerke" definieren (z. B. A: für das Quelllaufwerk, B: für das Ziel). Anschließend sollten Sie in der Lage sein, alles zu kopieren und dabei Attribute und Zeitstempel beizubehalten

mcopy -s -p -m a: b:

(ungetestet).

Die zweite besteht darin, die Attribute mit fatattr(die in den meisten Distributionen verfügbar sind) nachzubearbeiten. Es behandelt gemountete Dateisysteme, sodass Sie Ihre Dateisysteme auf die gleiche Weise wie derzeit kopieren und dann fatattralle FAT-Attribute aller Quelldateien auflisten und diese analysieren, um anzuweisen fatattr, die Attribute für die Zieldateien entsprechend festzulegen .

Stephen Kitt
quelle
Ich hatte Probleme mit dem mcopyAbsturz beim Versuch, den Ordner "System Volume Information" zu kopieren, was einen GCC-Fehler "Stack Smashing Detected" auslöste. Also werde ich es versuchen fatattr.
unfa
Sie haben "System Volume Information" in einem FAT32-Dateisystem? Ich dachte, das sei nur eine NTFS-Sache.
Stephen Kitt
Ich müsste zurückschauen.
unfa