Автор Тема: Как правильно создать раздел 16ТВ [Решено]  (Прочитано 5071 раз)

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Имеем 8 дисков по 2ТВ собранных в аппаратный стрип. Чистыми имеем 14,6ТВ.
Про сборку было здесь https://forum.altlinux.org/index.php?topic=35943.msg271159#msg271159
На раздел пишутся видео-потоки, когда запись достигает около 2ТВ, резко падает скорость чтения в dmesg  валится I/O error (что-то вроде Buffer I/O error on device sdf, logical block 0).
Имеем 8 дисков по 2ТВ собранных в аппаратный стрип. Чистыми имеем 14,6ТВ. На раздел пишутся видео-потоки, когда запись достигает около 2ТВ, резко падает скорость чтения в dmesg  валится I/O error (что-то вроде Buffer I/O error on device sdf, logical block 0).
И после ребута система сваливается в аварийный режим, оно то и понятно раздел не монтируется.
fdisk девайс видит, а по "бывшему разделу выдаёт
# fdisk /dev/sdf1

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

/dev/sdf1: device contains a valid 'xfs' signature, it's strongly recommended to wipe the device by command wipefs(8) if this setup is unexpected to avoid possible collisions.

Device does not contain a recognized partition table.
The size of this disk is 14,6 TiB (15991990894080 bytes). DOS partition table format can not be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).

Created a new DOS disklabel with disk identifier 0xacdfe55c.

Command (m for help): m
При этом
# fdisk -l /dev/sdf

Disk /dev/sdf: 14,6 TiB, 15991991959552 bytes, 31234359296 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
Disklabel type: gpt
Disk identifier: 2D04812C-5E88-4C79-8F1A-1CFA6F73E589

Device     Start         End     Sectors  Size Type
/dev/sdf1   2048 31234359262 31234357215 14,6T Linux filesystem
Как и чем правильно создать раздел (я так понимаю в gpt и xfs)? Гугление толком ни к чему не привело, описывают разные методы, но на каком-то шаге всегда происходит затык. Если кто может, что-то дельное посоветовать, буду рад.
« Последнее редактирование: 27.04.2016 15:50:58 от Cool_Lamer »

Оффлайн Vovka-Korovka

  • alt linux team
  • ***
  • Сообщений: 1 186
  • True Metal Cow
Re: Как правильно создать раздел 15ТВ
« Ответ #1 : 19.04.2016 12:44:39 »
fdisk девайс видит, а по "бывшему разделу выдаёт

fdisk не умеет GPT. Не надо его использовать.

Цитировать
Как и чем правильно создать раздел (я так понимаю в gpt и xfs)? Гугление толком ни к чему не привело, описывают разные методы, но на каком-то шаге всегда происходит затык. Если кто может, что-то дельное посоветовать, буду рад.

Из консольных - gdisk, parted. Из графических - тот же gparted. На вики арча есть примеры

https://wiki.archlinux.org/index.php/GUID_Partition_Table#Partitioning_examples

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 15ТВ
« Ответ #2 : 19.04.2016 12:58:29 »
и xfs ?
Не факт. Можно ещё mdadm+ext4. Если xfs, или btrfs, то можно как поверх md-устройства, так и собрать страйп средствами самих xfs, или btrfs. В общем, поле для проб широкое.

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Re: Как правильно создать раздел 15ТВ
« Ответ #3 : 19.04.2016 14:56:35 »
Не факт. Можно ещё mdadm+ext4. Если xfs, или btrfs, то можно как поверх md-устройства, так и собрать страйп средствами самих xfs, или btrfs. В общем, поле для проб широкое.
Вашпе ничего не понял. mdadm то тут при чём, стрип жеж аппаратный.

Из консольных - gdisk, parted. Из графических - тот же gparted. На вики арча есть примеры
https://wiki.archlinux.org/index.php/GUID_Partition_Table#Partitioning_examples
Попробую.

Где-то попадалось на глаза статья, что ядро нужно патчить для gpt, ибо из коробки оно его не поддерживает, есть ли такой момент?
Навеяло закономерностью, ошибки валятся после достижения занятого пространства около 2Гб = размеру одного диска в стрипе.

