Birçok ayrı dosyaya dağıtılırsa aynı miktarda veri kopyalamak neden daha uzun sürer?


12

Bir klasörden diğerine 24Mb değerinde veri kopyalamanın yaklaşık 30 saniye sürdüğünü fark ettim çünkü (bunun sebebi olduğunu varsayıyorum) 1000'den fazla ayrı dosyaydı. 24 MB kopyalamak çok uzun sürmemelidir. Dosya sayısı neden farklı?

Windows 7'yi bir MacBook'da çalıştırıyorum (4GB ram, Intel (R) Core (TM) 2 Duo CPU P7450 @ 2.13GHz, 32 bit İşletim Sistemi)

EDIT: NTFS, sürücüde kullanılan dosya sistemidir

Yanıtlar:


5

HDD'nin tam bir aktarım hızı yoktur, uygun bakıma bağlıdır, yani parçalanmamış veya kötü sektörler vb.

HDD SATA 2 ise ve aynı bölüm ise, yalnızca veri aktarım hızıdır.

Aynı HDD'de iki bölüm varsa, veri yolu ve anakart arasında bu veri aktarımı gerekmez, yani arabelleğe yüklenir. (sonra hdd arabellek boyutuna bağlıdır.)

Ancak kopyalanan her dosya için, sistemin dizinini HDD'nin MFT'sinde (Ana Dosya Tablosu) tutması gerekir, bu da birçok dosyayı kopyalarsanız kopyalama işlemini yavaşlatır. Ve herhangi bir antivirüsünüz varsa, kopyalanan her dosyayı tarar. Microsoft arama dosyası dizine eklemeyi (veya başka bir dosya dizine ekleme hizmetini) etkinleştirdiyseniz, sonuç daha kötü olur.

Sanırım birçok dosyanın kopyasının daha yavaş olmasının başka nedenleri olmalı, ancak bunlar ana olmalı.


Virüsten koruma programını devre dışı bırakmak ayıklamayı 10 kat daha hızlı hale getirdi. Bundan sonra dosyaları virüs taraması yaptı.
16'da fat_mike

30

Dosya sayısı neden farklı?

Görünüşe göre yalnızca "bir dosya kopyalama" nın "verileri kopyala" yönüne odaklanıyorsunuz. Bir dosya sadece veriden daha fazlasıdır; dosya sistemindeki bir varlıktır . Bir dosyanın adı, nitelikleri ve izinleri vardır. Dosyayla ilgili bu ek bilgilerin tümü, "dosya kopyalandığında" verilerle birlikte çoğaltılmalıdır. Bu dosya sistemi ek yükünü gerçekleştirmek için önemli miktarda disk G / Ç'si vardır.

Genel bir dosya sisteminde bir (1) dosyayı kopyalama prosedürü şöyle olacaktır:

  • Kaynak dosyayı dosya sisteminde bulun. (A)
  • Diskten kaynak dosyanın dizin girdisini okuyun.
  • Okuma izinlerini doğrulayın.
  • Hedef dosyayı dosya sisteminde bulun. (B)
  • Hedef dizinde yazma izinlerini doğrulayın.
  • Yeni dosyayı yerleştirmek için gerekirse dizini genişletin. (C)
  • Diskteki dizini güncelleyin. (C1)
  • Ücretsiz blokları bulun, ayırın ve tabloyu tekrar güncelleyin. (D)
  • Dosya verilerini okuyun ve hedef dosyaya kopyalayın (örn. "Dosyayı" kopyalayın).
  • Yeni dosyanın dizin girişini (boyut ve saat) ile güncelleyin. (E)
  • Kaynak dizin girdisinin erişim zamanını güncelleyin. (F)

(a) Bu, en azından geçerli dizinde arama yapmak anlamına gelir. Veya yol, dosya sisteminin kökünden başlayabilir ve çeşitli düzeylerde dizinlerin dolaşılması gerekir.

