Dosya sistemi hiyerarşisinin tamamını bir sürücüden diğerine kopyalayın


95

Tüm dosya sistemi hiyerarşisini bir sürücüden diğerine kopyalamak istiyorum ... her dizinin içeriğini ve Linux platformundaki normal dosyaları. Olası Linux'larda yerleşik işlevlerle bunu yapmanın en iyi yolunu bilmek minnettar olur. Dosya sistemi harici bir ailedir.


1
Umm ... aşk nerede dd? dd if=/dev/sda1 of=/dev/sdb1 bs=4096
juniorRubyist

dd için @juniorRubyist +1. Bunu her zaman kullanırım. Ama hangi bayraklar kullanılacak? Kullandığım conv=notrunc,noerror,sync.
BeniBela,

dd2 nedenden ötürü -1 : Birincisi, monte edilmiş bir dosya sisteminin blok düzeyinde bir kopyasını yapmak kötü bir fikirdir /ve ikincisi dd, /bootve benzeri dosya sistemi içine monte edilmiş kaynaklardan veri kopyalamaz /home.
Eric,

Yanıtlar:


33

Sık sık kullanırım

> cp -ax / /mnt

/ Mnt varsayımı / mnt üzerine kurulu yeni disktir ve / üzerinde başka bir bağ yoktur.

-x onu bir dosya sisteminde tutar.

Bu elbette root olarak veya sudo kullanılarak yapılmalıdır.

Bu bağlantının yukarıdaki bağlantıyı da içeren bazı alternatifleri var.

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html


Bu ölü yaşlı cevabı ise yine genellikle tüm şeyler içinde sunmak kopyalamak İSTEMİYORSANIZ fazlalaştı /hariç yani /dev, /sys, /procvb Dolayısıyla o vermeden önce cpben (aynı zamanda rsync) daha iyi yaklaşımlar ürünleri aramanızı öneririz
Marcin Orlowski

2
@MarcinOrlowski WolfJM'nin -xbayrağını kullanması, bahsettiğiniz sentetik dosya sistemlerinin kopyalanmayacağı anlamına gelir.
Jim L.,

192

İstediğin şey rsync .

Bu komut bir klasörü senkronize etmek ve yarı yarıya kesildiğinde kopyalamaya devam etmek için kullanılabilir. Bir diski kopyalamak için kullanılan komut:

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

Seçenekler şunlardır:

-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)

Kopyalama hızını artırmak için , dosyaların delta / fark hesaplamasını önlemek için -W( --whole-file) ekleyin . Hem kaynak hem de hedef yerel yollar olarak belirtildiğinde bu varsayılandır, çünkü rsync'in delta transfer algoritmasının asıl faydası ağ kullanımını azaltmaktır.

Ayrıca --numeric-ids, kullanıcı / grup adına göre kullanıcı kimliği / gid değerlerini eşlememek için eklemeyi düşünün .


1
Genius, teşekkür ederim. BTW, kullanmaya son verdim rsync -avxHAWX --numeric-ids --progress / mnt/ama yapmalıydım rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out. Çıktının terminale dökülmesinin süreci yavaşlattığından şüpheleniyorum. : D
Chris K,

28
--info=progress2yerine --progressyerine bireysel dosyaları (için çizgilerin milyonlarca) arasında, genel ilerleme verir, büyük transferler için yararlıdır.
Florian

3
Ben değiştirmek zorunda Xve Aile Egenişletilmiş özellikler ve ACL kapsamındadır çünkü Ebenim mac. Test edildi:rsync version 2.6.9 protocol version 29
Jonathan Komar

1
Ek olarak > ~/rsync.out, 2> ~/rsync.errhataları ayrı bir dosyaya kaydeder.
Aneel

2
Eğer başka bir klasörden daha kopyalama yapıyorsanız /, kaynak dizininde bir bölü sahip (veya değil) bir fark yaratır unutmayın: rsync source/ dest/kopyalar her şeyi içine source/kadar dest/iken rsync source dest/kopyalar klasör sourceiçine içine ve her şey dest/.
yarı extrinsik

45

Michael Aaron Safyan'ın cevabı seyrek dosyaları hesaba katmaz. -Sseçenek bunu düzeltir.

