Premiär! Fyndchans i SweClockers Månadens Drop

Storlek av sektorer på hårddiskar

Permalänk

Storlek av sektorer på hårddiskar

Hej håller på och läser lite om hårddiskar men förstår inte riktigt hur sektorer fungerar.

På denna bilden tex så ser det ut som sektorerna på de inre spåren är mindre, men när man läser om sektorerna så får jag fram att en sektor är 512B borde inte det vara olika beroende på vilket spår den ligger på? eller är bilderna missvisande.
Sen så verkar 512B vara gammal information, någon som har en bra artikel med hur stora sektorerna på HDD är idag?

Visa signatur

Moderkort: Asus Maximus VI Hero CPU: i7 4770k RAM: G.Skill Ares 16GB
PSU: Corsair TX Series 650W GPU: GIGABYTE GTX670 OC
Chassi: Antec P280 Cpu-Kylare: Stock SSD: Samsung 840 EVO Series 250GB
OS: Windows 10 Pro x64

Permalänk
Medlem

De flesta moderna hårddiskar använder Zone bit recording, där antalet sektorer ökar ju längre ut på disken man kommer. Så bilden du hittat är en förenkling av hur det egentligen ser ut.

När det gäller sektorstorlek så använder de flesta moderna diskar Advanced Format, med 4K-sektorer.

Permalänk
Medlem

En sektor är den teoretiskt minsta adresserbara enhet en disk kan hantera.
Kluster är en sammanslagning av flera sektorer och utgör i praktiken den minst adresserbara enheten. Så, om du skall läsa en fil på disken tillhandahåller MFT info om vilka kluster och dess ordning där filen ligger på disken.

Disken "vet" inte ett skit om filstrukturen, det får filhanteraren i OS hålla koll på.

Permalänk
Skrivet av perost:

De flesta moderna hårddiskar använder Zone bit recording, där antalet sektorer ökar ju längre ut på disken man kommer. Så bilden du hittat är en förenkling av hur det egentligen ser ut.

När det gäller sektorstorlek så använder de flesta moderna diskar Advanced Format, med 4K-sektorer.

Skulle detta vara en bättre bild?

Blev inte så bra i paint men säg att mellanrummet mellan de målade strecken är samma på varje track.

Skrivet av jookeer:

En sektor är den teoretiskt minsta adresserbara enhet en disk kan hantera.
Kluster är en sammanslagning av flera sektorer och utgör i praktiken den minst adresserbara enheten. Så, om du skall läsa en fil på disken tillhandahåller MFT info om vilka kluster och dess ordning där filen ligger på disken.

Disken "vet" inte ett skit om filstrukturen, det får filhanteraren i OS hålla koll på.

Hur blir det då om en sektor är tex 512B och man skriver en ny text fil till disken som bara är 5 Byte, tar den filen upp en hel sektor då?

Visa signatur

Moderkort: Asus Maximus VI Hero CPU: i7 4770k RAM: G.Skill Ares 16GB
PSU: Corsair TX Series 650W GPU: GIGABYTE GTX670 OC
Chassi: Antec P280 Cpu-Kylare: Stock SSD: Samsung 840 EVO Series 250GB
OS: Windows 10 Pro x64

Permalänk
Medlem
Skrivet av DragonRapide:

Hur blir det då om en sektor är tex 512B och man skriver en ny text fil till disken som bara är 5 Byte, tar den filen upp en hel sektor då?

Japp, inte bara EN sektor utan ett helt kluster som kan bestå av flera sektorer.

Permalänk
Medlem
Skrivet av DragonRapide:

Skulle detta vara en bättre bild?
http://i.imgur.com/7UOQo1Q.png
Blev inte så bra i paint men säg att mellanrummet mellan de målade strecken är samma på varje track.

Typ så är det ja, i förenklat stadie.

Skrivet av DragonRapide:

Hur blir det då om en sektor är tex 512B och man skriver en ny text fil till disken som bara är 5 Byte, tar den filen upp en hel sektor då?

Sektor är minsta möjliga utrymmet. Det är på ren hårdvarunivå det minsta du kan adressera (peka på). Även om du skriver bara 1 enda byte, så tar den upp en hel sektor. Tänk det som miljontals flyttlådor du har uppstaplade. Oavsett om du lägger en knappnål eller fyller kartongen, så kommer den att ta samma plats, då lådan tar denna platsen.

Detta är pga disken har ett index, sk LBA adressering (Logical Block Addressing), där varje sektor har en adress. Den måste använda hela utrymmet, då den inte kan hantera det annars. Se det som brevbäraren. Han sorterar dina brev o paket till en brevlåda. Han vet att där bor "X och Y" och har den adressen och lägger all post dit, men han skiljer inte på posten mellan olika i hushållet, utan endast adressen och namnet är vad han går efter.