(b) En azından bu, geçerli dizinde arama yapmak anlamına gelir. Veya yol, dosya sisteminin kökünden başlayabilir ve çeşitli düzeylerde dizinlerin dolaşılması gerekir. Hedef dosya zaten varsa, kopyanın nasıl ilerlemesi veya durdurulması gerektiğini belirleyin. Hedef dosya yoksa, yeni bir dizin girişi oluşturulmalıdır ve bu da dizinin genişletilmesini (yani dosya bloğu (diğer adıyla küme) ayırma yükü ) içerebilir .

(c) dizin genişletilecek varsa, bir boş blok bularak yeni bir blok tahsis değiştirme yeni ayırma ile ayırma tablosu ve geç diske bloğu (ler) i. Çoğu dosya sistemi, ayırma tablosunun birden çok kopyasını sakladığından, diske birden çok yazma anlamına gelir.
(c1) Hedef dizin bulunduğu kez okundu , diskten dizin bloğu değiştirmek kopyalanan dosyanın yeni dizin girdisi ile, sonra da yazma diske dışarı blok.

(d) dosya kopyalamak için, serbest bir blok bulma blokları tahsis değiştirme yeni tahsis ile ayırma tablosu ve geç diske bloğu (s) üzerinden. Çoğu dosya sistemi, ayırma tablosunun birden çok kopyasını sakladığından, diske birden çok yazma anlamına gelir. Veri bütünlüğünü korumak için, dosya sistemi dizinler ve ayırma tabloları için disk yazma işlemlerini birleştirmeyi (geciktirmeyi ve birleştirmeyi) deneyemez , bunun yerine yeni dosyalar oluşturulurken ve tahsis edilirken yazma işlemlerini hemen gerçekleştirebilir.

(e) veri complele olduğunu kopyalamak sonra güncellemek uygun dosya uzunluğu ve zaman damgaları ile kopyalanan dosyanın yeni dizin girişi ve sonra yazma diske dışarı dizin bloğu.

(f) güncelleyin yeni bir "erişim" damgası ile kaynak dizin girdisini ve sonra yazma diske dışarı dizin bloğu.

Yani tek bir dosya yerine, sorunuz bin dosya için tüm bu şeyleri yapmanın sadece dosyaların veri kısmını kopyalamak için gereken süreye ekleyip ekleyemeyeceğini soruyor. 24 MB'lık yalnızca bir dosyayı kopyalarsanız, bin dosyanın kopyalama sürenizle karşılaştırılacak bir şeyiniz olur.

Ne zaman destek-up bir dosya sistemi, bu keşfettim olarak oldukça yavaş bir süreç olduğu için nadiren kullanılan bir disk veya disk üzerinde başka bir dosya sistemine tek tek dosyaları kopyalama. Daha hızlı bir yöntem, kaynak dizin girişlerini ve dosya içeriğini özel bir dosya biçiminde tutan tek bir arşiv dosyası oluşturmak ve yazmaktır ; yedekleme programları ve * nix komutu 'tar' böyle bir arşiv dosyası çıktısı verebilir. ('Tar' öğesinin yalnızca arşiv dosyalarını işlediğini ve arşiv + sıkıştırma yardımcı programları gibi sıkıştırmayı kullanmadığını unutmayın.) En hızlı yedekleme yöntemi, bir blok cihaza (aygıttaki bir dosya sistemi yerine) yazmaktır; yok sayılır (daha fazla veri olarak işlem görür) ve kaynak cihazın blok satır görüntü kopyası gerçekleştirilebilir.


-1

İşte kavramsal bir benzetme:

(lütfen sevgili interneti hatırlayın, analojilerin kusurlu olduğunu. Yorumlarda nasıl olduğunu belirtmekten çekinmeyin.)

