Neden scp kopyalaması gerekenden daha fazla byte kopyalıyor?


1

Xcode.app 'ı bir bilgisayardan diğerine scp kullanarak kopyalıyorum ve dosya boyutundan daha fazla kopyalamış görünüyor ve hala kopyalanıyor. 4.94GB (Sıkıştırmadım), ancak hedef makinedeki nettop 7430 MB’nin şu ana kadar kopyalandığını ve henüz durmadığını söylüyor. Kaynak makinedeki nettop, kopyaya karşılık gelen hiçbir aktiviteye sahip değildir.

Kullandığım komut

scp -rp paul@192.168.16.178:/Applications/Xcode.app /Applications/

Hedef makinedeki nettop:

ssh.636                                                                                         7662 MiB          21 MiB   178 KiB  2029 KiB  1044 B
tcp4 192.168.16.108:50145<->192.168.16.178:22                    en1     Established        7662 MiB          21 MiB   178 KiB  2029 KiB  1044 B    13.53 ms   512 KiB   128 KiB        BE

Dosya sadece 4,94 GB iken neden 7 GB'ın üzerinde kopyalandığına dair bir fikriniz var mı? Kaynak ve hedef makineler, bir wifi yerel ağ üzerinden kopyalayan iMac ve Mac mini'dir .

Güncelleme : Kopyalama işlemi bitmiştir ve hedef makinedeki Xcode'un boyutunu kontrol ettiğimde, 10.07GB'lık bir rakam. Kopyalama sırasında Xcode'ın boyutunun nasıl iki katına çıkması gerektiğini anlamıyorum. Tek teorim, .app dizinlerinin zaten sıkıştırılmış olması ve scp'nin onları sıkıştırması.

Şerefe!


2
Belki de Xcode.app dizininde kopyalanan sembolik linkler vardır (fakat kaynak makinede sayılmaz)?
mtak

Belki, du -Lsonuçlanan linklerle dosya boyutunu elde etmek için koşuyorum du: Too many symlinks at.
paulvs

Bu mtak'taki nokta oldu!
paulvs

Yanıtlar:


2

SCP protokolünün nasıl çalıştığını açıklayan bir sayfa . Kayda değer gerçek, yalnızca dosya ve dizinleri aktarabilmesidir; sembolik linkler için protokol desteği yoktur. Aslında, SCP her sembolik bağı gerçek bir dosya veya dizinmiş gibi ele alır.

Xcode.app kopyasını işletim sistemine göre 4.936.956.797 bayttır ve bul bana 7.499 sembolik bağlantısı olduğunu söyler. Biz tuzağa düşürebileceğini scp o yazar ne kadar veri görmek için Xcode.app kopyalamak gibi davranarak içine:

$ scp -rf Xcode.app < /dev/zero | wc -c
 8746268376

Ve tar ile aynı şeyi yapabiliriz :

$ tar cf - Xcode.app | wc -c
 5018552320

Tar sembolik bağları idare edebilir, bu yüzden sadece dizin yapısında olduğundan biraz daha fazla veri yazar. Scp sembolik bağları kaldıramaz ve her bağlantıyı gerçek bir dosyaya veya dizine genişletir.


+1. Bir kopya için tar (ve bağlantınız yavaş, ancak CPU'nuz hızlıysa gzip) öneririm, sonra kopyalayın, ardından alıcı tarafta açın. Rsync'in de sembolik bağları koruyabileceğine inanıyorum. @Paulvs'un bunu gerçekten uygun bağlantı link kopyaları ile tekrar yapması gerektiğine dikkat çekmek önemlidir - sadece çok fazla yer kaplamaktan öte, bu sembolik bağlantılar bir nedenden ötürü vardır, böylece birden fazla konum aynı dosyaya başvurabilir ve bu dosya değişir veya güncellenirse , güncellenmiş sürüme sembolik bağlantılar yoluyla da erişilebilir. Yapmazsan, bir gün çok dengesiz bir xcode ile bitebilirsin.
Jason C,

Mükemmel cevap @Kenster, gönderdiğiniz scp komutunu kullanarak hedef makineye ne geldiğiyle aynı boyuta sahip oldum. İlginç bir şekilde tar komutu, Finder'ın boyuttan daha büyük bir çıktı verdiğini söyler.
paulvs

Tar'ın biraz ek yükü var. Her dosya için 512 baytlık bir başlık ve ayrıca dosya içeriği olduğunu düşünüyorum. Sembolik bağlar temsil edilmek zorundadır. Bir uygulamanın boyutunu hesaplarken bulucunun nasıl sembolik bağları saydığını bilmiyorum. İlgileniyorsanız , Tar formatı burada açıklanmaktadır .
Kenster
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.