Ich verwende CentOS 5.5 und möchte eine große Anzahl von Ordnern innerhalb eines Volumes verschieben , wobei deren Größe erhalten bleibt mtime
.
Die beste Lösung, die ich finden konnte, ist wie folgt:
cp -p -r source/data target/
rm -rf source/data
Mit mehr als 1 TB Daten auf einer NFS-Freigabe dauert das Kopieren ewig. Ich möchte nicht kopieren. Ich möchte sofort umziehen.
Wenn ich einen Ordner mit verschiebe mv source/data target/
, wird die mtime
Uhrzeit des Ordners (nicht der Dateien) auf die aktuelle Uhrzeit eingestellt. Dies liegt daran, dass der Inhalt des Ordners, den ich verschiebe, durch diesen Vorgang geändert wird (der ..
Eintrag verweist auf einen anderen Inode).
Ich habe mir ein Shell-Skript ausgedacht, das ich aufgerufen habe mv_preserve_mtime.sh
:
#!/bin/bash
# Moves source folder to target folder.
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2
Nun, das hat auch nicht funktioniert. Der Ordner mtime
wird wiederhergestellt, aber alle Ordner in dem Ordner, den ich verschiebe (nur die Ordner mit einer Tiefe von 1 Ebene) werden mtime
aus Gründen, die ich nicht verstehe, zurückgesetzt.
Hat jemand eine richtige, effiziente und korrekte Lösung?
mv
Schritt, der Ärger verursacht. Der NFS-Server ist eigentlich ein NetApp-Speicher, ich weiß so gut wie nichts über seine Interna.
touch
hätte das funktionieren sollen. Übrigens wäre ein tragbarer Weg touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
.
stat
war nicht tragbar.
touch
nicht geklappt hat. Ist es dermv
Schritt oder dertouch
Schritt, der die Zeit der Unterverzeichnisse ändert? Welches Betriebssystem befindet sich auf dem NFS-Server und (falls bekannt) welcher Dateisystemtyp?