Varsayımlar:

  • Bilgi aktarım aracısı == bazı çocuklara, ona Sam diyelim, yumurtaları bir sepetten başka bir sepete taşıyor.
  • Bilgi aktarım havası ortamı == sanırım. Burada gerçekten önemli değil.
  • Yumurtalar ... dinozorlar ... ve efsanevi su altı deniz canlıları ve ejderhalar gibi çeşitli türlerden geliyor. (yumurtalar gerçekten büyük olabilir)
  • Dosya boyutu == yumurta hacmi. Robin'in yumurtasını draggon'un yumurtasına karşı düşün.

Analoji:

Bu yüzden Sam, bir sepetten diğerine yumurta taşımak zorunda, çünkü bir çiftlikte çalışıyor ve ona görev veren her şey demek. Bu çiftlikte ejderhalar ve efsanevi deniz canavarları; Sam bunun birkaç nedenden dolayı harika olduğunu düşünüyor. (gerçekten önemli değil ama bu benim benzetmem)
Sam 2 sepetiyle nehir kenarında ürperiyor, sepetlerden biri içinde yumurta olan biri. Sepetteki yumurtalar

  • 100 bytessepet içinde yer kaplayan bir robotun yumurtası

için

  • Kraken-yumurta, etrafında büyüklükte 2.7Gb.

Sam yumurtaları hareket ettirmeye başlamalı, o yüzden sadece yumurta tutmaya ve onları hareket ettirmeye başladı. Diyelim ki önce bir ejderha yumurtasını hareket ettirmeye karar veriyor. Şimdi yumurta son derece büyük ve yoğun, bu yüzden onu diğer sepete çekmek biraz zaman alıyor.
Sam ejderhanın yumurtasını diğer sepete sokar ve kızgındır. Bu zordu çünkü olay çok fazla yer kapladı; hareket etmesi sadece tek bir yumurta için uzun sürdü.

Sam bir aptaldır.

Sam başka bir yumurta almak için ilk sepetine geri döner. Sadece 1 tane büyük olduğunu fark eder. Ancak 100.000.000.000 robbin yumurtası kaldı.

Gördüğünüz gibi Sam'in öğleden sonraları mahvoldu. Doğal eğilimi, dino-yumurtanın hareket etmesi için çok daha kötü olması gerektiğidir. Yumurtalar ve sepetler hakkında konuşurken mantıklı geliyor, ancak bilgisayarlar 100.000.000.000 gibi rakamlarla ilgileniyor.

Kısacası:

Birkaç büyük dosyayı birkaç büyük dosyaya kıyasla taşımanın neden bu kadar uzun sürdüğüne ilişkin cevap, onları taşıma eylemiyle ilişkili maliyetle ilgilidir. Ne kadar küçük dosyaya sahip olursanız, o eylemin daha fazla önceden yapılması gerekir. Buna bakmanın bir başka yolu da bilgi yoğunluğu hakkında konuşmak olacaktır.


-2

FAT'i okuyun, kafaları yeniden konumlandırın, dosyayı değiştirirken dosyayı açın - hepsi zaman gerektirir


Bu bir NTFS diski
Trindaz

NTFS'de, tüm dosya verileri (dosya adı, oluşturma tarihi, erişim izinleri ve içerik) Ana Dosya Tablosunda meta veri olarak depolanır. Ana Dosya Tablosu (MFT), bir NTFS birimindeki her dosya, dizin ve meta dosyası hakkında meta veriler içerir. Dosya adlarını, konumları, boyutu ve izinleri içerir. Dizin girişi, bir dosya adı ve Ana Dosya Tablosundaki dosyayı temsil eden kayıt numarası olan bir "dosya kimliği" nden oluşur. Dosya kimliği ayrıca eski referansları algılamak için bir yeniden kullanım sayısı içerir.
Tembel Porsuk

Sorunun cevabı, dosya adı, konum, boyut, izinler vb.Için kayıtlar oluşturmak için çok fazla iş yapması gerektiğine dayanıyor mu? Tüm ekstra işler buradan geliyor.
Trindaz

Yeni oluşturma ve mevcut okuma
Lazy Badger
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.