NTFS hangi blok ayırma algoritmasını kullanıyor?


10

Windows XP 64'de, 1,2 GB'lık bir dosya indirdim ve resimde gösterildiği gibi parçalandı. Ne yazık ki, Piriform Defraggler'den anlık görüntü almadan önce diğer dosyaları birleştirdim, böylece dosyanın yazıldığı noktada tam durumu göremiyorsunuz. Ancak, disk her zaman olduğu gibi boştu (% 25 kullanıldı) ve neredeyse hiç parçalanmadı.

ekran görüntüsü 1

NTFS hangi blok ayırma algoritmasını kullanıyor? Rasgele gibi görünüyor veya disk kafasının gerçekte durduğu yere koyuyor.

GÜNCELLEME:

Bugün 67 MiB yeni bir dosya yazdıktan sonra olan buydu. Ortalama boyutu sadece 95 KiB olan 731 parçaya bölündü. Dosya bazı boşlukları doldurmak için kullanıldı, ancak hepsi değil, büyük sürekli boş alan da kullanmıyor. Garip, değil mi?

ekran görüntüsü 2

GÜNCELLEME 2:

PC Guru'nun aksine , Opera'nın suçlu olduğunu düşünmüyorum. Bence (Google Chrome'un aksine) Windows'a beklenen boyutu söylemiyor, ancak mümkün olmadığı birçok durum var ve bunu akılcı bir şekilde ele almak OS'nin sorumluluğundadır. Aşağıdaki resim, bu bölümde neredeyse hiçbir şey yapmama rağmen birkaç gün sonra neler olduğunu gösteriyor - TEMP dizini ve tüm verilerim (Windows tarafından yönetilenler hariç) başka bir yerde bulunuyor. Windows'un kendisi SetEndOfFilekendi dosyalarını korkunç bir şekilde kullanmıyor ve parçalıyor (yaklaşık 40 MB'lık küçük bir dosya için 600 parça). NTFS ilk kullanılabilir sektörü kullanmıyor gibi görünüyor, çünkü yine ortada ve oldukça boş diskin sonuna yakın dosyalar var (% 23 kullanım),

ekran görüntüsü 3

Yanıtlar:


12

IIRC, NTFS dosya sistemi dosyayı bitişik depolama alanına tahsis etmeye çalışır. Ancak bunu ancak dosya sistemi dosyanın boyutunu biliyorsa yapabilir. Bir dosyayı açar ve yazmaya başlarsanız, dosyaya sığdırmak için "en iyi" yere yazar (genellikle tablanın dışına doğru). Ancak bu "en iyi" yer, dosyaya sığacak kadar büyük olmayabilir.

Uygulama NTFS'ye dosyanın gerçek boyutunu söylüyorsa ( SetEndOfFile () ile), NTFS dosya için bitişik alan bulmak için daha iyi bir iş yapabilir (SetEndOfFile API, NTFS'nin tüm dosya için depolama alanı ayırmasına neden olur).


Ancak NTFS'nin tüm boşlukları doldurduğu ve geri kalanını diskin her tarafına eşit olarak yaydığı anlaşılıyor. Dediğim gibi, disk şimdiye kadar hiç bu kadar dolgun değildi, dosyanın bazı bölümleri son sektörlerden bazılarına (yani en kötü yerlere) yazıldı. Başka yerlerde çok fazla boş yer olmasına rağmen, işgal altındaki iki sektör arasındaki küçük alanlarda diğer parçalar sıkıldı.
maaartinus

Dosyayı diske yazmadan önce setEndOfFile öğesini çağırdınız mı? yapmadıysanız, NTFS'nin dosyanın gerçek boyutunu bilmesinin bir yolu yoktur, bu nedenle dosyayı kullanılabilir depolama alanını kullanarak büyütür.
ReinstateMonica Larry Osterman

Ben değildim, Opera'ydı. Büyük olasılıkla değil. Yine de, garip bir şey yapmak için bir sebep yok.
maaartinus

Ne demek "tuhaf"? NTFS yazdığınız dosyanın boyutunu biliyorsa, dosya hakkında akıllıca şeyler yapar. Dosya boyutunu bilmiyorsa, neredeyse bir depolama alanı ayırma işi yapamaz.
ReinstateMonica Larry Osterman

@ Larry Osterman: Tabii, dosya boyutunu bilmeden doğru yapmak zor. Ama bunu kötü yapmak da zor.
maaartinus

2

Sorununuz Opera'da olmalı. Çok dolu ve parçalanmış bir sürücüdeki bir sürü dosyaya baktım. Chrome kullanılarak indirilen büyük dosyaların tümü bitişikti.

Bu, Chrome'un indirme başlangıcında dosyanın boyutunu bildiğini, bu nedenle NTFS'ye beklenecek dosyanın boyutunu söylediğini gösteriyor. Bunu yaparsanız, NTFS dosyayı tek bir parçaya yerleştirmeye çalışır ya da hiçbir parça yeterince büyük olmadığında kullanılabilir en büyük parçalara yerleştirir. İlginçtir, bu parçaları her zaman azalan boyutta kullanır, böylece Explorer tarafından parçalanmış bir sürücüye kopyalanan büyük dosyalar sürücünün her yerinde atlayabilir.

Programın dosya boyutunu bilmediği veya NTFS'ye anlatmakla uğraşmadığı, ancak bunun yerine sadece bir dosya açtığı ve sıralı veri yazmaya başladığı durumlarda, NTFS'nin ilk kullanılabilir kümede (veya bu oturumda en son atanandan sonra kullanılabilir olan ilk oturum), bundan sonra kullanılabilen her şeyi kullanır. Örnek olarak, aynı zamanda CCleaner'dan kayıt defterini taramasını istedim ve büyük bir txt ".Reg" dosyasına yedeklemesine neden oldu. Bu dosya, sürücünün başlangıcına yakın bir zamanda başladı ve 127 farklı parçaya dağıtıldı. Explorer ile kopyalanan veya Chrome ile indirilen dosyalardan farklı olarak, baktığım her dosyada, kümeler artan sırada ayrıldı.

Bu araştırma için Winhex'i kullandım (Winhex.com'dan ücretsiz deneme sürümü). Bir dizin girişine bakarken. bir dosya adına sağ tıklayın ve bu dosya tarafından kullanılan kümelerin listesini görmek için Konum, Kümeleri Listele'yi seçin.


Sorumun cevabı, yorumum uzun sürdüğü ve bir resim eklediğim için yorumladım.
maaartinus
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.