2011-07-07 03:30:57 +0000 2011-07-07 03:30:57 +0000
100
100

Kopieer de hele hiërarchie van het bestandssysteem van de ene schijf naar de andere

Ik wil graag de hele hiërarchie van het bestandssysteem van de ene schijf naar de andere kopiëren…dat wil zeggen de inhoud van elke map en ook gewone bestanden in Linux platform. Ik zou graag willen weten wat de beste manier is om dat te doen met mogelijk Linuxes ingebouwde functies. Het bestandssysteem is een ext familie.

Antwoorden (11)

208
208
208
2011-07-07 03:36:43 +0000

Wat u wilt is rsync .

Dit commando kan worden gebruikt om een map te synchroniseren, en ook om het kopiëren te hervatten als het halverwege is afgebroken. Het commando om één schijf te kopiëren is:

rsync -avxHAX --progress / /new-disk/

De opties zijn:

-a : all files, with permissions, etc..
-v : verbose, mention files
-x : stay on one file system
-H : preserve hard links (not included with -a)
-A : preserve ACLs/permissions (not included with -a)
-X : preserve extended attributes (not included with -a)

Om de kopieersnelheid te verbeteren, voeg -W (--whole-file) toe, om het berekenen van delta’s/diffs van de bestanden te vermijden. Dit is de standaard wanneer zowel de bron als de bestemming zijn opgegeven als lokale paden, aangezien het echte voordeel van rsync’s delta-overdracht algoritme het verminderen van netwerkgebruik is.

Overweeg ook om --numeric-ids toe te voegen om het mappen van uid/gid waarden door gebruiker/groepsnaam te vermijden.

56
56
56
2017-03-05 10:42:04 +0000

Michael Aaron Safyan’s antwoord houdt geen rekening met sparse files. De -S optie lost dat op.

Ook deze variant spamt niet met de voortgang van elk bestand en doet geen delta synchronisatie die de prestaties doodt in niet-netwerk gevallen.

Perfect voor het kopiëren van bestandssystemen van een lokale schijf naar een andere lokale schijf.

rsync -axHAWXS --numeric-ids --info=progress2
35
35
35
2011-07-07 03:42:40 +0000

Ik gebruik vaak

> cp -ax / /mnt

Ervan uitgaande dat /mnt de nieuwe schijf is die gemount is op /mnt en er geen andere mounts op / zijn.

de -x houdt het op het ene bestandssysteem.

Dit moet natuurlijk als root gedaan worden of met sudo.

Deze link heeft enkele alternatieven, waaronder de bovenstaande http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

6
6
6
2011-07-07 20:53:25 +0000

Voor een eenmalige lokale kopie van de ene schijf naar de andere, denk ik dat cp volstaat, zoals Wolfmann hier boven heeft beschreven.

Voor groter werk, zoals lokale of remote backups bijvoorbeeld, is rsync het beste.

Natuurlijk is rsync beduidend complexer in het gebruik.

Waarom rsync :

  • hiermee kun je schijf A of een deel daarvan kopiëren (gesynchroniseerd kopiëren) naar schijf B, met vele opties, zoals het uitsluiten van sommige directories van de kopie (bijvoorbeeld het uitsluiten van /proc).

  • Een ander groot voordeel is dat deze native tool de bestandsoverdracht bewaakt: bijvoorbeeld voor massale overdrachten, als de verbinding wordt onderbroken, gaat hij verder vanaf het breekpunt.

  • En last but not least, rsync gebruikt ssh connectie, dus dit staat je toe om op afstand gesynchroniseerde beveiligde “kopieën” te maken. Kijk eens naar de man page en hier voor enkele voorbeelden .

5
5
5
2014-02-06 06:11:42 +0000

Zoals Michael Safyan hierboven suggereert, heb ik rsync gebruikt voor dit doel. Ik stel voor om enkele extra opties te gebruiken om directories uit te sluiten die je waarschijnlijk niet wilt kopiëren.

Deze versie is vrij specifiek voor Gnome- en Debian/Ubuntu-gebaseerde systemen, omdat het submappen van de homedirectories van gebruikers bevat die specifiek zijn voor Gnome, evenals de APT pakketcache.

De laatste regel sluit elke map met de naam cache/Cache/.cache uit, wat voor sommige toepassingen te agressief kan zijn:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache
2
2
2
2012-03-19 23:53:05 +0000

Ik voeg twee nuttige dingen toe aan de thread re rsync: cypher veranderen, en --update gebruiken:

Zoals in Wolfman’s post, cp -ax is elegant, en cool voor lokale dingen.

Echter, rsync is ook geweldig. In aansluiting op Michael’s antwoord over -W, kan het veranderen van de cypher_ de dingen ook versnellen (lees wel over eventuele veiligheidsimplicaties).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

Er is enige discussie (en benchmarks) gaande over een trage CPU als de eigenlijke bottleneck, maar het lijkt me wel te helpen als de machine belast is met andere gelijktijdige dingen.

