Bug 32679 - GPT-разделы тоже надо выравнивать на границу мегабайта
Summary: GPT-разделы тоже надо выравнивать на границу мегабайта
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: alterator-vm (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Олег Соловьев
QA Contact: qa-sisyphus
URL: http://git.altlinux.org/gears/e/evms....
Keywords: distro-blocker
Depends on: 23848
Blocks: 30940 16000
  Show dependency tree
 
Reported: 2016-10-28 17:42 MSK by Michael Shigorin
Modified: 2016-11-02 19:43 MSK (History)
9 users (show)

See Also:


Attachments
для архива: не сработало (2.58 KB, patch)
2016-10-28 22:45 MSK, Michael Shigorin
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Shigorin 2016-10-28 17:42:45 MSK
По аналогии с #23848 надо сделать выравнивание начала создаваемых разделов на границу мегабайта/2048s (4K-диски, SSD, striped RAID).

Похоже, plugins/gpt/gptsegmgr.c до сих пор грезит цилиндрами.
Коммит для dos ptbl: 0298c9007d712b36a1f0eacd840a0e4d28025893
Comment 1 Michael Shigorin 2016-10-28 22:45:14 MSK
Created attachment 6849 [details]
для архива: не сработало

Кажется, победил по мотивам 0298c9007d712b36a1f0eacd840a0e4d28025893.
Надо патч почистить от первой попытки, в которой попытался проехаться на работающих по цилиндрам функциях -- прилагаю её на всякий...
Comment 2 Michael Shigorin 2016-10-28 23:07:48 MSK
Просьба к заинтересованным глянуть http://webery.altlinux.org/task/171543

Патч: http://git.altlinux.org/people/mike/packages/?p=evms.git;a=commitdiff;h=fb0b2536cca20fc3ee718900c4670481495078d4

Вот как выглядят у меня два созданных acc гигабайтных раздела на предварительно созданной gdisk'ом GPT:

# fdisk -l /dev/sdb
Диск /dev/sdb: 111,8 GiB, 120034123776 байт, 234441648 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 2798949D-1C1E-4025-A350-4FC351F43A95

Устр-во    начало Конец Секторы Размер Тип
/dev/sdb1     2048 2097151 2095104  1023M Microsoft basic data
/dev/sdb2  2097152 4192255 2095104  1023M Microsoft basic data
# parted /dev/sdb align-check opt 2         
2 выровнен
# parted /dev/sdb align-check opt 1
1 выровнен
# _
Comment 3 Repository Robot 2016-11-01 21:29:49 MSK
evms-2.5.5-alt35.3 -> sisyphus:

* Fri Oct 28 2016 Michael Shigorin <mike@altlinux> 2.5.5-alt35.3
- gpt plugin: just round_up_to_min_boundary() of 1MB/2048s either
  (closes: #32679)

* Fri Oct 28 2016 Michael Shigorin <mike@altlinux> 2.5.5-alt35.2
- dos plugin: just round_up_to_min_boundary() of 1MB/2048s

* Thu Oct 27 2016 Michael Shigorin <mike@altlinux> 2.5.5-alt35.1
- revert 2.5.5-alt29 patches by timonbl4@ to avoid collisions

* Thu Oct 27 2016 Michael Shigorin <mike@altlinux> 2.5.5-alt35
- apply stanv@'s patch, see #26925 comment 5 (closes: #26925)
Comment 4 Sergey V Turchin 2016-11-02 13:55:41 MSK
В VirtualBox у меня:
# fdisk -l /dev/sda
Диск /dev/sda: 25 GiB, 26834665472 байт, 52411456 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 810B0A4C-A02B-DB4B-B210-11AC14C4ABD0

Устр-во    начало Конец Секторы Размер Тип
/dev/sda1      2048   524287   522240   255M EFI
/dev/sda2    524288   538623    14336     7M BIOS boot
/dev/sda3    538624  3604479  3065856   1,5G Microsoft basic data
/dev/sda4   3604480 35230544 31626065  15,1G Microsoft basic data
/dev/sda5  35231744 39178239  3946496   1,9G Microsoft basic data
/dev/sda6  39178240 43698175  4519936   2,2G Microsoft basic data
/dev/sda7  43698176 47480831  3782656   1,8G Microsoft basic data
/dev/sda8  47480832 52402175  4921344   2,4G Microsoft basic data
[root@localhost ~]# parted /dev/sda
GNU Parted 3.2.46-e4ae
Используется /dev/sda
Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
(parted) align-check opt 1                                                
1 выровнен
(parted) align-check opt 2
2 выровнен
(parted) align-check opt 3
3 выровнен
(parted) align-check opt 4
4 выровнен
(parted) align-check opt 5
5 выровнен
(parted) align-check opt 6
6 выровнен
(parted) align-check opt 7
7 выровнен
(parted) align-check opt 8
8 выровнен
Comment 5 Michael Shigorin 2016-11-02 14:28:41 MSK
Спасибо!
Comment 6 Ivan Zakharyaschev 2016-11-02 19:43:10 MSK
Поправил крайние случаи в свежих изменениях, прошу протестировать task 171819 и перечитать код (чем показывать патчи -- там 3 содержательных, остальные косметичесие -- проще чистый код этого кусочка показать):


/*
 *  End segment on a minimum alignment boundary.
 */
{
  const lba_t next_free_lba = freespace->start + sector_offset + size;
  seg_end_lba = ( next_free_lba > seg_start_lba ) ? next_free_lba - 1 : seg_start_lba;

  const lba_t rounded_next_free_lba = round_down_to_min_boundary(next_free_lba);
  if ( rounded_next_free_lba > seg_start_lba )
    seg_end_lba = rounded_next_free_lba - 1;
}