Оффлайн Vovka-Korovka

  • alt linux team
  • ***
  • Сообщений: 1 186
  • True Metal Cow
Re: Как правильно создать раздел 15ТВ
« Ответ #4 : 19.04.2016 15:24:44 »
Где-то попадалось на глаза статья, что ядро нужно патчить для gpt, ибо из коробки оно его не поддерживает, есть ли такой момент?

Не надо, все из коробки работает. Единственный момент, нужно учесть, что с GPT лучше использовать UEFI режим. Иначе могут быть проблемы.

Цитировать
Навеяло закономерностью, ошибки валятся после достижения занятого пространства около 2Гб = размеру одного диска в стрипе.

Вы бы хоть сказали, как вы тестируете. Как и чем диск разбивали. Например, если вы делали обычный mbr, то там максимальный размер раздела - 2 терабайта. Т.е. у вас банально могло место на разделе закончится.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 15ТВ
« Ответ #5 : 19.04.2016 15:46:07 »
Вашпе ничего не понял. mdadm то тут при чём, стрип жеж аппаратный.
Это я стормозил. Тогда ext4 сразу. :-) xfs не надо, наверное: её фишка - прямая работа с носителями, объединёнными в общее пространство (в том числе и RAID) средствами самой ФС. Хотя можно и xfs. У btrfs примерно то же самое, хотя вот про понимание аппаратной части драйвером ФС не пишут, как в случае xfs.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 15ТВ
« Ответ #6 : 19.04.2016 15:47:40 »
Не надо, все из коробки работает. Единственный момент, нужно учесть, что с GPT лучше использовать UEFI режим. Иначе могут быть проблемы.
С чего бы это ? Это просто таблица разделов на здоровом носителе, не более того. Если ОС про GPT знает, при чём тут UEFI ? С него же не грузиться.

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Re: Как правильно создать раздел 15ТВ
« Ответ #7 : 19.04.2016 15:53:25 »
Вы бы хоть сказали, как вы тестируете. Как и чем диск разбивали. Например, если вы делали обычный mbr, то там максимальный размер раздела - 2 терабайта. Т.е. у вас банально могло место на разделе закончится.
Диск изначально был форматирован и монтирован при установке системы, но в работе вылезла такая бяка. Теперь пересоздаю заново.
Нашёл статью, сделал по ней, ибо по ссылке из вики не особо понял что там происходит.
Лог работы под спойлером. По результату, смешные 5МБ/с скорость чтения (по идее должно быть 300+), это реал или из-за того что на контроллере висят диски не правильно отображается? И
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Тоже напрягает
Спойлер
# gdisk /dev/sdf
GPT fdisk (gdisk) version 0.8.10

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

Found valid GPT with protective MBR; using GPT.

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): d
Partitions will begin on 2048-sector boundaries.

Expert command (? for help): l8
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-31234359262, default = 40) or {+-}size{KMGTP}:
Last sector (40-31234359262, default = 31234359262) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: D8E4CD54-5AD0-4292-B84B-41D1FBD9868C
First sector: 40 (at 20.0 KiB)
Last sector: 31234359262 (at 14.5 TiB)
Partition size: 31234359223 sectors (14.5 TiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'

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

Command (? for help): p
Disk /dev/sdf: 31234359296 sectors, 14.5 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): CD7E3A24-0E68-40E8-8D28-5058FD989E0A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 31234359262
Partitions will be aligned on 8-sector boundaries
Total free space is 6 sectors (3.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              40     31234359262   14.5 TiB    8300  STORAGE_NYS1

Command (? for help): w

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

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdf.
The operation has completed successfully.

# parted /dev/sdf
GNU Parted 3.2
Using /dev/sdf
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) 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
  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  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
Model: LSI Logical Volume (scsi)
Disk /dev/sdf: 16,0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name          Flags
 1      20,5kB  16,0TB  16,0TB               STORAGE_NYS1

(parted) u s
(parted) p
Model: LSI Logical Volume (scsi)
Disk /dev/sdf: 31234359296s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start  End           Size          File system  Name          Flags
 1      40s    31234359262s  31234359223s               STORAGE_NYS1

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