Een van de andere grote redenen om rsync te gebruiken in een grote, recursieve kopie zoals deze is vanwege de -u switch (of –update). Als er een probleem optreedt tijdens het kopiëren, kun je het herstellen, en rsync gaat verder waar het gebleven was (ik denk niet dat scp dit heeft). Als je het lokaal doet, heeft cp ook een -u optie.

(Ik weet niet zeker wat de implicaties zijn van –update en –whole-file samen, maar ze lijken voor mij altijd zinvol te werken bij dit soort taken)

Ik realiseer me dat dit geen draad is over de functies van rsync, maar enkele van de meest gebruikte die ik hiervoor gebruik zijn:

  • –delete-after etc (zoals Michael in de follow-up noemde), als je het nieuwe systeem terug wilt synchroniseren naar de oorspronkelijke plaats of iets dergelijks. En,
  • –exclude - voor het overslaan van directories/bestanden, voor gevallen als het kopiëren/creëren van een nieuw systeem naar een nieuwe plek, terwijl je de home directories van gebruikers overslaat, enzovoort (of je mounten homes van ergens anders, of je maakt nieuwe gebruikers aan, enzovoort).

Overigens, als ik ooit windows moet gebruiken, gebruik ik rsync van cygwin om grote recursieve kopieën te maken, omdat Explorer een beetje hersendood is omdat hij vanaf het begin wil beginnen (hoewel ik Finder in OS X nog erger vind)

2
2
2
2015-05-18 15:45:08 +0000

rsync

“Deze aanpak wordt beschouwd als beter dan het klonen van schijven met dd, omdat het toestaat dat een andere grootte, partitietabel en bestandssysteem wordt gebruikt, en ook beter dan het kopiëren met cp -a, omdat het meer controle toestaat over bestandspermissies, attributen, Access Control Lists (ACL’s) en uitgebreide attributen.”

Vanaf: https://wiki.archlinux.org/index.php/Fullsystembackupwithrsync

Man Page Here

2
2
2
2018-06-14 17:30:20 +0000

Zoals vermeld in de commentaren van juniorRubyist, zou de voorkeursaanpak hier het gebruik van dd moeten zijn. De belangrijkste reden is performance, het is een blok-voor-blok kopie in plaats van bestand-voor-bestand.

Het klonen van een partitie

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Het klonen van een hele schijf

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Referenties

  1. https://wiki.archlinux.org/index.php/disk_cloning
1
1
1
2019-01-27 21:53:49 +0000

‘dd’ is geweldig, maar ddrescue (apt install gddrescue) is nog beter. Als dd wordt onderbroken, is er geen manier om opnieuw te starten (nog een goede reden om rsync te gebruiken). Wanneer je ddrescue gebruikt met een logfile, houdt het bij welke blokken gekopieerd zijn.

Bij het back-uppen van een dual boot Windows/Linux systeem, gebruik ik ntfsclone voor de Windows partities en ddrescue voor de Linux partitie en dd voor de MBR. (Ik heb nog niet geprobeerd om een back-up te maken van een dual boot systeem met GPT/UEFI.)

Wat ik graag zou willen zien is een ddrescue tool die bestanden kan maken zoals ntfsclone waarbij niet-toegewezen ruimte wordt gemarkeerd met controletekens. Dit maakt de image niet direct mountbaar, maar zorgt er wel voor dat hij slechts zo groot is als de data die erin zit.

Iemand kom alsjeblieft met het ntfsclone “speciale image formaat” voor ddrescue…

1
1
1
2019-07-31 21:30:35 +0000

Ik heb de hier voorgestelde rsync commando’s geprobeerd maar uiteindelijk kreeg ik veel schonere en snellere resultaten met partclone . Unmount bron- en doelpartities en voer dan het volgende uit:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Dit voert de volgende stappen uit:

  1. Kloon (alleen de gebruikte delen van) de partitie
  2. zorg ervoor dat het bestandssysteem in orde is (resize2fs dwingt deze stap af)
  3. resize de partitie naar het nieuwe bestandssysteem

Bovenstaande werkt in het geval dat de doelpartitie even groot of groter is dan de bron. Als je doel kleiner is dan de bron (maar wel alle gegevens past), doe dan het volgende:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M krimpt het bestandssysteem tot de minimale grootte voordat je de gegevens gaat klonen.

Merk op dat partclone op de meeste systemen niet standaard geïnstalleerd is. Gebruik een live distro zoals clonezilla of installeer partclone vanuit je distros pakketbeheerder (apt-get install partclone op debian-gebaseerde sytsems).

0
0
0
2015-08-07 18:04:55 +0000

rsync is de perfecte oplossing zoals hierboven uitgelegd.

Ik zou gewoon -S toevoegen aan “handle sparse files efficiently” voor het geval er een docker devicemapper volume of iets dergelijks moet worden gekopieerd.