Я ответил на этот вопрос , предполагая, что *.img
файл имеет размер сектора 512
.
Как я могу запросить устройство или изображение устройства, чтобы найти правильный размер сектора?
Я ответил на этот вопрос , предполагая, что *.img
файл имеет размер сектора 512
.
Как я могу запросить устройство или изображение устройства, чтобы найти правильный размер сектора?
Ответы:
fdisk -l
(это ниже L в параметре) покажет вам, помимо прочего, размер сектора тоже.
$ sudo fdisk -l
Disk /dev/sda: 150.3 GB, 150323855360 bytes
255 heads, 63 sectors/track, 18275 cylinders, total 293601280 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 63 208844 104391 83 Linux
/dev/sda2 208845 209712509 104751832+ 83 Linux
Это показывает, что размер сектора составляет 512 байт.
РЕДАКТИРОВАТЬ: более новые версии, fdisk
например, fdisk
(из пакета util-linux 2.20.1
), также покажет вам размеры логического и физического сектора. Например, соответствующий вывод с «WDC WD10EFRX 1TB drive»:
Disk /dev/sdn: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Согласно документации для файлов sysfs очереди :
# cat /sys/block/sda/queue/hw_sector_size
512
loopN
вместо sdX
. Тем не менее, это в некотором смысле бессмысленно, поскольку файлы изображений на самом деле не имеют секторов, и эта информация просто скажет вам размер сектора подключенного в данный момент устройства.
Можно просто использовать file(1)
команду и делать математику сам. Это работает, даже если у вас есть только образ системы FAT.
Например:
$ sudo file -s /dev/sda5 | tr , '\n'
/dev/sda5: DOS/MBR boot sector
code offset 0x58+2
OEM-ID "mkfs.fat"
sectors/cluster 64
reserved sectors 64
Media descriptor 0xf8
sectors/track 63
heads 255
hidden sectors 147632128
sectors 536870912 (volumes > 32 MB)
FAT (32 bit)
sectors/FAT 65536
serial number 0x9f981691
unlabeled
Этот раздел имеет 64 сектора на кластер. Количество байтов в каждом секторе составляет 512, так как это значение по умолчанию, поэтому размер кластера составляет 32 КБ.
Обратите внимание, что размер сектора может быть больше 512 (спецификация FAT ограничивает его до 4096, но вы можете пойти выше). Когда это произойдет, вы увидите дополнительное поле «Байт / сектор» в выходных данных.
$ sudo mkfs.fat -S 4096 -s 16 /dev/sda5
mkfs.fat 4.1 (2017-01-24)
$ sudo file -s /dev/sda5 | tr , '\n'
/dev/sda5: DOS/MBR boot sector
code offset 0x58+2
OEM-ID "mkfs.fat"
Bytes/sector 4096
sectors/cluster 16
Media descriptor 0xf8
sectors/track 63
heads 255
hidden sectors 147632128
sectors 67108864 (volumes > 32 MB)
FAT (32 bit)
sectors/FAT 4096
serial number 0xb059d826
label: unlabeled
Выполните сопоставление еще раз, 4096 байт × 16 секторов = 64 КиБ на кластер.
спасибо выше ответов, о том, что fdisk показывает размер физического сектора, и о / sys path ... но одна заметка ... от Lucas в книге Absolute FreeBSD .... почти каждый жесткий диск будет лежать о размере сектора, так что в случае с linux
/sys/block/sda/queue/hw_sector_size
всегда, насколько я понимаю, показывать 512 для лучшей производительности, хорошо бы учитывать реальный размер физического сектора, который реально используется в аппаратной логике. Это показал fdisk, и это присутствует в
cat /sys/block/sdc/queue/physical_block_size
4096