Ayrıca bu değişken, ilerleyen her bir dosya için spam yapmaz ve ağ dışı durumlarda performansı düşüren delta senkronizasyonu yapmaz.

Dosya sistemini bir yerel sürücüden başka bir yerel sürücüye kopyalamak için mükemmeldir.

rsync -axHAWXS --numeric-ids --info=progress2

1
İnanılmaz. Bu gerçekten iyi bir iş yapıyor
Gildas

1
Bu kabul edilen cevap olmalı, harika çalışıyor. Örnek55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Drew

1
<3 bu mükemmel
Tim Strijdhorst

6

Bir tek sürücüden diğerine tek bir çekim yerel kopya için, yukarıda yukarıda belirtilen Wolfmann tarafından açıklandığı gibi cp yeterli.

Örneğin yerel veya uzak yedeklemeler gibi daha büyük işler için en iyisi rsync'dir .

Tabii ki, rsync kullanımı oldukça karmaşıktır.

Neden rsync:

  • Bu, A sürücünüzün tümünü veya bir kısmını B sürücüsüne kopyalamanıza (senkronize kopya) izin verir, örneğin bazı dizinleri kopyadan çıkarmak gibi (örneğin / proc hariç) birçok seçenek.

  • Bir diğer büyük avantaj, bu yerel aracın dosya aktarımını izlemesidir: örneğin, büyük aktarmalar için, bağlantı kesilirse, kesme noktasından devam eder.

  • Ve son fakat en az olmayan, rsync ssh bağlantısını kullanır, bu nedenle uzaktan senkronize güvenli "kopyalar" atacağınız. A göz kılavuz sayfasında yanı sıra bazı örnekler için buraya .


4

Michael Safyan'ın yukarıda söylediği gibi, rsyncbu amaç için kullandım . Muhtemelen kopyalamak istemediğiniz dizinleri hariç tutmak için bazı ek seçenekler kullanmanızı öneririz.

Bu sürüm, Gnome ve Debian / Ubuntu tabanlı sistemlere oldukça özgüdür, çünkü kullanıcıların Gnome'a ​​özgü ana dizinlerinin alt dizinlerini ve APT paket önbelleğini içerir.

Son satır, bazı kullanımlar için çok agresif olabilen önbellek / önbellek / .cache adındaki herhangi bir dizini hariç tutar :

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

Re rsync dizisine iki yararlı bit eklemek: Şifreyi değiştirmek ve kullanmak --update:

Wolfman'ın görevine göre, cp -axyerel şeyler için zarif ve havalı.

Ancak, rsyncaynı zamanda harika. Ayrıca Michael'ın cevabı yeniden üzere -W, bir şifreyle değişen da hızlandırmak (gerçi herhangi bir güvenlik etkileri üzerinde okuma) olabilir.

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

Orada bazı tartışmalar (ve kriterler) fiili darboğaz olma yavaş CPU hakkında yer etrafında, ama makine başka eşzamanlı şeyler yapıyor yukarı yüklendiğinde bana yardım görünüyor.

Bu gibi büyük, özyinelemeli bir kopyada rsync'i kullanmanın diğer büyük nedenlerinden biri de -u anahtarının (veya --update ) olmasıdır. Kopyalama sırasında bir sorun varsa, düzeltebilirsiniz ve rsync bıraktığı yerden devam edecektir (scp'nin buna sahip olduğunu sanmıyorum). Yerel olarak yapıyorsanız, cp ayrıca -u anahtarına da sahiptir.

