Bug 26925 - Неправильно выравниваются логические разделы на hdd c 4K сектором
: Неправильно выравниваются логические разделы на hdd c 4K сектором
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/alterator-vm)
: unstable
: all Linux
: P3 major
Assigned To:
:
: http://altlinux.org/BigSector
:
: 23848
: 16000 23155 27685 30940 32650
  Show dependency tree
 
Reported: 2012-02-13 00:27 by
Modified: 2016-11-02 22:11 (History)


Attachments
выравниваем и логические разделы (472 bytes, patch)
2016-10-28 17:31, Michael Shigorin
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2012-02-13 00:27:02
Вот что получилось после установки
altlinux-6.0.1_beta-20120124-kdesktop-x86_64-ru-install-dvd5.iso:

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 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/sda1   *        2048      622591      310272   83  Linux
/dev/sda4          622592   625142447   312259928    5  Extended
/dev/sda5          622629     9009151     4193261+  83  Linux
Partition 5 does not start on physical sector boundary.
/dev/sda6         9009189    39727103    15358957+  83  Linux
Partition 6 does not start on physical sector boundary.
/dev/sda7        39727107    48113663     4193278+  83  Linux
Partition 7 does not start on physical sector boundary.
/dev/sda8        48113667    68591615    10238974+  82  Linux swap / Solaris
Partition 8 does not start on physical sector boundary.
/dev/sda9        68591628   109549567    20478970   83  Linux
Partition 9 does not start on physical sector boundary.

HDD TOSHIBA MK3259GSXP. Удивило, что HDD на 320Gb имеет 4K сектор. Не из-за
этого ли инсталлятор ошибся ? Вроде бы, проблема с 4K сектором уже решалась.
------- Comment #1 From 2012-02-13 02:30:07 -------
Вообще, у него 4K сектор
http://storage.toshiba.eu/cms/en/hdd/multimedia/product_detail.jsp?productid=382
------- Comment #2 From 2012-02-13 14:45:56 -------
1. Кто диски разбивал???
2. Какие шаги были в инсталяторе VM ?
3. Ну и скажите mount хотябы или cat /proc/mounts
4. Ставили на чистый диск?
------- Comment #3 From 2012-02-13 15:34:45 -------
1. Я. Ну и инсталлятор. :-)

2. Ручной режим и последовательное создание разделов.

3. А это на что-то влияет ? 
# cat /proc/mounts 
rootfs / rootfs rw 0 0
udevfs /dev devtmpfs rw,relatime,size=5120k,nr_inodes=351886,mode=755 0 0
/dev/sda5 / ext4 rw,relatime,user_xattr,acl,barrier=1,data=ordered 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
runfs /run tmpfs rw,relatime,size=5120k,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0
0
shmfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda1 /boot ext4
rw,nosuid,nodev,noexec,relatime,user_xattr,acl,barrier=1,stripe=4,data=ordered
0 0
/dev/sda9 /home ext4 rw,nosuid,relatime,user_xattr,acl,barrier=1,data=ordered 0
0
/dev/sda6 /usr ext4 rw,nodev,relatime,user_xattr,acl,barrier=1,data=ordered 0 0
/dev/sda7 /var ext4 rw,nosuid,relatime,user_xattr,acl,barrier=1,data=ordered 0
0
/dev/sda9 /tmp ext4 rw,relatime,user_xattr,acl,barrier=1,data=ordered 0 0
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0

(хм, а что это за rpc_pipefs ? впрочем, к этой проблеме не относится)

/dev/sda10 создан уже потом, собственно, в момент разметки оставшегося
пространства и заметил проблему.

