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'
  1. ata5: SATA max UDMA/133 abar m2048@0xbfffe800 port 0xbfffeb00 irq 19
  2. sd 3:0:0:0: [sdd] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
  3. sd 3:0:0:0: [sdd] 4096-byte physical blocks
  4. sd 3:0:0:0: [sdd] Write Protect is off
  5. sd 3:0:0:0: [sdd] Mode Sense: 00 3a 00 00
  6. .....

Не смотря на то, что физические сектора на диске имеют размер по 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:

  1. Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
  2. 255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
  3. Units = sectors of 1 * 512 = 512 bytes
  4. Sector size (logical/physical): 512 bytes / 4096 bytes
  5. I/O size (minimum/optimal): 4096 bytes / 4096 bytes
  6. Disk identifier: 0x00000000
  7.  
  8. Disk /dev/sdd doesn't contain a valid partition table

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

Запускаем gdisk

gdisk /dev/sdd

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

  1. router_a alex # gdisk /dev/sdd
  2. GPT fdisk (gdisk) version 0.6.13
  3.  
  4. Partition table scan:
  5.   MBR: not present
  6.   BSD: not present
  7.   APM: not present
  8.   GPT: not present
  9.  
  10. Creating new GPT entries.
  11.  
  12. Command (? for help): ?
  13. b       back up GPT data to a file
  14. c       change a partition's name
  15. d       delete a partition
  16. i       show detailed information on a partition
  17. l       list known partition types
  18. n       add a new partition
  19. o       create a new empty GUID partition table (GPT)
  20. p       print the partition table
  21. q       quit without saving changes
  22. r       recovery and transformation options (experts only)
  23. s       sort partitions
  24. t       change a partition's type code
  25. v       verify disk
  26. w       write table to disk and exit
  27. x       extra functionality (experts only)
  28. ?       print this menu
  29.  
  30. Command (? for help): x
  31. Expert command (? for help): ?
  32. a       set attributes
  33. c       change partition GUID
  34. d       display the sector alignment value
  35. e       relocate backup data structures to the end of the disk
  36. g       change disk GUID
  37. h       recompute CHS values in protective/hybrid MBR
  38. i       show detailed information on a partition
  39. l       set the sector alignment value
  40. m       return to main menu
  41. n       create a new protective MBR
  42. o       print protective MBR data
  43. p       print the partition table
  44. q       quit without saving changes
  45. r       recovery and transformation options (experts only)
  46. s       resize partition table
  47. t       transpose two partition table entries
  48. u       Replicate partition table on new device
  49. v       verify disk
  50. w       write table to disk and exit
  51. z       zap (destroy) GPT data structures and exit
  52. ?       print this menu
  53.  
  54. Expert command (? for help): d
  55. Partitions will begin on 2048-sector boundaries.
  56.  
  57. Expert command (? for help): l 8
  58. Enter the sector alignment value (1-65536, default = 2048): 8
  59.  
  60. Expert command (? for help): d
  61. Partitions will begin on 8-sector boundaries.
  62.  
  63. Expert command (? for help): m
  64.  
  65. Command (? for help): n
  66. Partition number (1-128, default 1):
  67. First sector (34-5860533134, default = 34) or {+-}size{KMGTP}:
  68. Information: Moved requested sector from 34 to 40 in
  69. order to align on 8-sector boundaries.
  70. Use 'l' on the experts' menu to adjust alignment
  71. Last sector (40-5860533134, default = 5860533134) or {+-}size{KMGTP}: 5860533127
  72. Current type is 'Linux/Windows data'
  73. Hex code or GUID (L to show codes, Enter = 0700):
  74. Changed type of partition to 'Linux/Windows data'
  75.  
  76. Command (? for help): i
  77. Using 1
  78. Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Linux/Windows data)
  79. Partition unique GUID: 14D31C05-5E8F-4120-AE5C-5EE2DB6DFC4C
  80. First sector: 40 (at 20.0 KiB)
  81. Last sector: 5860533127 (at 2.7 TiB)
  82. Partition size: 5860533088 sectors (2.7 TiB)
  83. Attribute flags: 0000000000000000
  84. Partition name: Linux/Windows data
  85.  
  86. Command (? for help): c
  87. Using 1
  88. Enter name: FILMS
  89.  
  90. Command (? for help): p
  91. Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
  92. Logical sector size: 512 bytes
  93. Disk identifier (GUID): 5556F0B6-6FEF-458A-917C-2023E9AEE0A6
  94. Partition table holds up to 128 entries
  95. First usable sector is 34, last usable sector is 5860533134
  96. Partitions will be aligned on 8-sector boundaries
  97. Total free space is 13 sectors (6.5 KiB)
  98.  
  99. Number  Start (sector)    End (sector)  Size       Code  Name
  100.    1              40      5860533127   2.7 TiB     0700  FILMS
  101.  
  102. Command (? for help): w
  103.  
  104. Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
  105. PARTITIONS!!
  106.  
  107. Do you want to proceed, possibly destroying your data? (Y/N): y
  108. OK; writing new GUID partition table (GPT).
  109. The operation has completed successfully.

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

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

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