# mkfs.xfs -d name=/dev/sdf1 -b size=4k -l internal
meta-data=/dev/sdf1              isize=256    agcount=15, agsize=268435455 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=3904294902, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mount /dev/sdf1 /mnt/nys1
mount: mount /dev/sdf1 on /mnt/nys1 failed: Структуру необходимо почистить

# mkfs.xfs -f /dev/sdf1
meta-data=/dev/sdf1              isize=256    agcount=15, agsize=268435455 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=3904294400, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mount /dev/sdf1 /mnt/nys1
# hdparm -t /dev/sdf

/dev/sdf:
Timing buffered disk reads:  18 MB in  3.46 seconds =   5.20 MB/sec
« Последнее редактирование: 19.04.2016 15:57:37 от Cool_Lamer »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 15ТВ
« Ответ #8 : 19.04.2016 16:00:30 »
По результату, смешные 5МБ/с скорость чтения (по идее должно быть 300+),
А если dd if=/dev/urandom of=/mnt/nys1/testfile bs=1M count=1000 ? Потом в обратную сторону, в /dev/null и без count.

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Re: Как правильно создать раздел 15ТВ
« Ответ #9 : 19.04.2016 16:09:34 »
А если dd if=/dev/urandom of=/mnt/nys1/testfile bs=1M count=1000 ? Потом в обратную сторону, в /dev/null и без count.
# dd if=/dev/urandom of=/mnt/nys1/testfile bs=1M count=1000
1000+0 записей получено
1000+0 записей отправлено
 скопировано 1048576000 байт (1,0 GB), 73,9944 c, 14,2 MB/c
# dd if=/mnt/nys1/testfile of=/dev/null bs=1M
1000+0 записей получено
1000+0 записей отправлено
 скопировано 1048576000 байт (1,0 GB), 0,118871 c, 8,8 GB/c

Что из этого следует?) И правильно ли я создал раздел?
« Последнее редактирование: 19.04.2016 17:19:33 от Cool_Lamer »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 16ТВ
« Ответ #10 : 19.04.2016 18:23:06 »
Кстати, я забыл сказать, что чтение надо было проверять после сброса кэша (ну или там перезагрузки), а то записанный файл из памяти прочитался скорее всего. И можно count побольше сделать, для сравнения.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: Как правильно создать раздел 16ТВ
« Ответ #11 : 19.04.2016 21:32:13 »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 15ТВ
« Ответ #12 : 19.04.2016 21:39:21 »
Что из этого следует?)
Начальные данные в статистике. :-) А на один hdd с какой скоростью пишется ? Какой драйвер у контроллера, сколько ядер, на сколько развесился драйвер ?

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Re: Как правильно создать раздел 16ТВ
« Ответ #13 : 20.04.2016 16:54:07 »
Кстати, я забыл сказать, что чтение надо было проверять после сброса кэша (ну или там перезагрузки), а то записанный файл из памяти прочитался скорее всего. И можно count побольше сделать, для сравнения.
После перезагрузки
# dd if=/dev/urandom of=/mnt/nys1/testfile bs=1M count=1000
1000+0 записей получено
1000+0 записей отправлено
 скопировано 1048576000 байт (1,0 GB), 80,4353 c, 13,0 MB/c
# dd if=/mnt/nys1/testfile of=/dev/null bs=1M
1000+0 записей получено
1000+0 записей отправлено
 скопировано 1048576000 байт (1,0 GB), 0,136374 c, 7,7 GB/c
