Jak to działa
Jednostki pamięci masowej liczy się na dwa różne sposoby i oba są poprawne. System dziesiętny, którego używają producenci dysków i Międzynarodowy Układ Jednostek Miar, mnoży przy każdym przedrostku przez 1000: kB to 1000 bajtów, MB to milion, a TB to bilion. System binarny, który narodził się razem z komputerami, mnoży przez 1024, ponieważ pamięć i magistrale adresowane są w potęgach dwójki.
Problem polega na tym, że przez dziesięciolecia oba systemy używały tych samych nazw. Kiedy Eksplorator Windows pisze "GB", w rzeczywistości liczy gibibajty, czyli dzieli przez 1024 trzy razy. Dlatego dysk 1 TB, który zawiera dokładnie bilion bajtów, pojawia się na ekranie jako 931,32 GB: nic nie ginie, zmieniła się tylko miara. Od 1998 roku norma IEC 80000-13 usuwa tę niejednoznaczność przedrostkami binarnymi KiB, MiB, GiB i TiB.
To narzędzie przelicza pojemność jednocześnie na trzy rodziny jednostek —dziesiętne, binarne i bity— i pokazuje dokładną liczbę bajtów, wartość deklarowaną przez producenta oraz tę, którą wyświetli system operacyjny, wraz z procentową różnicą między nimi. Wszystkie obliczenia wykonywane są w przeglądarce.
Przykłady
1 TB931,32 GBDysk zawiera 1 000 000 000 000 bajtów, dokładnie tyle, ile obiecuje pudełko. System dzieli je trzy razy przez 1024 i pokazuje 931,32 GB, co ściśle rzecz biorąc jest 931,32 GiB. Na ekranie zdaje się brakować prawie 69 GB; na dysku nie brakuje ani jednego bajtu.1 GiB1073741824 BGibibajt to 2^30 bajtów. Gigabajt dziesiętny to 1 000 000 000, więc binarny jest o 7,37 % większy. To ta sama różnica, która dzieli to, co masz na myśli, prosząc o "giga", od tego, co rozumie przez to każdy program.4 TB3,64 TiBIm większy przedrostek, tym bardziej oba systemy się rozjeżdżają: 2,34 % przy kilo, 6,87 % przy giga i 9,05 % przy tera. Dlatego wrażenie "za małego dysku" nasila się właśnie przy dużych dyskach.100 Mbit12,5 MBŁącza sieciowe mierzy się w bitach, a pamięć masową w bajtach. Łącze 100 Mbit/s pobiera maksymalnie 12,5 MB na sekundę, bo każdy bajt to 8 bitów. To jedno wyliczenie tłumaczy połowę reklamacji składanych u dostawców internetu.Przypadki użycia
- Zrozumieć, dlaczego dysk 1 TB albo pendrive 64 GB pokazują mniejszą pojemność, niż podano na opakowaniu.
- Zamienić na czytelną postać rozmiar w bajtach zwracany przez API, log albo polecenie ls -l.
- Porównać rozmiar kopii zapasowej lub obrazu między dwoma narzędziami, które mierzą inną miarą.
- Wymiarować limity, wolumeny i ograniczenia wysyłania, gdy dokumentacja mówi w MiB, a interfejs w MB.
- Przeliczyć prędkość łącza w Mbit/s na rzeczywistą prędkość pobierania w MB/s.
- Wyjaśnić klientowi na liczbach, że kupiony dysk nie ma mniej miejsca, niż obiecywano.
Najczęstsze pytania
Kupiłem dysk 1 TB, a widzę 931 GB — czy zostałem oszukany?
Nie. Dysk ma 1 000 000 000 000 bajtów, a właśnie to oznacza 1 TB w systemie dziesiętnym, którego używają wszyscy producenci. Windows bierze te same bajty, dzieli je trzy razy przez 1024, otrzymuje 931,32 i podpisuje wynik jako "GB" zamiast "GiB". To problem etykiety, a nie pojemności: wszystkie bajty tam są. Naprawdę ubywa natomiast to, co system plików rezerwuje przy formatowaniu.
Jaka jest różnica między GB a GiB?
GB to 1 000 000 000 bajtów (10^9), a GiB to 1 073 741 824 (2^30). Gibibajt jest o 7,37 % większy. Ta sama zależność powtarza się na każdym poziomie: kB wobec KiB, MB wobec MiB, TB wobec TiB. Symbole binarne mają w środku literę "i" i czyta się je kibi, mebi, gibi i tebi.
Czy wszystkie systemy operacyjne pokazują to samo?
Nie, i to potęguje zamieszanie. Windows liczy w potęgach 1024, ale podpisuje wynik jako GB i TB, więc dla dysku 1 TB pokazuje 931 GB. macOS mierzy dziesiętnie od 2009 roku, dlatego ten sam dysk widnieje jako 1 TB. W Linuksie zależy to od narzędzia: df -h i ls -lh używają 1024, df -H i ls -l --si używają 1000, a wiele programów pisze już GiB tam, gdzie trzeba. Dysk nigdy się nie zmienił; zmienił się ten, kto go mierzy.
Dlaczego pamięć RAM zgadza się z tym, co pisze na pudełku?
Ponieważ pamięć produkuje się i adresuje w potęgach dwójki: moduł "16 GB" ma w rzeczywistości 16 GiB, czyli 17 179 869 184 bajty. Skoro system operacyjny też liczy binarnie, obie liczby się zgadzają i nikt niczego nie zauważa. Z dyskami jest odwrotnie: producent liczy dziesiętnie, a system binarnie, i różnica rzuca się w oczy.
O ile rośnie różnica wraz z przedrostkiem?
Narasta o 2,4 % na każdym poziomie. Liczba pokazywana przez system jest mniejsza o 2,34 % przy kilo, 4,63 % przy mega, 6,87 % przy giga, 9,05 % przy tera, 11,18 % przy peta i 13,26 % przy eksa. Dlatego przy pliku kilku kB różnica jest niezauważalna, a przy macierzy o pojemności kilku petabajtów to setki terabajtów oczekiwań.
Czy Mbit to to samo co MB?
Nie, różnica jest ośmiokrotna. Łącza sieciowe mierzy się w bitach na sekundę, a pamięć masową w bajtach, a bajt to 8 bitów. Łącze 300 Mbit/s daje najwyżej 37,5 MB/s pobierania, jeszcze przed odliczeniem nagłówków protokołów. Do tego przedrostki sieciowe są zawsze dziesiętne: Mbit to milion bitów, nigdy 1 048 576.
Dlaczego mojemu SSD brakuje jeszcze więcej miejsca?
Do różnicy między systemem dziesiętnym a binarnym dochodzą dwie rzeczy. Pierwsza to nadmiarowa rezerwa (over-provisioning): kontroler zatrzymuje część pamięci flash, niedostępną dla użytkownika, żeby zastępować zużyte bloki i przyspieszać zapis. Druga to system plików, który zaraz po formatowaniu zajmuje miejsce na tablice, dziennik i metadane. Żadna z nich nie jest usterką: to cena za to, że dysk działa i długo wytrzymuje.
Której jednostki używać zatem w dokumentacji?
Tej, która nie pozostawia wątpliwości. Jeśli wartość liczona jest w potęgach 1024, pisz MiB lub GiB; jeśli w potęgach 1000, pisz MB lub GB. W API czy pliku konfiguracyjnym najbezpieczniej podać wprost liczbę bajtów i pozwolić interfejsowi zdecydować, jak ją wyświetlić. To jedna linijka kodu, która oszczędza godziny dyskusji o tym, czemu dwa narzędzia podają różne liczby dla tego samego pliku.