Bug 26925 - Неправильно выравниваются логические разделы на hdd c 4K сектором
Summary: Неправильно выравниваются логические разделы на hdd c 4K сектором
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: alterator-vm (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Michael Shigorin
QA Contact: qa-sisyphus
URL: http://altlinux.org/BigSector
Keywords:
Depends on: 23848
Blocks: 23155 27685 30940 16000 32650
  Show dependency tree
 
Reported: 2012-02-13 00:27 MSK by Sergey Y. Afonin
Modified: 2016-11-02 22:11 MSK (History)
17 users (show)

See Also:


Attachments
выравниваем и логические разделы (472 bytes, patch)
2016-10-28 17:31 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 Sergey Y. Afonin 2012-02-13 00:27:02 MSK
Вот что получилось после установки
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 Zerg 2012-02-13 02:30:07 MSK
Вообще, у него 4K сектор http://storage.toshiba.eu/cms/en/hdd/multimedia/product_detail.jsp?productid=382
Comment 2 Andriy Stepanov (stanv) 2012-02-13 14:45:56 MSK
1. Кто диски разбивал???
2. Какие шаги были в инсталяторе VM ?
3. Ну и скажите mount хотябы или cat /proc/mounts
4. Ставили на чистый диск?
Comment 3 Sergey Y. Afonin 2012-02-13 15:34:45 MSK
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 Sergey Y. Afonin 2012-02-13 23:19:30 MSK
(In reply to comment #2)

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

А ведь уже было:  https://bugzilla.altlinux.org/16000#c5
Comment 5 Andriy Stepanov (stanv) 2012-02-14 17:26:58 MSK
Из отчета Сергея Афонина, видно, что проблема всплывает только для 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 Sergey Y. Afonin 2012-02-14 17:55:06 MSK
(In reply to comment #5)

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

Их слишком мало... На сколько сложно дофиксить ещё и segs.c ?
Comment 7 Andriy Stepanov (stanv) 2012-02-20 17:27:10 MSK
Сергей, вы научились воспроизводить ошибку?
Вы можете протестировать новый 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 Sergey Y. Afonin 2012-02-20 17:55:51 MSK
(In reply to comment #7)

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

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

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

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

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

alterator-vm можно запустить и на установленной системе.
Comment 16 Sergey Y. Afonin 2012-03-03 21:32:21 MSK
Проблема осталась. Вообще, думаю, могу собрать какой-нибудь компьютер с этим hdd и дать ssh с root туда.
Comment 17 Sergey Y. Afonin 2012-07-12 19:48:13 MSK
пинг. Так что, стенд надо ? В полку мелких 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 AEN 2012-11-08 23:28:36 MSK
2stanv@: ping
Comment 19 Sergey Y. Afonin 2012-11-19 11:04:14 MSK
Третий:

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 AEN 2012-11-22 14:00:07 MSK
Для разрешения этой баги нужно, видимо, купить соответствующий hdd (в обсуждении они упомянуты). 
2cas@: прошу найти такой и представить спецификацию smi@ и мне.
Comment 21 Sergey Y. Afonin 2012-11-22 14:24:16 MSK
(In reply to comment #20)

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

У меня такое ощущение, что они в любом современном нотебуке уже могут встретиться c большой степенью вероятности, так что, если, вдруг, какой-то нотебук в офисе у Вас покупался недавно, имеет смысл посмотреть.
Comment 22 Michael Shigorin 2012-11-22 16:24:21 MSK
У меня есть некоторое количество 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 Michael Shigorin 2012-11-22 16:27:19 MSK
И предлагаю перевешивать на сизиф, а в p6 бэкпортить уже потом.
Comment 24 Sergey V Turchin 2012-11-22 16:37:13 MSK
(В ответ на комментарий №23)
> И предлагаю перевешивать на сизиф, а в p6 бэкпортить уже потом.
В p6 уже смысла не будет, т.к. это в установщике.
Т.е. перевешивать на сизиф, убрав все блокеры кроме >= p7.
Comment 25 Sergey Y. Afonin 2012-11-22 16:54:12 MSK
Кстати, вот ещё что. Возможно, имеет смысл сделать чекбокс для включения режима учёта 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 Michael Shigorin 2012-11-22 19:04:31 MSK
(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 timonbl4@altlinux.org 2012-12-25 16:49:54 MSK
Отправил в сизиф evms 2.5.5-alt29, который решает данную проблему. Просьба проверить
Comment 28 Alexander 2015-06-21 22:39:15 MSK
При установке на 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 Michael Shigorin 2016-10-27 19:14:48 MSK
(В ответ на комментарий №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 Michael Shigorin 2016-10-28 17:31:58 MSK
Created attachment 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 Michael Shigorin 2016-10-28 22:52:07 MSK
Задание с проверенным мной и imz@ объездом желающие тоже могут посмотреть:
http://webery.altlinux.org/task/171541

PS: следом ожидается ещё одно с экспериментальной правкой для GPT, см.
https://bugzilla.altlinux.org/32679 (повесил отдельно).
Comment 32 Michael Shigorin 2016-10-31 21:15:14 MSK
Зерг, проверишь задание?
Comment 33 Sergey V Turchin 2016-11-01 16:45:36 MSK
(В ответ на комментарий №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 Anton Farygin 2016-11-01 16:46:50 MSK
Надо вручную создать extended раздел, потом загрузиться и проверить на align в parted
Comment 35 Sergey V Turchin 2016-11-01 17:10:11 MSK
# 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 Michael Shigorin 2016-11-01 17:24:24 MSK
(В ответ на комментарий №35)
> # fdisk -l /dev/sda
[...]
> Тип метки диска: dos
Спасибо; и ещё бы для gpt мои тесты продублировать (#32679).

> (parted) align-check optimal 5
> 5 выровнен
Comment 37 Sergey Y. Afonin 2016-11-01 19:46:43 MSK
(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 Anton Farygin 2016-11-01 20:21:28 MSK
Это fdisk написал на обычном диске
Comment 39 Repository Robot 2016-11-01 21:29:48 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 40 Sergey V Turchin 2016-11-02 13:55:17 MSK
(В ответ на комментарий №36)
> ещё бы для gpt мои тесты продублировать (#32679).
Продублировал.

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

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