• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateien mit Zeitstempel und Rechten kopieren

pospiech

Hacker
Ich möchte User Daten von einer Platte auf einer andere kopieren.
Dabei sollen Zeitstempel und Rechte erhalten werden.

Ich habe jetzt folgendes ausprobiert:
Code:
tar cpf - /media/stuff/MP3z/ | (cd /media/stuff2/Musik/ ; tar xpfv -)
(mit der Musik um es zu testen)

Das macht aber nicht das was ich möchte. Das legt nämlich folgendes Verzeichnis an:
/media/stuff2/Musik/media/stuff/MP3z/
und setzt die Rechte falsch: mit root, statt dem User, wenn als root gestarted.

Wie ginge es dann richtig?
 
Wenn es einfach nur ums Kopieren geht, schau dir mal die Option -a (--archive) des Befehls cp an. Diese sorgt für das gewünschte Ergebnis. Wenn direkt verschoben werden soll, wäre die Option --backup des Befehls mv auch nicht verkehrt. Und selbst mit rsync sollte es funktionieren.
 
A

Anonymous

Gast
pospiech schrieb:
Das legt nämlich folgendes Verzeichnis an:
/media/stuff2/Musik/media/stuff/MP3z/
und setzt die Rechte falsch: mit root, statt dem User, wenn als root gestarted.
zeig uns doch mal bitte die Ausgabe von "mount"
Das Verzeichnis "/media/........." sieht mir verdächtig nach eingehängten Filesystemen ohne echte Linuxrechte aus.


robi
 
OP
P

pospiech

Hacker
robi schrieb:
pospiech schrieb:
Das legt nämlich folgendes Verzeichnis an:
/media/stuff2/Musik/media/stuff/MP3z/
und setzt die Rechte falsch: mit root, statt dem User, wenn als root gestarted.
zeig uns doch mal bitte die Ausgabe von "mount"
Das Verzeichnis "/media/........." sieht mir verdächtig nach eingehängten Filesystemen ohne echte Linuxrechte aus.
das sind alles ext3 Systeme:

/dev/sda9 on /media/stuff type ext3 (rw)
/dev/sdb7 on /media/stuff2 type ext3 (rw,acl,user_xattr)
Matthias
 
OP
P

pospiech

Hacker
Geier0815 schrieb:
Wenn es einfach nur ums Kopieren geht, schau dir mal die Option -a (--archive) des Befehls cp an. Diese sorgt für das gewünschte Ergebnis.
dabei bleiben weder die Rechte, noch die Zeitstempel erhalten.

Original:
matthias:/media/stuff/MP3z # ll
insgesamt 16
drwxr-xr-x 11 matthias users 4096 11. Jul 2006 Aussortiert

Kopie: (mit cp -ra)
matthias:/media/stuff2/Musik # ll
insgesamt 4
drwx------ 4 root root 4096 17. Okt 14:22 Aussortiert

Also ist hier weder der User, die Rechte noch der Zeitstempel erhalten worden.
 
OP
P

pospiech

Hacker
ein
Code:
tar c --preserve  --same-owner /media/stuff/MP3z/Aussortiert | tar xv --preserve  --same-owner

scheint zu funktionieren. Die Rechte und die Zeit werden für jedes Verzeichnis allerdings erst nach dem kompletten Entpacken geändert.
Nur das Verzeichnis ist noch immer falsch.
 
A

Anonymous

Gast
Wenn wir noch bei weiteren Vorschlägen sind.
solange keine ACLs im Spiel sind gehts auch recht effektiv als root auch mit cpio
Code:
cd QUELLE
find | cpio -pdum /PATH/ZIEL
Hat den Vorteil man kann bei find eventuell filtern was man wirklich kopieren will und bei cpio wenn gewünscht noch mit einer größeren Blockgröße (zB -C 65536 ) versuchen das ganze noch etwas zu beschleunigen.

robi
 
Warum fummelt ihr immer noch mit Pipes rum? Das mit der Blockgröße ist natürlich großer Bullshit, weil -C in Anwesenheit von -p ignoriert wird und Dateien somit in 512-Byte-Schritten gelesen werden, wie sich mit strace feststellen läßt. (Auch im Handbuch findet sich auf der Seite zum pass-Modus, also -p, keine Nennung von -C.) Also bevor man Behauptungen aufstellt, doch bitte zusehen, dass die auch richtig sind.
 
pospiech schrieb:
Geier0815 schrieb:
Wenn es einfach nur ums Kopieren geht, schau dir mal die Option -a (--archive) des Befehls cp an. Diese sorgt für das gewünschte Ergebnis.
dabei bleiben weder die Rechte, noch die Zeitstempel erhalten.

Original:
matthias:/media/stuff/MP3z # ll
insgesamt 16
drwxr-xr-x 11 matthias users 4096 11. Jul 2006 Aussortiert

