Seagate 7200.14 3Tb HDD под Gentoo с секторами 4k

Материал из AlexNook
Перейти к навигацииПерейти к поиску

Подошёл как-то момент, что мне стало не хватать установленных жёстких дисков в компьютере. Количество информации увеличивалось и я подумал о приобретении нового hdd. Выбор пал на новинку в то время - Seagate Barracuda 3000Gb ST3000DM001 7200.14. Ещё до покупки я понял, что при его установке придётся повозиться с его форматированием, так что описанные ниже действия не стали для меня неожиданностью.

Предварительная установка ПО

Т. к. на этом диске планировалось хранение данных, то разбиение на разделы не предусматривалось, всё что требовалось это настройка 3Tb диска с Advanced Format Technology под Gentoo c 1 разделом, отформатированным под XFS.

Сперва посмотрим, что у нас отобразилось в dmesg:

dmesg | egrep 'ata5|sd 4|sdd'
ata5: SATA max UDMA/133 abar m2048@0xbfffe800 port 0xbfffeb00 irq 19
sd 3:0:0:0: [sdd] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
sd 3:0:0:0: [sdd] 4096-byte physical blocks
sd 3:0:0:0: [sdd] Write Protect is off
sd 3:0:0:0: [sdd] Mode Sense: 00 3a 00 00
.....

Не смотря на то, что физические сектора на диске имеют размер по 4096 байт, логические сектора отображены как 512 байт.

Далее необходимо проверить, всё ли верно сконфигурированно в ядре (далее приведу образец не совсем своего конфига, но сделать можно по аналогии):

Linux Kernel Configuration: 2.6.38 kernel config
Enable the block layer (BLOCK)  ---> 
		[*] Support for large (2TB+) block devices and files (LBDAF) 
File systems  ---> 
		[*] The Extended 4 (ext4) filesystem 
		Partition Types  ---> 
			[*] Advanced Partition Selection (PARTITION_ADVANCED)  ---> 
				[*] EFI GUID Partition Support (EFI_PARTITION)


Note: LBDAF опция будет лишь в 32-х битных системах. У меня её не было, т. к. система 64 битная. Так же я не включал драйверы ext4, т. к. использую XFS.

Для верной разметки диска нам понадобится создать на нём GUID Partition Table (GPT), т. к. диск наш объёмом в 3Тб. Для этого ставим программу GPT fdisk

emerge sys-apps/gptfdisk
Note: Я буду использовать самую новыую на тот момент времени версию программы - 0.6.13

Далее ради интереса решил проверить, что выдаст старый добрый fdisk:

Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 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
Disk identifier: 0x00000000

Disk /dev/sdd doesn't contain a valid partition table

Разметка диска 3Tb advanced format 4k sectors

Запускаем gdisk

gdisk /dev/sdd

Далее я помещу целиком весь лог работы с программой, а ниже дам комментарии по командам:

router_a alex # gdisk /dev/sdd
GPT fdisk (gdisk) version 0.6.13

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): ?
b       back up GPT data to a file
c       change a partition's name
d       delete a partition
i       show detailed information on a partition
l       list known partition types
n       add a new partition
o       create a new empty GUID partition table (GPT)
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit
x       extra functionality (experts only)
?       print this menu

Command (? for help): x
Expert command (? for help): ?
a       set attributes
c       change partition GUID
d       display the sector alignment value
e       relocate backup data structures to the end of the disk
g       change disk GUID
h       recompute CHS values in protective/hybrid MBR
i       show detailed information on a partition
l       set the sector alignment value
m       return to main menu
n       create a new protective MBR
o       print protective MBR data
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       resize partition table
t       transpose two partition table entries
u       Replicate partition table on new device
v       verify disk
w       write table to disk and exit
z       zap (destroy) GPT data structures and exit
?       print this menu

Expert command (? for help): d
Partitions will begin on 2048-sector boundaries.

Expert command (? for help): l 8
Enter the sector alignment value (1-65536, default = 2048): 8

Expert command (? for help): d
Partitions will begin on 8-sector boundaries.

Expert command (? for help): m

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-5860533134, default = 34) or {+-}size{KMGTP}:
Information: Moved requested sector from 34 to 40 in
order to align on 8-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (40-5860533134, default = 5860533134) or {+-}size{KMGTP}: 5860533127
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700):
Changed type of partition to 'Linux/Windows data'

Command (? for help): i
Using 1
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Linux/Windows data)
Partition unique GUID: 14D31C05-5E8F-4120-AE5C-5EE2DB6DFC4C
First sector: 40 (at 20.0 KiB)
Last sector: 5860533127 (at 2.7 TiB)
Partition size: 5860533088 sectors (2.7 TiB)
Attribute flags: 0000000000000000
Partition name: Linux/Windows data

Command (? for help): c
Using 1
Enter name: FILMS

Command (? for help): p
Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 5556F0B6-6FEF-458A-917C-2023E9AEE0A6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 8-sector boundaries
Total free space is 13 sectors (6.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              40      5860533127   2.7 TiB     0700  FILMS

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): y
OK; writing new GUID partition table (GPT).
The operation has completed successfully.

Сперва, как видим, диск неразмечен и никаких таблиц разделов ещё не создано. Нам нужна именно GPT таблица, в отличие, от обычной MBR.

Далее и вывожу список поддерживаемых комманд: ? Затем переходи в режим эксперта x и смотрим, какие команды доступны в этом режиме: ?. Смотрим как выровнены сейчас сектора: d

8 логических секторов по 512 байт составляют 1 физический - 4096 байт

