Tar | tar neden cp 'den daha hızlı?


10

Bir dizini özyinelemeli olarak kopyalamak için, bir dizini tarpaketlemek ve daha sonra çıktıyı tarpaketten çıkarmak için bir başkasına borulamak için cp -r(veya cp -a) kullanmaktan çok daha hızlı görünüyor .

Bu neden? Ve neden cpkaputun altında aynı şekilde yapılarak daha hızlı hale getirilemiyor?

Düzenleme: On binlerce dosya ve klasör içeren, derin iç içe, ama sadece yaklaşık 50 MB toplam büyük bir dizin yapısı kopyalamaya çalışırken bu farkı fark ettim. Alakalı olup olmadığından emin değilim.


Bu ilginç bir soru. Burada bazı cevaplar bulabilirsiniz: stackoverflow.com/questions/316078 ve burada: unix.stackexchange.com/questions/66647
Teresa e Junior

Yanıtlar:


6

Cptüm dosyalar üzerinde bir döngü içinde open-read-close-open-write-close yapar. Böylece bir yerden okumak ve başka bir yere yazmak tamamen serpiştirilmiş olur. Tar|tarayrı işlemlerde okuma ve yazma işlemlerini gerçekleştirir ve buna ek olarak tar, birden fazla dosyayı 'bir defada' okumak (ve yazmak) için birden çok iş parçacığı kullanır, bu da disk denetleyicisinin aynı anda birçok veri bloğunu almasını, arabelleğe almasını ve depolamasını sağlar. Sonuçta, tarher bileşenin verimli çalışmasına izin verirken cp, sorunu ayrı, verimsiz küçük parçalar halinde bozar.


Bunun tüm cpuygulamalar için gerçekten geçerli olduğunu söyleyebilir miyiz ? Bunun doğru olduğunu nereden biliyoruz? Ve neden bu cpkadar verimsiz bir şekilde yazılsın ki? Dosya kopyasının herhangi bir ders kitabı uygulaması, bir seferde n baytlık bir tamponu okur ve başka bir n bayt okumadan önce bunları diske yazar. Ama diyorsun cpki bütün kopyayı yazmadan önce bütün dosyayı okuyor musun?
LarsH
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.