Нам нужно, чтобы на 1 сектор физический приходилось 8 секторов совместимиости (логических), т. к. он все по 512 байт, то есть у нас получится 512 \times 8 = 4096. Посмотреть более подробно с картинками можно на сайте 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
  1. router_a alex # parted /dev/sdd
  2. GNU Parted 3.0
  3. Using /dev/sdd
  4. Welcome to GNU Parted! Type 'help' to view a list of commands.
  5. (parted) help
  6. help
  7.   align-check TYPE N                        check partition N for TYPE(min|opt)
  8.         alignment
  9.   help [COMMAND]                           print general help, or help on
  10.         COMMAND
  11.   mklabel,mktable LABEL-TYPE               create a new disklabel (partition
  12.         table)
  13.   mkpart PART-TYPE [FS-TYPE] START END     make a partition
  14.   name NUMBER NAME                         name partition NUMBER as NAME
  15.   print [devices|free|list,all|NUMBER]     display the partition table,
  16.         available devices, free space, all found partitions, or a particular
  17.         partition
  18.   quit                                     exit program
  19.   rescue START END                         rescue a lost partition near START
  20.         and END
  21.   rm NUMBER                                delete partition NUMBER
  22.   select DEVICE                            choose the device to edit
  23.   set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  24.   toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition
  25.         NUMBER
  26.   unit UNIT                                set the default unit to UNIT
  27.   version                                  display the version number and
  28.         copyright information of GNU Parted
  29. (parted) p
  30. p
  31. Model: ATA ST3000DM001-9YN1 (scsi)
  32. Disk /dev/sdd: 3001GB
  33. Sector size (logical/physical): 512B/4096B
  34. Partition Table: gpt
  35.  
  36. Number  Start   End     Size    File system  Name   Flags
  37.  1      20.5kB  3001GB  3001GB               FILMS
  38.  
  39. (parted)
  40. (parted) u s
  41. u s
  42. (parted) p
  43. p
  44. Model: ATA ST3000DM001-9YN1 (scsi)
  45. Disk /dev/sdd: 5860533168s
  46. Sector size (logical/physical): 512B/4096B
  47. Partition Table: gpt
  48.  
  49. Number  Start  End          Size         File system  Name   Flags
  50.  1      40s    5860533127s  5860533088s               FILMS
  51.  
  52. (parted)
  53.  
  54. (parted) align-check minimal 1
  55. align-check minimal 1
  56. 1 aligned
  57. (parted) q
  58. q

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

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

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

fdisk -l
  1. WARNING: GPT (GUID Partition Table) detected on '/dev/sdd'! The util fdisk doesn't support GPT. Use GNU Parted.
  2.  
  3.  
  4. Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
  5. 256 heads, 63 sectors/track, 363376 cylinders, total 5860533168 sectors
  6. Units = sectors of 1 * 512 = 512 bytes
  7. Sector size (logical/physical): 512 bytes / 4096 bytes
  8. I/O size (minimum/optimal): 4096 bytes / 4096 bytes
  9. Disk identifier: 0x00000000
  10.  
  11.    Device Boot      Start         End      Blocks   Id  System
  12. /dev/sdd1               1  4294967295  2147483647+  ee  GPT
  13. 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 килобайта. Вот вывод команды:

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

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

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

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

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

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

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

hdparm -t /dev/sdd
  1. /dev/sdd:
  2.  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