Я запустил sudo fdisk -l
и получил следующую информацию:
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Эта утилита показывает полный размер жесткого диска (120034123776 bytes
) и его количество головок (255 heads
) , секторов на дорожку (63 sectors/track
) и количество цилиндров (14593 cylinders
).
Умножая головки X секторов на дорожку X количество цилиндров, мы должны иметь количество секторов в диске.
255 X 63 X 14593 = 234436545
Учитывая, что каждый сектор имеет размер 512 байт, мы имеем
234436545 X 512 = 120031511040
На самом деле, 120031511040 != 120034123776
, поэтому возникает вопрос: действительно ли fdisk показывает неверную информацию или я что-то упустил в своих вычислениях?
Хм, насколько я вижу, разница незначительна, поэтому она может быть вызвана различным значением «килограмм», «мега» и «гига» (префиксы) в мире ИТ и СИ: в обычной жизни например, «килограмм» означает 1000, в то время как в ИТ общая привычка была 1024. Теперь путаница еще больше, поскольку есть предложение (даже в Ubuntu) использовать 1000 в качестве килограмма и использовать «киби» (или что-то еще .... ) за 1024 при необходимости. Таким образом, используя эти префиксы, кто-то означает 1000, другие - 1024, и, что еще сложнее, в случае с жесткими дисками вещи даже смешиваются, что некоторые из префиксов имеют степень 2, а некоторые - степень 10.
[ 112] https://wiki.ubuntu.com/UnitsPolicy
Это немного сложная / запутанная ситуация и в других ОС ...
Я бы сказал, что использование cylinder
сейчас устарело и используется в основном по историческим причинам.
Глядя на исходный код fdisk
, мне кажется, что общее число байтов устройства получается с помощью вызова ioctl
if (ioctl(fd, BLKGETSIZE64, bytes) >= 0)
return 0;
[ 1112] и другие цифры затем выводятся из этого.
Например, число цилиндров вычисляется с использованием
llcyls = total_number_of_sectors / (heads * sectors * sector_factor);
«Проблема» в том, что результат этого деления усечен (округлен в меньшую сторону), поэтому он должен быть неточным .
Используя ваш выход fdisk
в качестве примера
120034123776 bytes / 512 bytes_per_sector / 255 / 63 = 14593.3176471 cylinders
, но выход fdisk
округляет это до 14593
.