4. На пустой. Правда вот не помню, на изначально пустой, или я имеющиеся до
того разделы от MeeGo сносил в эту же загрузку инсталлятора. Это нотебук Acer
Aspire 5733Z с предустановленной MeeGo. Мог снести и сразу разметить, без
записи пустой таблицы и перезагрузки...
------- Comment #4 From 2012-02-13 23:19:30 -------
(In reply to comment #2)

> 1. Кто диски разбивал???

А ведь уже было:  https://bugzilla.altlinux.org/16000#c5
------- Comment #5 From 2012-02-14 17:26:58 -------
Из отчета Сергея Афонина, видно, что проблема всплывает только для LOGICAL
разделов.

Т.е. разделы которые внутри EXTENDED.

Primary разделы как и должны выровнены на 2048.

А в EVMS для создания LOGICAL раздела идет вызов особенной фунцкии:

segs.c:

int create_logical_partition( LOGICALDISK *ld, DISKSEG *seg, DLA_Entry *dla,
DISKSEG *freespace ){


Которая и начинает вносить свои коррективы, и выранивать на сегмент, дорожку и
т.д. а не на сектор.

Вот ее и нужно исследовать.

Я думаю если откатить мои патчи для выравнивания primary - разделов, вам не
полегчает.

Выход: делайте Primary разделы.
------- Comment #6 From 2012-02-14 17:55:06 -------
(In reply to comment #5)

> Выход: делайте Primary разделы.

Их слишком мало... На сколько сложно дофиксить ещё и segs.c ?
------- Comment #7 From 2012-02-20 17:27:10 -------
Сергей, вы научились воспроизводить ошибку?
Вы можете протестировать новый evms до того как он попадет в Sisyphus?

http://git.altlinux.org/people/stanv/packages/?p=evms.git;a=shortlog;h=refs/heads/sisyphus

2.5.5-alt23.1
------- Comment #8 From 2012-02-20 17:55:51 -------
(In reply to comment #7)

> Сергей, вы научились воспроизводить ошибку?

Я даже не помню, чтобы меня кто-то об этом просил, или что есть проблемы с
воспроизведением. :-)

> Вы можете протестировать новый evms до того как он попадет в Sisyphus ?

Пока не знаю. Если hdd найду с 4K, попробую. Переставлять систему на нотебуке -
это надо время выбрать, всё же для работы использую. Хотя и надо бы
переставить.
------- Comment #9 From 2012-02-21 11:18:06 -------
Если не получится, тогда мне нужен HDD диск как у вас.
У меня сейчас все логические сектора выравниваются на 4K.
Я не могу воспроизвести на диске с сектором 512b ошибку.
------- Comment #10 From 2012-02-22 02:24:13 -------
Вот этот:
http://www.citilink.ru/catalog/parts/hdd/hdd_in/653474/?mrkt=msk_cl ?
Если точно этот, то скажите, купим.
------- Comment #11 From 2012-02-22 09:58:19 -------
Да, этот. На всякий случай даже ноут вскрыл. Отличается только серийным
номером. :-)

Но я ещё не потерял надежду HDD с 4K сектором у себя найти, так что покупать
имеет смысл, если в нём есть какая-то другая необходимость.
------- Comment #12 From 2012-02-22 10:20:44 -------
Сергей, попробуйте сначала исправления.
Покупать\искать HDD стоит только тогда когда мои исправления не помогли.
------- Comment #13 From 2012-02-22 15:14:37 -------
Нашёлся WD10EARX, с последним KDesktop проблема воспроизвелась сходу. Но
исправленный evms сегодня попробовать не смогу наверное.
------- Comment #14 From 2012-02-24 14:32:36 -------
Собрал evms, теперь вопрос - как попроще воспроизвести те действия, которые
через alterator-vm делаются ? У меня на рабочей станции ничего этого не стоит
пока... Попробовал evmsn запустить, но там что-то много всего, и всё больше про
evms-тома.
------- Comment #15 From 2012-03-01 22:59:01 -------
(В ответ на комментарий №14)
> Собрал evms, теперь вопрос - как попроще воспроизвести те действия, которые
> через alterator-vm делаются ? У меня на рабочей станции ничего этого не стоит
> пока... Попробовал evmsn запустить, но там что-то много всего, и всё больше про
> evms-тома.

alterator-vm можно запустить и на установленной системе.
------- Comment #16 From 2012-03-03 21:32:21 -------
Проблема осталась. Вообще, думаю, могу собрать какой-нибудь компьютер с этим
hdd и дать ssh с root туда.
------- Comment #17 From 2012-07-12 19:48:13 -------
пинг. Так что, стенд надо ? В полку мелких hdd прибыло:

Device Model:     ST500DM002-1BD142
Firmware Version: KC45
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
------- Comment #18 From 2012-11-08 23:28:36 -------
2stanv@: ping
------- Comment #19 From 2012-11-19 11:04:14 -------
Третий:

Device Model:     HITACHI HTS545032A7E380
Firmware Version: GGBZB6C0
User Capacity:    320 072 933 376 bytes [320 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
------- Comment #20 From 2012-11-22 14:00:07 -------
Для разрешения этой баги нужно, видимо, купить соответствующий hdd (в
обсуждении они упомянуты). 
2cas@: прошу найти такой и представить спецификацию smi@ и мне.
------- Comment #21 From 2012-11-22 14:24:16 -------
(In reply to comment #20)

> Для разрешения этой баги нужно, видимо, купить соответствующий hdd (в
> обсуждении они упомянуты). 
> 2cas@: прошу найти такой и представить спецификацию smi@ и мне.

У меня такое ощущение, что они в любом современном нотебуке уже могут
встретиться c большой степенью вероятности, так что, если, вдруг, какой-то
нотебук в офисе у Вас покупался недавно, имеет смысл посмотреть.
------- Comment #22 From 2012-11-22 16:24:21 -------
У меня есть некоторое количество WD15EARS, в этой же сетии (WD Green) были
WD10EARS и WD20EARS.  Сейчас вместо них EARX, как понимаю ("Advanced format"):
http://www.nix.ru/autocatalog/hdd_western_digital/HDD_Tb_SATA_6Gb_Western_Digital_Caviar_Green_WD10EARX_118707.html
------- Comment #23 From 2012-11-22 16:27:19 -------
И предлагаю перевешивать на сизиф, а в p6 бэкпортить уже потом.
------- Comment #24 From 2012-11-22 16:37:13 -------
(В ответ на комментарий №23)
> И предлагаю перевешивать на сизиф, а в p6 бэкпортить уже потом.
В p6 уже смысла не будет, т.к. это в установщике.
Т.е. перевешивать на сизиф, убрав все блокеры кроме >= p7.
------- Comment #25 From 2012-11-22 16:54:12 -------
Кстати, вот ещё что. Возможно, имеет смысл сделать чекбокс для включения режима
учёта 4K-сектора. А то встречаются ещё и такие вот:

Model Family:     Seagate Barracuda Green (Adv. Format)
Device Model:     ST2000DL003-9VT166
Serial Number:    5YD57KJT
LU WWN Device Id: 5 000c50 03d777f09
Firmware Version: CC32
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Size:      512 bytes logical/physical

То есть, он тоже, как бы, с 4K-сектором, только про это не написано в нужном
месте.
------- Comment #26 From 2012-11-22 19:04:31 -------
(In reply to comment #25)
> Возможно, имеет смысл сделать чекбокс для включения режима учёта 4K-сектора.
Ни к чему, лучше сразу выравнивать и не на 4k, а на ~1M (учтёт RAID-ы):
http://www.altlinux.org/BigSector
http://freesource.info/wiki/HCL/XranenieDannyx/SoftwareRAID
http://www.pythian.com/news/411/aligning-asm-disks-on-linux/
------- Comment #27 From 2012-12-25 16:49:54 -------
Отправил в сизиф evms 2.5.5-alt29, который решает данную проблему. Просьба
проверить
------- Comment #28 From 2015-06-21 22:39:15 -------
При установке на SSD c LiveCD образа регулярной сборки (проверялось на KDE,
сборка от 17.06.2015) автоматическая разбивка диска не выравнивает создаваемые
разделы по границе Mib (выравнивает по цилиндру)
Проверить можно parted-м:
align-check opt [0..N]
стабильно возвращает not aligned
Указать в установщике выравнивание вручную при разбивке диска из установщика
тоже возможность отсутствует.
Если раздел создается через gparted c указанием выровнять по Mib то 
align-check opt [0..N]
стабильно возвращает aligned
Проверено на 3-х различных моделях SSD.
------- Comment #29 From 2016-10-27 19:14:48 -------
(В ответ на комментарий №27)
> Отправил в сизиф evms 2.5.5-alt29, который решает данную проблему.
> Просьба проверить

Не совсем: выровненным оказывается _extended_, а не logical'ы -- надо наоборот,
поскольку для логических разделов важно, для расширенного -- нет (как
совершенно верно указано в комментарии 5).

(В ответ на комментарий №4)
> > 1. Кто диски разбивал???
> А ведь уже было: https://bugzilla.altlinux.org/16000#c5

Мало того, https://bugzilla.altlinux.org/23848

(В ответ на комментарий №7)
> http://git.altlinux.org/people/stanv/packages/?p=evms.git;a=shortlog;h=refs/heads/sisyphus
> 2.5.5-alt23.1

Этот коммит в сизифную сборку не добрался, Тимур в -alt29 сделал иначе.

Вне зависимости от того, применены ли коммиты

a9444d7d7085f4281da36a242992c6e787b6ed7d и
587974e96e3fe550a450cb9d678b6c0cf3321fae (timonbl4@, 4K / 8s)

или

17c75b88aab508b40d3c3afb43f587eea77df944 (stanv@, 1M / 2048s)

или все вместе -- выравнивается контейнер (extended), а не нужные логические
разделы внутри его (logical):

(parted) print
Модель: ASMT 2115 (scsi)
Диск /dev/sdb: 120GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска: 

Номер  Начало  Конец   Размер  Тип       Файловая система  Флаги
 1     1049kB  10,7GB  10,7GB  primary
 4     10,7GB  21,5GB  10,7GB  extended
 5     10,7GB  21,5GB  10,7GB  logical

(parted) align-check opt 1
1 выровнен
(parted) align-check opt 5
5 not aligned: 20971528s % 2048s != 0s

Бишь смещение на 8 секторов от оптимального (20971520 == 10240*2048).

Похоже, надо extended-раздел создавать с запасом, а выравнивать logical: 

---
Note that the GPT/MBR issues are unrelated to the Advanced Format issues --
that is, if you're using an Advanced Format disk, you should align your
partitions using the same rules for either partition table type. (One partial
exception: Alignment is unimportant for MBR extended partitions, just for
primary and logical partitions. GPT doesn't use the primary/extended/logical
partition distinction.)
--- https://forums.gentoo.org/viewtopic-p-7361710.html

Надо выяснить, как вычислить эту разницу и насколько безопасно тут вычитать.
------- Comment #30 From 2016-10-28 17:31:58 -------
Created an attachment (id=6847) [details]
выравниваем и логические разделы

Запасной вариант без вычитаний: выравнивать на мегабайт начало _любого_
раздела, включая logical.  Это некрасиво и потеря ещё почти метра на каждый
логический раздел, зато должно быть проще и надёжней в реализации (гарантия от
перехлёстов с другими разделами).  Ну и в выводе fdisk выровненным будет
показывать всё, включая ненужный extended.

Спасибо imz@ за обсуждение, приведшее к этому соображению :)

Просьба ко всем заинтересованным: проверить логику и патч, для этого сперва:

git revert a9444d7d7085f4281da36a242992c6e787b6ed7d
git revert 587974e96e3fe550a450cb9d678b6c0cf3321fae
git cherry-pick 17c75b88aab508b40d3c3afb43f587eea77df944

Мои тесты на досовой таблице пока не показывают косяков:

# dmsetup remove_all; wipefs -a /dev/sdb; acc
(рисую primary и один-два logical, сняв галку про основной раздел)
# parted /dev/sdb print; parted /dev/sdb align-check opt 5
Модель: ASMT 2115 (scsi)
Диск /dev/sdb: 120GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска: 

Номер  Начало  Конец   Размер  Тип       Файловая система  Флаги
 1     1049kB  1074MB  1073MB  primary
 4     1074MB  4293MB  3219MB  extended
 5     1075MB  2146MB  1072MB  logical
 6     2147MB  3219MB  1072MB  logical
 7     3221MB  4293MB  1072MB  logical

5 выровнен

Вот с GPT пока плохо, но это отдельный баг -- см. тж.:
https://bugzilla.altlinux.org/show_bug.cgi?id=23848#c9
------- Comment #31 From 2016-10-28 22:52:07 -------
Задание с проверенным мной и imz@ объездом желающие тоже могут посмотреть:
http://webery.altlinux.org/task/171541

PS: следом ожидается ещё одно с экспериментальной правкой для GPT, см.
https://bugzilla.altlinux.org/32679 (повесил отдельно).
------- Comment #32 From 2016-10-31 21:15:14 -------
Зерг, проверишь задание?
------- Comment #33 From 2016-11-01 16:45:36 -------
(В ответ на комментарий №32)
> Зерг, проверишь задание?
В VirtualBox после разбивки:

# fdisk -l /dev/sda
Диск /dev/sda: 25 GiB, 26834665472 байт, 52411456 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x00000000

Устр-во    Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1                 2048  3065855  3063808   1,5G            82 Linux
своп / Solaris
/dev/sda2              3065856 52402175 49336320  23,5G            83 Linux
------- Comment #34 From 2016-11-01 16:46:50 -------
Надо вручную создать extended раздел, потом загрузиться и проверить на align в
parted
------- Comment #35 From 2016-11-01 17:10:11 -------
# fdisk -l /dev/sda
Диск /dev/sda: 25 GiB, 26834665472 байт, 52411456 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x00000000

Устр-во    Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1                  2048  3065855  3063808   1,5G            82 Linux
своп / Solaris
/dev/sda2               3065856 28788479 25722624  12,3G            83 Linux
/dev/sda3              28788736 37289983  8501248   4,1G            83 Linux
/dev/sda4              37289984 52402175 15112192   7,2G             5
Расширенный
/dev/sda5              37292032 43857919  6565888   3,1G            83 Linux
/dev/sda6              43859968 48328703  4468736   2,1G            83 Linux
/dev/sda7              48330752 52402175  4071424     2G            83 Linux
[root@localhost ~]# parted /dev/sda
GNU Parted 3.2.46-e4ae
Используется /dev/sda
Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
(parted) align-check optimal 1                                            
1 выровнен
(parted) align-check optimal 2
2 выровнен
(parted) align-check optimal 3
3 выровнен
(parted) align-check optimal 4
4 выровнен                                                            
(parted) align-check optimal 5
5 выровнен                                                                  
(parted) align-check optimal 6
6 выровнен                                                                      
(parted) align-check optimal 7
7 выровнен                                                                      
(parted)
------- Comment #36 From 2016-11-01 17:24:24 -------
(В ответ на комментарий №35)
> # fdisk -l /dev/sda
[...]
> Тип метки диска: dos
Спасибо; и ещё бы для gpt мои тесты продублировать (#32679).

> (parted) align-check optimal 5
> 5 выровнен
------- Comment #37 From 2016-11-01 19:46:43 -------
(In reply to comment #35)

> Размер сектора (логический/физический): 512 байт / 512 байт
> Размер I/O (минимальный/оптимальный): 512 байт / 512 байт

А разве в такой ситуации проверка правильная получается ? Не надо ли проверять
в ситуации

Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

?
------- Comment #38 From 2016-11-01 20:21:28 -------
Это fdisk написал на обычном диске
------- Comment #39 From 2016-11-01 21:29:48 -------
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 #40 From 2016-11-02 13:55:17 -------
(В ответ на комментарий №36)
> ещё бы для gpt мои тесты продублировать (#32679).
Продублировал.

А на 4K-секторном не надо ли проверить?
------- Comment #41 From 2016-11-02 22:11:49 -------
(В ответ на комментарий №40)
> А на 4K-секторном не надо ли проверить?
Можно, хотя поскольку на размер физического сектора код всё так же не смотрит
при расчёте выравнивания -- разве что в плане итоговой производительности.

Кстати, тошибовская 500-ка с 4K-секторами в офисе всё же нашлась
(и на ней пока можно экспериментировать).