Du kan se lite av detta med kluster/sektor och 5 byte i datorn om du tex högerklickar och väljer egenskaper på en mapp i utforskaren. Du kommer få en "Storlek" som är storlek på datan som ligger, och en "Storlek på disk" som är hur mycket denna data ta upp med allt slöseri på stora kluster vi använder. Tex Windows mappen som ofta har mycket småfiler, så kan "förlusten" av bortkastat utrymme bli 100MB plats på 30GB, som inte håller nån data, men är upptagen pga storleken på klusterna.

Skulle du lägga samma data på en partition med 64kB kluster istället (som är fullt möjligt) så skulle förlusten troligen bli närmare GB stor istället, men samtidigt så blir det färre kluster för filsystemet att hålla reda på.

Så disken läser/skriver alltid en sektor, men datorn filsystemet läser alltid ett kluster (av sektorer). Ett kluster kan innehålla allt mellan 1 och i teorin, oändligt med sektorer. Men vanligast är 1-16, beroende på disken och filsystemet.

Om vi tittar lite på den info du har: Förr hade du en sektor på 512Byte och ett kluster på kanske 4kB (4096Byte), dvs 8 sektorer, men eftersom det började bli svårt att hålla reda på alla biljoner sektorer som en stor HDD har idag, så fick man byta detta.

Idag har man löst detta med sektorer på 4kB och kluster kan vara allt från 4kB till 128kB beroende på filsystemen vi använder. Detta gör att vi kan göra större diskar och partitioner idag, utan att få problem att hålla reda på fler sektorer (iaf till nästa gräns). Vi har bara mer plats i varje sektor. Vi har slagit i många gränser genom tiderna, med allt från 504/528MB till 137GB och mycket mer. (detta är bara ett litet urval av hårdvaru-begränsningar, det finns i filsystem också) De hittar konstant på nya sätt att förlänga allt, så att man kan fortsätta använda denna nu 30+ år gamla teknik, med successivt nyare och nyare metoder

Permalänk
Hedersmedlem

Läs gärna på de artiklar som länkats.
Du ska inte blanda ihop en sektors storlek i Bytes med dess fysiska storlek på disken. Om skivan snurrar med en konstant hastighet så kommer sektorerna i ditt första exempel att snurra förbi i samma hastighet. Det gör att logiken i driven inte behöver ta hänsyn till var den är på disken utan sektorerna rusar förbi i en bestämd hastighet. Det var där det började. Sedan har man kommit på diverse finurliga sätt att reda ut det. Ett sätt kan vara att skivan snurrar långsammare ju längre ut på disken du läser (CLV). Man kan så klart också fixa detta i elektroniken. Funderar du lite över hur det egentligen ser ut från läshuvudets synvinkel när skivan snurrar förbi så klarnar det kanske, eller blir mer snurrigt. Disklagring är ett intressant ämne.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Hårddiskar har inte tid att varva upp eller ned i sina sökningar utan går med konstant varvtal - däremot ändrar man takten på läsklockor mm. så att den går fortare ju längre ut allt eftersom man stoppar in flera sektorer närmare perferin.

Detta är inget som brukaren ser av någonsin - däremot vid HD-tester som HD-tune att farten på dataöverföringen minska ju närmare slutet man är på hårddisken vilket i sin tur är en indikation att det blir allt färre sektorer per varv ju längre in man läser på disken (den börjar alltid ytterst i periferin när LBA är 0)

DVD-spelare kan ha blandad beteende - en del läsare kör med samma varvtalshastighet hela skivan medans andra kör fortast möjlig ett tag (typ halva skivan) för att därefter sakta varva ner ju närmare periferi man är - är det riktig CD-musikläsning så är datatakten fast och varvtalet anpassar sig efter datatakten och snurrar alltså långsammare ju längre ut på skivan man läser och det ända från start - Allt detta beroende på hur bra chipsetet som används är att variera läsklockan. CD/DVD/Bluray börjar sin läsning alltid längst in (och då långsammaste läget)

Permalänk
Medlem
Skrivet av xxargs:

Detta är inget som brukaren ser av någonsin - däremot vid HD-tester som HD-tune att farten på dataöverföringen minska ju närmare slutet man är på hårddisken vilket i sin tur är en indikation att det blir allt färre sektorer per varv ju längre in man läser på disken (den börjar alltid ytterst i periferin när LBA är 0)

Det lustiga är att LBA 0 inte låg längst ut förr i tiden. När vi hade några få MB storlek på diskarna fick man välja mellan snabb sekventiell hastighet vs snabb söktid, då disken gjorde precis som DVD/CD och började med innersta spåret.

