Я відповів на це запитання , припускаючи, що *.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 байт.
EDIT: Більш нові версії, fdisk
наприклад, fdisk
(з пакета util-linux 2.20.1
), також покажуть вам логічний та фізичний розміри сектору. Наприклад, відповідний вихід з "WDC WD10EFRX 1TB-накопичувача":
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 шлях ... але одна примітка ... Лукас у книзі Absolute FreeBSD .... майже кожен hdd буде брехати про розмір сектору, так що у випадку Linux
/sys/block/sda/queue/hw_sector_size
завжди, наскільки я можу зрозуміти, показуватиме 512 для кращої продуктивності, добре враховувати фізичний розмір сектора, реальний, який дійсно використовується в апаратній логіці. Він показаний fdisk, і він присутній в
cat /sys/block/sdc/queue/physical_block_size
4096