Kopie: (mit cp -ra)
matthias:/media/stuff2/Musik # ll
insgesamt 4
drwx------ 4 root root 4096 17. Okt 14:22 Aussortiert

Also ist hier weder der User, die Rechte noch der Zeitstempel erhalten worden.
Schrieb ich irgendetwas von -ra? Ich schrieb was von -a und damit klappt es zumindest bei mir auch wunderbar.
 
A

Anonymous

Gast
jengelh schrieb:
Das mit der Blockgröße ist natürlich großer Bullshit, weil -C in Anwesenheit von -p ignoriert wird und Dateien somit in 512-Byte-Schritten gelesen werden, wie sich mit strace feststellen läßt. (Auch im Handbuch findet sich auf der Seite zum pass-Modus, also -p, keine Nennung von -C.) Also bevor man Behauptungen aufstellt, doch bitte zusehen, dass die auch richtig sind.
Oh :eek:ps: ich vergaß, da hat ja GNU einiges vereinfacht und dort beschlossen es gibt nur 512 und Fertig. Kommt davon wenn man aus der UNIX Richtung zu Linux kommt. :???: Darüber sind Andere aber auch schon gestolpert http://www.mail-archive.com/bug-cpio@gnu.org/msg00123.html - Ist schon seit mindestens 15 Jahre dort im GNU Quelltext und leider immer noch in der aktuellen 2.10 GNU-Version enthalten, und wird wohl dort auch nie mehr entfernt. Hat wohl nur noch niemand bemerkt das sich die Datenträger sich in den letzten 20 Jahren etwas vergrößert haben und das man jetzt auch noch ein bischen mehr Auswahl hat.
Wenn man das aus der 2.9 zB rauspatcht ( sind nur wenige Zeilen betroffen) und mit der Orginal 2.9 GNU Version als Vergleich unter identischen Voraussetzungen zB wie folgt testet.
Code:
#!/bin/bash
for CPIO in  /usr/bin/cpio /usr/local/bin/cpio
do
  umount /home
  mount /home
  cd /home/rob
  mkdir /home/test3
  time find | $CPIO -pdum -C 4096 /home/test3
  cd /
  rm -rf /home/test3
done
sieht man bei Blockgröße identisch der Blockgröße des Filesystems
Code:
1376713 blocks

real    6m51.517s
user    0m13.941s
sys     3m43.362s
1376713 blocks

real    5m40.410s
user    0m8.045s
sys     1m16.505s
in diesem Test hier zB einen winzig kleinen Zeitgewinn von fast 20%

bei -C 65536 gibt der selbe Test dann
Code:
real    4m58.531s
user    0m16.333s
sys     1m25.661s
also nochmal ca. 8 % zusätzlich. Das Potential ist also da, nur eben nicht in der GNU Version. Nur wer (ge)braucht heute überhaupt noch cpio ? Und dann noch zum kopieren ? Ich bin scheinbar der Einzige hier der sich die Optionen von rsync niemals merken wird. ;)


robi
 

ManfredP

Newbie
pospiech schrieb:
Ich möchte User Daten von einer Platte auf einer andere kopieren.
Dabei sollen Zeitstempel und Rechte erhalten werden.

Ich habe jetzt folgendes ausprobiert:
Code:
tar cpf - /media/stuff/MP3z/ | (cd /media/stuff2/Musik/ ; tar xpfv -)
(mit der Musik um es zu testen)

Das macht aber nicht das was ich möchte. Das legt nämlich folgendes Verzeichnis an:
/media/stuff2/Musik/media/stuff/MP3z/
und setzt die Rechte falsch: mit root, statt dem User, wenn als root gestarted.

Wie ginge es dann richtig?
Hallo,
ich kenne den Code eher so:
Code:
(cd /media/stuff/MP3z/ ; tar cf - .) | (cd /media/stuff2/Musik/ ; tar xvf -)
Da geht das dann so, wie geplant. Das Problem ist offenbar, dass tar immer von seinem eigenen Working-Directory aus arbeitet. Das heist, für tar kopierst Du ein Verzeichnis, das tief im Baum sitzt, komplett. Also wird der gesamte Pfad dahin mitkopiert. Durch den cd vorne setzt Du das Working directory für den tar neu und er kopiert eben dieses. Also gibt es auch keine Pfade zu kopieren.

Ergänzung:
Wenn unter dem zu kopierenden Directory irgendwo noch ein Mount-Point liegt und dessen Inhalt (also von dern anderen Platte/Partition) soll nicht mitkopiert werden, ändert sich der Code so:
Code:
(cd /media/stuff/MP3z/ ; tar -c --one-file-system -f - .) | (cd /media/stuff2/Musik/ ; tar xvf -)
Nur für den Fall, dass man mal eine Partition mit allem drum und dran verlagern muss, weil sie zu klein wurde und da ist schon ein Teil ausgelagert. Aber das nur nebenbei.

Tschüß

Manfred
 
Oben