Забыл сказать, на массив пишется 60 потоков видео, по 3-5МБ/с каждый.
По прерываниям всё очень грустно вышло.
cat /proc/interrupts
# cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  0:         16          0          0          0  IR-IO-APIC-edge      timer
  1:          3          0          0          0  IR-IO-APIC-edge      i8042
  5:          0          0          0          0  IR-IO-APIC-edge      parport0
  7:          7          0          0          0  IR-IO-APIC-edge
  8:          1          0          0          0  IR-IO-APIC-edge      rtc0
  9:          3          0          0          0  IR-IO-APIC-fasteoi   acpi
 12:          4          0          0          0  IR-IO-APIC-edge      i8042
 16:         33          0          0          0  IR-IO-APIC-fasteoi   ehci_hcd:usb1
 23:         37          0          0          0  IR-IO-APIC-fasteoi   ehci_hcd:usb2
 40:          0          0          0          0  DMAR_MSI-edge      dmar0
 41:          0          0          0          0  DMAR_MSI-edge      dmar1
 42:      28720          0          0          0  IR-PCI-MSI-edge      mpt2sas0-msix0
 43:    4583354          0          0          0  IR-PCI-MSI-edge      eth0
 44:        506          0          0          0  IR-PCI-MSI-edge      xhci_hcd
 45:       7743          0          0          0  IR-PCI-MSI-edge      ahci
 46:         14          0          0          0  IR-PCI-MSI-edge      mei_me
 47:         46          0          0          0  IR-PCI-MSI-edge      i915
 48:         59          0          0          0  IR-PCI-MSI-edge      snd_hda_intel
NMI:         13          6         13          6   Non-maskable interrupts
LOC:      60926      69085      98865      76764   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:         13          6         13          6   Performance monitoring interrupts
IWI:          1          0          0          0   IRQ work interrupts
RTR:          3          0          0          0   APIC ICR read retries
RES:       1275      11325       9977      12169   Rescheduling interrupts
CAL:        849        895        840        724   Function call interrupts
TLB:         64         52         41         40   TLB shootdowns
TRM:          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0   Threshold APIC interrupts
MCE:          0          0          0          0   Machine check exceptions
MCP:          5          5          5          5   Machine check polls
HYP:          0          0          0          0   Hypervisor callback interrupts
ERR:          7
MIS:          0
# cat /proc/interrupts | grep "CPU\|ahci"
           CPU0       CPU1       CPU2       CPU3
 45:       6602          0          0          0  IR-PCI-MSI-edge      ahci
# cat /proc/interrupts | grep "CPU\|mpt2sas0"
           CPU0       CPU1       CPU2       CPU3
 42:       1311          0          0          0  IR-PCI-MSI-edge      mpt2sas0-msix0
После запуска irqbalance картина координально меняется. После перезагрузки, запуск irqbalance по выводу interrupts ничего не дал, хотя по top (htop) нагрузка на ядрах примерно одинаковая.
А на один hdd с какой скоростью пишется ?
А как глянуть? iotop iostat, что-то не очень понятно показывают (или я их не правильно юзаю)
#iostat /dev/sdf
Linux 3.16.0-4-amd64 (mw-nys)   20.04.2016      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5,57    0,00    2,74    1,16    0,00   90,53

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdf              32,63         3,44     16462,80       7360   35184128
Интересно, а какую скорость показывает seeker
# ./seeker /dev/sdf
Seeker v2.0, 2007-01-15, http://www.linuxinsight.com/how_fast_is_your_disk.html
Benchmarking /dev/sdf [571088MB], wait 30 seconds.............................
Results: 94 seeks/second, 10.57 ms random access time
« Последнее редактирование: 20.04.2016 17:17:29 от Cool_Lamer »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как правильно создать раздел 16ТВ
« Ответ #14 : 20.04.2016 17:14:28 »
После перезагрузки
# dd if=/dev/urandom of=/mnt/nys1/testfile bs=1M count=1000
# dd if=/mnt/nys1/testfile of=/dev/null bs=1M
Кэш сбрасывать надо между двумя dd. Первый пишет на носитель через кэш, второй берёт то, что ещё лежит в кэше, а не на носителе. count выбрать так, чтобы гарантированно выйти за пределы кэша.

Раз с очередями проблемы, это вот хоть рукаи по разным ядрам растащить:
42:      28720          0          0          0  IR-PCI-MSI-edge      mpt2sas0-msix0
43:    4583354          0          0          0  IR-PCI-MSI-edge      eth0
45:       7743          0          0          0  IR-PCI-MSI-edge      ahci
Если я правильно понял, что mpt2sas - это драйвер контроллера.
После перезагрузки, запуск irqbalance по выводу interrupts ничего не дал
То есть, CPU 1, 2 и 3 так и не начали обрабатывать прерывания от устройств ? Это странно.
« Последнее редактирование: 20.04.2016 17:21:22 от asy »