(-Update ve --whole-file'in beraberindeki sonuçların ne olduğundan emin değilim, ama her zaman bu tür görevlerde benim için mantıklı bir şekilde çalışıyorlar)

Bunun rsync'in özellikleriyle ilgili bir konu olmadığını biliyorum, ancak bunun için kullandığım en yaygın olanlardan bazıları:

  • --delete-after etc (takipte Michael'ın söylediği gibi), eğer yeni sistemi tekrar orijinal yerine ya da onun gibi bir şeyle senkronize etmek istiyorsanız. Ve,
  • --exclude - dizinleri / dosyaları atlamak için, yeni bir yere yeni bir sistemi kopyalamak / oluşturmak, örneğin kullanıcı ana dizinlerini atlamak vb. (örneğin, başka bir yerden evler ekliyorsanız veya yeni kullanıcılar oluşturuyorsanız).

Bu arada, eğer pencereleri kullanmak zorunda kalırsam, büyük özyinelemeli kopyalar yapmak için cygwin'den rsync kullanıyorum, çünkü kaşifin beynin ölmüş başlangıçtan başlamak istediği hafif beyin ölümü yüzünden (Finder'ın OS X'i daha kötü bulmasına rağmen)


2

rsync

"Bu yaklaşım, farklı bir boyut, bölüm tablosu ve dosya sisteminin kullanılmasına izin verdiğinden ve cp -a ile kopyalamaktan daha iyi olduğundan, dosya izinleri üzerinde daha fazla kontrol sağladığından, dd ile disk kopyalamaktan daha iyi olarak kabul edilir. , Erişim Kontrol Listeleri (ACL'ler) ve genişletilmiş öznitelikler. "

Gönderen:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

Man Page Here


2

JuniorRubyist yorumlarında da belirtildiği gibi, burada tercih edilen yaklaşım kullanmak olmalıdır dd. Ana sebep performanstır, dosya dosya yerine blok blok kopyadır.

Bir bölümü klonlamak

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

Tüm diski klonlamak

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

Referanslar

  1. https://wiki.archlinux.org/index.php/disk_cloning

dd2 nedenden ötürü çok kötü bir fikir: ilk önce monte edilmiş bir dosya sisteminin blok düzeyinde bir kopyasının yapılması (bu durum için geçerli /) muhtemelen hedef dosya sistemi hatalarıyla sonuçlanacak ve ikincisi ddiçine monte edilmiş kaynaklardan veri kopyalamayacak dosya sistemi /bootve benzeri /home. Bağlantınız disk klonlama için geçerlidir, "dosya hiyerarşisi" klonlaması için geçerli değildir
Eric

1

'dd' harika, ama ddrescue (apt install gddrescue) daha da iyi. Gg kesilirse, yeniden başlatmanın bir yolu yoktur (rsync kullanmak için başka bir iyi neden). Kurtarma dosyasını bir logfile ile birlikte kullandığınızda, hangi blokların kopyalandığını takip eder.

İkili önyükleme Windows / Linux sistemini yedeklerken, Windows bölümleri için ntfsclone, Linux bölümü için ddrescue ve MBR için dd kullanıyorum. (GPT / UEFI kullanarak çift önyükleme sistemini yedeklemeyi denemedim.)

Görmek istediğim şey, ayrılmamış alanın kontrol karakterleriyle işaretlendiği yerde, ntfsclone gibi dosyalar oluşturabilen bir kurtarma aracıdır. Bu, görüntüyü doğrudan monte edilmez hale getirir, ancak yalnızca içerilen veriler kadar büyük olmasına izin verir.

Birisi lütfen ddrescue için ntfsclone "özel resim formatı" ile gelip ...


0

rsync yukarıda açıklandığı gibi mükemmel bir çözümdür.

Ben sadece eklersiniz -S"için seyrek dosyalar verimli şekilde kopyalanacak hacim veya benzeri devicemapper bir liman işçisi olduğu durumda".


0

Burada önerilen rsync komutlarını denedim, ancak sonuçta daha temiz ve daha hızlı sonuçlar aldım partclone. Kaynak ve hedef bölümlerini çıkarın ve ardından aşağıdakileri çalıştırın:

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

Bu, aşağıdaki adımları gerçekleştirir:

  1. Bölümün klonlanması (yalnızca kullanılmış bölümleri)
  2. dosya sisteminin uygun olduğundan emin olun (resize2fs bu adımı zorlar)
  3. bölümü yeni dosya sistemine yeniden boyutlandır

Yukarıdakiler, hedef bölümün kaynaktan aynı boyutta veya daha büyük olması durumunda çalışır. Hedefiniz kaynaktan küçükse (ancak tüm verilere uyarsa), aşağıdakileri yapın:

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 Veriyi klonlamadan önce dosya sistemini minimum boyuta kadar küçültür.

partcloneÇoğu sistemde varsayılan olarak yüklenmediğini unutmayın . Clonezilla gibi canlı bir distro kullanın veya distros paket yöneticinizden partclone yükleyin ( apt-get install partclonedebian tabanlı sistemlerde).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.