Mon, May 07, 2012 at 16:29:00, vsjcfm wrote about "[freebsd] Re: [freebsd] ZFS 
на винтах с 4К секторами": 

> В случае 64-битной версии ОС Microsoft Windows NT,
> за GPT зарезервировано 32 сектора или 16 384 байта (при использовании
> сектора размером 512, а не 4 096 байт), так что первым используемым
> сектором каждого жёсткого диска в ней будет блок LBA 34.

В общем случае это не только Windows.
Полностью GPT состоит из:
* primary header - 92 байта - по LBA=1 (здесь и далее смещения в секторах,
рапортуемых на шине), остаток сектора свободен
* partition array - не менее 128 записей, каждая из которых не менее 128
байт; есть методы расширения, но на практике они никому нафиг не нужны и
поэтому у всех нынешних ОС свежесозданная таблица занимает 16384 байта.
* backup header - те же 92 байта в начале последнего сектора (LBA=max)
(но может быть раньше, если, например, диск из массива, созданного под
RAID-контроллером, читается вне контроллера; но редактировать такую таблицу
нельзя без исправления размещения)

Если LBA=0 занято под PMBR, а LBA=1 - под GPT primary header, то partition
array займёт 32 512-байтных сектора, или 4 4K-байтных. Соответственно
и first usable LBA будет 34 или 6 соответственно.

В сумме тут дикая смесь правил "считать по количеству секторов" или "считать
по размеру данных", поэтому думать такое неудобно.
Лучше запомнить пару чисел или свести в табличку.

> > А как он себя поведёт, если появятся диски, рапортующие 4Kb сектор (без
> > эмуляции 512-ых байт секторов)?
> man gnop - можете проверить :)

А зачем gnop? Это лишний уровень.

cd /var/tmp
dd if=/dev/zero of=disk1 bs=1m count=100
mdconfig -a -t vnode -f /var/tmp/disk1 -S 4096
gpart create -s GPT /dev/md0
gpart add -s 2m -t freebsd-ufs /dev/md0
yes 'Ha ha' | dd of=/dev/md0p1 bs=4096
dd if=disk1 | hd | less

и видим:

00001000  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
[...]
00002000  b6 7c 6e 51 cf 6e d6 11  8f f8 00 02 2d 09 71 2b  |І|nQоnж.Ь..-.q+|
00002010  67 a0 9e ab 3e 99 e1 11  80 be 00 01 02 64 8e a0  |g═╚>А.╬...d═|
00002020  06 00 00 00 00 00 00 00  05 02 00 00 00 00 00 00  |................|
00002030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
[...]
00006000  48 61 20 68 61 0a 48 61  20 68 61 0a 48 61 20 68  |Ha ha.Ha ha.Ha h|
00006010  61 0a 48 61 20 68 61 0a  48 61 20 68 61 0a 48 61  |a.Ha ha.Ha ha.Ha|
00006020  20 68 61 0a 48 61 20 68  61 0a 48 61 20 68 61 0a  | ha.Ha ha.Ha ha.|
00006030  48 61 20 68 61 0a 48 61  20 68 61 0a 48 61 20 68  |Ha ha.Ha ha.Ha h|


-netch-

Ответить