Detta gjorde defragmentering lite mer taktiskt på 90-talet, där större filer lades sist på disken, medan små systemfiler, först på disken.

Idag är det dock precis som du säger, och diskarnas prestanda är snabbast både i sökning och i läsning i början, och avtar desto längre ut man kommer.

@DragonRapide
Idag är dessa spår enormt många, men tittar man på en bild på lite äldre diskar så ser man exakt hur dessa spårhopp sker med lite testmjukvara:

Här syns den typiska trappan, som blir när man hoppar spår. I början är läshastigheten högst, men mot slutet har den sjunkit med mer än 50%, detta då du har färre sektorer per varv i de sista inre spåren. Söktiden ser man också (gula prickarna) att de är i snitt lägre i början på disken, vs 2x så långsamma i snitt i slutet på disken, då det tar längre tid för armen att röra sig från yttre LBA 0 och index spåren till inre spåret där datan ligger.

Enda skillnaden mot idag är att trappan har många fler steg, och att hastigheten på själva läsningen är högre (runt 200MB/s), detta genom att du har fler sektorer på mindre yta. Söktiden har dock inte förbättrats så mycket, då den begränsas av armen och varvtalet (5400/5900/7200/10000 RPM). Även om armen kan nå dit snabbare, så måste disken vänta på att skivan ska rotera, så att den sektorn med data den behöver hamnar under läshuvudet. Största förbättringen här var NCQ, en funktion som istället för att göra alla läsningar/skrivningar en efter en, oavsett var de befinner sig, så sorterar man om dessa, så att diskens läsarm kan läsa flera sektorer "på vägen" mellan inre och yttre spåret. Detta ökar prestandan, och minska slitaget på mekaniken lite.

Permalänk
Skrivet av Paddanx:

Typ så är det ja, i förenklat stadie.

Sektor är minsta möjliga utrymmet. Det är på ren hårdvarunivå det minsta du kan adressera (peka på). Även om du skriver bara 1 enda byte, så tar den upp en hel sektor. Tänk det som miljontals flyttlådor du har uppstaplade. Oavsett om du lägger en knappnål eller fyller kartongen, så kommer den att ta samma plats, då lådan tar denna platsen.

Detta är pga disken har ett index, sk LBA adressering (Logical Block Addressing), där varje sektor har en adress. Den måste använda hela utrymmet, då den inte kan hantera det annars. Se det som brevbäraren. Han sorterar dina brev o paket till en brevlåda. Han vet att där bor "X och Y" och har den adressen och lägger all post dit, men han skiljer inte på posten mellan olika i hushållet, utan endast adressen och namnet är vad han går efter.

Du kan se lite av detta med kluster/sektor och 5 byte i datorn om du tex högerklickar och väljer egenskaper på en mapp i utforskaren. Du kommer få en "Storlek" som är storlek på datan som ligger, och en "Storlek på disk" som är hur mycket denna data ta upp med allt slöseri på stora kluster vi använder. Tex Windows mappen som ofta har mycket småfiler, så kan "förlusten" av bortkastat utrymme bli 100MB plats på 30GB, som inte håller nån data, men är upptagen pga storleken på klusterna.

Skulle du lägga samma data på en partition med 64kB kluster istället (som är fullt möjligt) så skulle förlusten troligen bli närmare GB stor istället, men samtidigt så blir det färre kluster för filsystemet att hålla reda på.

Så disken läser/skriver alltid en sektor, men datorn filsystemet läser alltid ett kluster (av sektorer). Ett kluster kan innehålla allt mellan 1 och i teorin, oändligt med sektorer. Men vanligast är 1-16, beroende på disken och filsystemet.

Om vi tittar lite på den info du har: Förr hade du en sektor på 512Byte och ett kluster på kanske 4kB (4096Byte), dvs 8 sektorer, men eftersom det började bli svårt att hålla reda på alla biljoner sektorer som en stor HDD har idag, så fick man byta detta.

Idag har man löst detta med sektorer på 4kB och kluster kan vara allt från 4kB till 128kB beroende på filsystemen vi använder. Detta gör att vi kan göra större diskar och partitioner idag, utan att få problem att hålla reda på fler sektorer (iaf till nästa gräns). Vi har bara mer plats i varje sektor. Vi har slagit i många gränser genom tiderna, med allt från 504/528MB till 137GB och mycket mer. (detta är bara ett litet urval av hårdvaru-begränsningar, det finns i filsystem också) De hittar konstant på nya sätt att förlänga allt, så att man kan fortsätta använda denna nu 30+ år gamla teknik, med successivt nyare och nyare metoder

