Seagate 7200.14 3Tb HDD под Gentoo с секторами 4k
Подошёл как-то момент, что мне стало не хватать установленных жёстких дисков в компьютере. Количество информации увеличивалось и я подумал о приобретении нового hdd. Выбор пал на новинку в то время - Seagate Barracuda 3000Gb ST3000DM001 7200.14. Ещё до покупки я понял, что при его установке придётся повозиться с его форматированием, так что описанные ниже действия не стали для меня неожиданностью.
Предварительная установка ПО
Т. к. на этом диске планировалось хранение данных, то разбиение на разделы не предусматривалось, всё что требовалось это настройка 3Tb диска с Advanced Format Technology под Gentoo c 1 разделом, отформатированным под XFS.
Сперва посмотрим, что у нас отобразилось в dmesg:
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) |
Для верной разметки диска нам понадобится создать на нём GUID Partition Table (GPT), т. к. диск наш объёмом в 3Тб. Для этого ставим программу GPT fdisk
Далее ради интереса решил проверить, что выдаст старый добрый 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
Далее я помещу целиком весь лог работы с программой, а ниже дам комментарии по командам:
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
Нам нужно, чтобы на 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.
Запускаем её
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:
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.
При этом задаётся размер блока 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
Проверка диска
В завершение можно ещё раз протестировать наш диск:
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
После чего проверил банальную скорость чтения
/dev/sdd:
Timing buffered disk reads: 406 MB in 3.00 seconds = 135.27 MB/sec
на чём и успокоился.
Ссылки
Постарался собрать все полезные ссылки, которыми пользовался.