12Aug

Zašto postoji velika razlika između veličine i veličine na disku?

Većinu vremena, vrijednosti za "Veličina" i "Veličina na disku" bit će vrlo blizu podudaranja prilikom provjere veličine datoteke ili datoteke, ali što ako postoji velika neusklađenost između ove dvije? Današnji SuperUser Q & A post gleda odgovor na ovaj zbunjujući problem.

Današnje pitanje &Sesija odgovora nam dolazi zahvaljujući SuperUseru - podjele Stack Exchange, grupiranjem zajednice Q & A web stranica.

Pitanje

SuperUser čitač thelastblack želi znati zašto postoji tako velika razlika između "Veličina" i "Veličina na disku" za mapu na SD kartici svojeg telefona:

Kao što možete vidjeti u nastavku, toliko je razlike izmeđuPolja "Veličina" i "Veličina na disku" za ovu mapu. Zašto je to?

Znam da veličina na disku bi trebala biti malo više od veličine zbog raspodjele jedinica u sustavu Windows, ali zašto postoji toliko mnogo razlike? Je li to moguće zbog velikog broja datoteka?

BTW, ova je mapa na SD kartici telefona Android. Unutar ovog, aplikacija mojeg karata pohranjuje mape spremljene u memoriju, a aplikacija dobiva svoje karte s Google karata.

Gledajući snimku zaslona, ​​definitivno postoji ogromna odstupanja između "Veličina" i "Veličina na disku", pa što se ovdje dogodilo da bi to moglo prouzročiti?

Odgovor

SuperUser suradnik Bob ima odgovor za nas:

Pretpostavljam da koristite FAT / FAT32 datotečni sustav ovdje, budući da spomenete ovo je SD kartica. NTFS i exFAT se ponašaju slično u odnosu na jedinice dodjele. Drugi datotečni sustavi mogu biti različiti, ali ionako nisu podržani u sustavu Windows.

Ako imate puno malih datoteka, to je svakako moguće. Razmislite o ovom:

  • 50.000 datoteka
  • 32 KB veličine klastera( dodjeljivanje jedinica), što je maksimum za FAT32

Ok, sada minimalni razmak je 50.000 * 32.000 = 1,6 GB( koristeći SI prefiks, a ne binarni, pojednostavitimatematika).Prostor svake datoteke na disku uvijek je višekratnik veličine jedinice dodjele - i ovdje pretpostavljamo da je svaka datoteka zapravo dovoljno malena da se uklapa u jednu jedinicu, s nekim( izgubljenim) prostorom koji je preostao.

Ako je svaka datoteka u prosjeku iznosila 2 KB, dobit ćete oko 100 MB - ali prosječno troši 15x( 30 KB po datoteci) zbog veličine jedinice dodjele.

U-Dubina Objašnjenje

Zašto se to dogodi? Pa, FAT32 datotečni sustav mora pratiti gdje se svaka datoteka pohranjuje. Ako bi trebao sačuvati popis svih pojedinačnih bajtova, tablica( poput adresara) povećala bi se s istom brzinom kao i podaci - i gubiti puno prostora. Dakle, ono što rade jest korištenje "jedinica dodjele", također poznate kao "veličina klastera".Volumen je podijeljen na ove jedinice dodjele, a što se tiče datotečnog sustava, one se ne mogu podijeliti - to su najmanji blokovi kojima se može adresirati. Slično kao da imate kućni broj, ali vaš poštar ne zanima koliko vam spavaonica ima ili tko živi u njima.

Pa što će se dogoditi ako imate vrlo malu datoteku? Pa, datotečni sustav ne zanima je li datoteka 0 KB, 2 KB ili čak 15 KB, to će mu dati najmanje prostora koji može - u gornjem primjeru, to je 32 KB.Vaša datoteka koristi samo malu količinu tog prostora, a ostatak je u osnovi izgubljen, ali još uvijek pripada datoteci - slično kao spavaćoj sobi koju ostavite bez radnog mjesta.

Zašto postoje različite veličine jedinica dodjele? Pa, to postaje kompromis između toga što ima veći stol( adresar, npr. John kaže da je vlasnik kuće u 123 lažnoj ulici, 124 lažni ulici, 666 Satan Lane itd.) Ili više prostora za svaku jedinicu( kuću),Ako imate veće datoteke, ima smisla upotrebljavati veće jedinice za dodjelu - jer datoteka ne dobiva novu jedinicu( kuću) dok se svi drugi ne popune. Ako imate puno malih datoteka, dobro, imat ćete veliki stol( adresar) ionako, pa bi im mogli dati i male jedinice( kuće).

Velike jedinice za dodjelu, kao opće pravilo, gube puno prostora ako imate puno malih datoteka. Obično nema dobrog razloga za opću upotrebu iznad 4 KB.Fragmentacija

?

Što se tiče fragmentacije, fragmentacija ne bi trebala trošiti prostor na ovaj način. Velike datoteke mogu biti fragmentirane, tj. Podijeljene, u više jedinica za dodjelu, ali svaka jedinica treba popuniti prije nego što se pokrene sljedeća. Defragging može uštedjeti malo prostora u tablicama dodjele, ali to nije vaše specifično pitanje.

Moguća rješenja

Kao što je sugerirao gladijator2345, vaše jedine stvarne opcije u ovom trenutku su živjeti s njim ili preoblikovati s manjim jedinicama dodjele.

Vaša se kartica može formatirati u FAT16, koja ima manju granicu za veličinu tablice i zbog toga zahtijeva mnogo veće jedinice za dodjelu kako bi se obradio veći volumen( s gornjom granicom od 2 GB s 32 KB alokacijskim jedinicama).Izvorna ljubaznost Braiama. Ako je to slučaj, trebali biste sigurno oblikovati kao FAT32.

Imate li što dodati objašnjenju? Zvuči u komentarima.Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.