Jätte bra info. Testade dock att höger klicka på lite text filer som inte var större än 512B. Märkte lita olika saker som du kanske kan förklara.
1. kollade storlek på disk på en fil som var 208byte stor men på disk stod det 0 byte. Hur är detta möjligt? När jag dock ökade texten i den så den gick över någon gräns mellan 514 - 538 bytes så tog den upp 4096 bytes på SSD´n. Använder SSDer något liknande system eller samma?
2. Sen har jag filer som i utforskaren står att dem tar upp 1kB men kollar man i egenskaper av den filen så tar den tex bara upp 34 byte och storlek på disk står det 0.

Finns det något kommando man kan köra i cmd för att se sektor storleken på sina diskar?
Läste någonstans att man i windows kan ändra storleken på sektorerna, så som windows läser av dem...

Visa signatur

Moderkort: Asus Maximus VI Hero CPU: i7 4770k RAM: G.Skill Ares 16GB
PSU: Corsair TX Series 650W GPU: GIGABYTE GTX670 OC
Chassi: Antec P280 Cpu-Kylare: Stock SSD: Samsung 840 EVO Series 250GB
OS: Windows 10 Pro x64

Permalänk
Medlem
Skrivet av DragonRapide:

Jätte bra info. Testade dock att höger klicka på lite text filer som inte var större än 512B. Märkte lita olika saker som du kanske kan förklara.
1. kollade storlek på disk på en fil som var 208byte stor men på disk stod det 0 byte. Hur är detta möjligt? När jag dock ökade texten i den så den gick över någon gräns mellan 514 - 538 bytes så tog den upp 4096 bytes på SSD´n. Använder SSDer något liknande system eller samma?
2. Sen har jag filer som i utforskaren står att dem tar upp 1kB men kollar man i egenskaper av den filen så tar den tex bara upp 34 byte och storlek på disk står det 0.

Finns det något kommando man kan köra i cmd för att se sektor storleken på sina diskar?
Läste någonstans att man i windows kan ändra storleken på sektorerna, så som windows läser av dem...

1. Det kan vara så enkelt att de avrundar det fel, där den felaktigt avrundade ner. Windows är ett stort lexicon på små fel när det gäller lagring*. Det bör vara 4096 i båda fallen. SSDer är en hel del annorlunda i sin interna design mot hårddiskar, men deras yttre design (det OSet ser) är i princip identiskt. Det är gjort så för att de skulle kunna ersätta en HDD rakt av. Eftersom SSDer också formateras med samma filsystem som en HDD, så blir sättet att lagra filer på väldigt lika.

SSDer har sektorer på 4kB och sen "page" (löst översatt sidor) med en till flera sektorer, och sen blocks med flera sidor. Vill du läsa mer så kan du börja här.

2. Det låter konstigt. Vilket OS är det, och vilken fil?
Tittar jag på tex win.ini (i Windows mappen), så är min på 499 byte, 1kB (enligt storlek). I egenskaper så står det dock 4kB.

Det finns lite olika kommandon, men det mest givande tror jag är om du kör en "chkdsk" (utan några kommandon). Detta är egentligen ett filsystems verifierings program, men den ger dig all data du troligen letar efter efter sina kontroller, typ:

105775103 kB diskutrymme totalt.
69855068 kB i 154617 filer.
124600 kB i 40913 index.
0 kB i skadade sektorer.
306895 kB används av operativsystemet.
65536 kB hårddisksutrymme används av loggfilen.
35488540 kB ledigt utrymme.

4096 byte i varje allokeringsenhet.
26443775 allokeringsenheter finns totalt på disken.
8872135 allokeringsenheter är tillgängliga på disken.

Då ser du både hur filer, data och allokeringsenheter är fördelat, samt hur stor en allokeringsenhet är.

Du kan aldrig ändra storleken på sektorerna, men du kan ändra storlek på allokeringsenheterna (kluster). När man formaterar om en partition, och bygger filtabellerna så kan man välja hur stora dessa ska vara, ofta mellan 1 sektor (som normalt idag anses vara 4096Byte), eller 64kB. Det finns större men det beror på filsystemets grund, och NTFS, som Winodws använder, kör normalt inom detta spann.

* PS. Vad jag syftar på är deras ökända sätt att räkna tex 1MB som 1 048 576 Byte, men de skriver det som 1 000 000 med deras förkortning. Detta är varför en 120GB HDD/SSD blir utan logisk förklaring ca 111,6GB i Windows. Det korrekta är 120GB, eller 111,6GiB (GibiByte).
Du kan läsa lite om matten här. Windows räknar mao korrekt i binärt, men visar sedan felaktigt en decimal beteckning, och rent matematiskt säger att 120 = 111,6... vilket tom en grundskoleelev borde veta inte stämmer.