Нам нужно, чтобы на 1 сектор физический приходилось 8 секторов совместимиости (логических), т. к. он все по 512 байт, то есть у нас получится . Посмотреть более подробно с картинками можно на сайте Paragon (ссылка в конце статьи). Приведу лишь картинку от туда.

Далее устанавливаем выравнивание границ на 8 секторов: l 8. Смотрим как выровнены сейчас сектора: d. Возвращаемся в главное меню m и создаём таблицу разделов: n. При этом важно правильно задать последний сектор. Первый задаётся автоматически, а второй нужно задать руками. Это должно быть максимально возможное число которое нацело делится на 8 уменьшенное на единицу, т.к. нумерация LBA начинается с нуля. У меня последний сектор имеет номер 5860533134, ближайшее меньшее число, которое делится на 8 это будет 5860533128, далее уменьшаем его на единицу и получаем, что последний сектор, который ограничит размеры нашего HDD будет 5860533127.

Далее выводим информацию о текущем, только что созданном разделе, i. Далее даём имя диску c FILMS. Наконец выводим таблицу разделов p, и записываем все изменения непосредственно на сам HDD и выходим из программы w.

Теперь можно проверить как размечен наш диск с помощью другой утилиты, понимающей GPT - GNU Parted.

emerge -v parted

Запускаем её

parted /dev/sdd
router_a alex # parted /dev/sdd
GNU Parted 3.0
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
help
  align-check TYPE N                        check partition N for TYPE(min|opt)
        alignment
  help [COMMAND]                           print general help, or help on
        COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition
        table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table,
        available devices, free space, all found partitions, or a particular
        partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START
        and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition
        NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and
        copyright information of GNU Parted
(parted) p
p
Model: ATA ST3000DM001-9YN1 (scsi)
Disk /dev/sdd: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name   Flags
 1      20.5kB  3001GB  3001GB               FILMS

(parted)
(parted) u s
u s
(parted) p
p
Model: ATA ST3000DM001-9YN1 (scsi)
Disk /dev/sdd: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End          Size         File system  Name   Flags
 1      40s    5860533127s  5860533088s               FILMS

(parted)

(parted) align-check minimal 1
align-check minimal 1
1 aligned
(parted) q
q

Как обычно запустили вывод справки о программе - help. Далее печатаем информацию о текущей схеме разбиения диска p. Для того, чтобы информацию было удобнее сравнивать с той, что мы получили в GTP Fdisk - переходим к выводу информации по секторам u s + p.

Т. к. всё чётко, то можно проверить и выравнивание нашего раздела: align-check minimal 1 (более подробное описание можно получить из мана, ссылка на который есть в конце статьи). Теперь выходим из программы q.

Ну и под конец, можно посмотреть, что выводит fdisk:

fdisk -l
WARNING: GPT (GUID Partition Table) detected on '/dev/sdd'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
256 heads, 63 sectors/track, 363376 cylinders, total 5860533168 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
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1  4294967295  2147483647+  ee  GPT
Partition 1 does not start on physical sector boundary.

Форматирование раздела на диске в XFS с блоками 4kb

Когда разметка диска выполнена и создан необходимый нам раздел 1 на весь диск, то можно и отформатировать наш hdd. Я предпочём XFS.

mkfs.xfs -d name=/dev/sdd1 -b size=4k -l internal

При этом задаётся размер блока 4 килобайта. Вот вывод команды:

router_a alex # mkfs.xfs -d name=/dev/sdd1 -b size=4k -l internal
meta-data=/dev/sdd1              isize=256    agcount=4, agsize=183141659 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=732566636, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=32768, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0

Проверка диска

В завершение можно ещё раз протестировать наш диск:

dmesg | egrep 'ata5|sd 4|sdd'
router_a alex # dmesg | egrep 'ata5|sd 4|sdd'
ata5: SATA max UDMA/133 abar m2048@0xbfffe800 port 0xbfffeb00 irq 19
sd 3:0:0:0: [sdd] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
sd 3:0:0:0: [sdd] 4096-byte physical blocks
sd 3:0:0:0: [sdd] Write Protect is off
sd 3:0:0:0: [sdd] Mode Sense: 00 3a 00 00
sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO                                                                              or FUA
 sdd: unknown partition table
sd 3:0:0:0: [sdd] Attached SCSI disk
......
 sdd: sdd1
XFS (sdd1): correcting sb_features alignment problem
XFS (sdd1): Mounting Filesystem
XFS (sdd1): Ending clean mount

Далее попытался протестировать его с помощью bonnie, но так и не разобрался в её работе, и в том, является ли этот тест разрушающим данные.

router_a test # bonnie
File './Bonnie.31809', size: 104857600
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 3...Seeker 2...Seeker 1...start 'em...done...done...done...
              -------Sequential Output-------- ---Sequential Input-- --Random--
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine		MB		K/sec	%CPU	K/sec	%CPU	K/sec	%CPU	K/sec	%CPU	K/sec	%CPU 	/sec		%CPU
			100		84773	100.0	1227950	99.5	1324177	99.6	83621	100.0	3979944	97.1	218436.0	169.3

После чего проверил банальную скорость чтения

hdparm -t /dev/sdd
/dev/sdd:
 Timing buffered disk reads:  406 MB in  3.00 seconds = 135.27 MB/sec

на чём и успокоился.


Ссылки

Постарался собрать все полезные ссылки, которыми пользовался.

  • 4k sectors partitioning question
  • WD Advanced Format Drive on a non-Windows Operating System
  • Linux on 4KB-sector disks
  • 4K sector partition in Gentoo
  • GDISK man page
  • align check command
  • Paragon о выравнивании разделов на дисках под 4k