Bug 20197

Summary: /etc/rc.d/scripts/idetune не настраивает sda
Product: Sisyphus Reporter: Slava Dubrovskiy <dubrsl>
Component: startupAssignee: Alexey Gladkov <legion>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P3 CC: dd1email, evg, grizlik78, ildar, ldv, legion, mike, vsu
Version: unstable   
Hardware: all   
OS: Linux   

Description Slava Dubrovskiy 2009-05-27 16:44:15 MSD
Очень часто нужно указывать hdparm -B 254 (особенно для нетбуков актуально)
Но idetune настраивает только hd.

Хорошо бы не делать такое исключение.

> On 26.05.2009 23:19, Anton Farygin wrote:
>> Michael Shigorin пишет:
>>> On Tue, May 26, 2009 at 12:04:21AM +0700, Anton Chaykin wrote:
>>>> Не могу найти скрипт, который при загрузке, суспенде и слипе
>>>> выставляет параметры hdparm
>>>> Ps.: Мне надо hdparm -B 254, а то моему sda через год придёт
>>>> ппц.  Хотя это чисто моё субьективное мнение.
>>>
>>> Найдёте -- и мне свистните, pls.  Запакуем его.
>>
>> # rpm -qf /etc/rc.d/scripts/idetune
>> startup-0.9.8.21-alt1
> idetune не настраивает sda
>
> Кстати повод для FR.

Безусловно, с учётом того, что сейчас нет разделения ide/sata/scsi у s* или h* дисков.

Занесите в bugzilla, пожалуйста.
Comment 1 Evgenii Terechkov 2010-09-01 17:09:51 MSD
Может быть есть смысл к UUID/LABEL каким-то привязываться, если нет разделения ide/sata/scsi? Или это не проблема? Что мешает сделать такое?
Comment 2 Sir Raorn 2010-09-01 17:14:45 MSD
Подозреваю, что банальная лень.  Кстати, у _дисков_ не бывает UUID/LABEL.

Плюс - надо запускать то же самое после resume.
Comment 3 Evgenii Terechkov 2010-09-01 19:13:15 MSD
Знаю, что не бывает. Не знаю, как правильно идентифицировать (достаточно ли /dev/sd?).
Comment 4 Sir Raorn 2010-09-01 19:19:52 MSD
В особо клинических случаях их бывает /dev/sd[a-z]+, когда после sdz идёт sdaa, sdab, sdac и т.д.  Но в таких случаях (multipath на внешних стораджах) смысла в hdparm уже мало.
Comment 5 Evgenii Terechkov 2010-09-19 13:02:53 MSD
*** Bug 23864 has been marked as a duplicate of this bug. ***
Comment 6 Sergey Vlasov 2010-09-19 15:18:58 MSD
(В ответ на комментарий №2)
> Кстати, у _дисков_ не бывает UUID/LABEL.

Зато бывает /dev/disk/by-id/* (привязка к серийному номеру диска, в последних версиях udev ещё и к другой вариации на эту тему - WWN) и /dev/disk/by-path/* (тут получается привязка к порту контроллера, куда подключен диск, но номера шин PCI иногда могут меняться при добавлении/удалении других PCI-устройств).
Comment 7 Evgenii Terechkov 2010-09-19 15:28:10 MSD
Про UUID/LABEL я имел ввиду что хочется чтобы настройки применялись к тому чему надо вне зависимости от того, как при загрузке разложится пасьянс буковок sdXX :-)
Comment 8 Evgenii Terechkov 2010-09-20 18:04:56 MSD
Можно например так:
http://git.altlinux.org/people/evg/packages/?p=startup.git;a=commitdiff;h=74625622028c31265445293bd1f5b52d10b2103b (требуется review).

P.S.: откуда FIXED то?
Comment 9 Sergey Vlasov 2010-09-20 19:28:20 MSD
(В ответ на комментарий №8)
> Можно например так:

Поддержка только WWN оставляет за бортом не только PATA-диски, но и многие SATA-диски не самых последних серий. Вероятно, лучше брать просто имя ссылки из /dev/disk/by-id/*, чтобы можно было использовать любой доступный вариант.
Comment 10 Evgenii Terechkov 2010-09-20 19:56:06 MSD
Там не только WWN, но и /dev/FOO можно указать (см. код). И даже нужно для всяких *-ROM. Всё подряд из /dev/disk/by-*/* не стал брать, потому что а) Было лень фильтровать оттуда лишь целые диски (без партиций и т.п.) и б) потому что не вижу смысла в привязке к месте на шине.
Comment 11 Sergey Vlasov 2010-09-20 21:10:22 MSD
(В ответ на комментарий №10)
> Там не только WWN, но и /dev/FOO можно указать (см. код). И даже нужно для
> всяких *-ROM.

Однако имя в подкаталоге указать уже не получится (для некоторых других задач это тоже может быть проблемой - например, из-за /dev/cciss/cXdY и других устройств со "странными" именами).

> Всё подряд из /dev/disk/by-*/* не стал брать, потому что а) Было
> лень фильтровать оттуда лишь целые диски (без партиций и т.п.)

Для WWN там разделы тоже есть (wwn-0x${WWN}-part${NUM}), поэтому при наличии желания фильтровать делать это придётся и для WWN.

> и б) потому что не вижу смысла в привязке к месте на шине.

Вот как раз /dev/disk/by-id/* привязывается к свойствам самого диска - чаще всего к serial.  Привязка к месту на шине - это /dev/disk/by-path/*.

Короче говоря, предлагаю как минимум заменить "/dev/disk/by-id/wwn-0x$i" на "/dev/disk/by-id/$i". Ещё можно ввести в сам файл переменную DEVICE, позволяющую явно указать любое имя устройства (в таком варианте неплохо было бы перейти на чтение файлов по маске вида *.conf, либо как минимум явно игнорировать имена вида *~, *.rpm*).
Comment 12 Evgenii Terechkov 2010-09-20 21:33:37 MSD
> > Там не только WWN, но и /dev/FOO можно указать (см. код). И даже нужно для
> > всяких *-ROM.
> Однако имя в подкаталоге указать уже не получится (для некоторых других задач
> это тоже может быть проблемой - например, из-за /dev/cciss/cXdY и других
> устройств со "странными" именами).

Виноват, не подумал об этом.
 
> > Всё подряд из /dev/disk/by-*/* не стал брать, потому что а) Было
> > лень фильтровать оттуда лишь целые диски (без партиций и т.п.)
> Для WWN там разделы тоже есть (wwn-0x${WWN}-part${NUM}), поэтому при наличии
> желания фильтровать делать это придётся и для WWN.

Наверно, я неясно выразился. Под "фильтровать" я имел ввиду как раз исключение из рассмотрения всех wwn-0x${WWN}-part${NUM} и т.п., т.к. hdparm ведь требует имя целого диска, как я понимаю, и партиции ему ни к чему.

> > и б) потому что не вижу смысла в привязке к месте на шине.
> Вот как раз /dev/disk/by-id/* привязывается к свойствам самого диска - чаще
> всего к serial.  Привязка к месту на шине - это /dev/disk/by-path/*.

Я знаю про by-path. Про привязку с шине имею ввиду и by-path/* и by-id/{ata,scci}* (может, конечно, ошибаюсь).
 
> Короче говоря, предлагаю как минимум заменить "/dev/disk/by-id/wwn-0x$i" на
> "/dev/disk/by-id/$i".

сделаю

> Ещё можно ввести в сам файл переменную DEVICE, позволяющую
> явно указать любое имя устройства (в таком варианте неплохо было бы
> перейти на чтение файлов по маске вида *.conf, либо как минимум явно
> игнорировать имена вида *~, *.rpm*).

Я так и делал в первых вариантах коммита, но у меня не было DEVICE, поэтому я счёл это бессмысленным. Сделаю.
Comment 13 Sergey Vlasov 2010-09-20 23:49:56 MSD
(В ответ на комментарий №12)
> Про привязку с шине имею ввиду и by-path/* и
> by-id/{ata,scci}* (может, конечно, ошибаюсь).

У by-id есть некоторая привязка к типу драйвера - но, например, ссылки ata-* должны создаваться при использовании и старых драйверов IDE, и новых libata (работающих через scsi), причём на современных ядрах они для этих режимов должны совпадать (хотя со старыми версиями ядер и udev в этом месте были проблемы, связанные с обрезанием модели до длины, поддерживаемой SCSI). Вот ссылки scsi-* будут действительно создаваться только при использовании libata.

Хотя случай перетыкания диска в USB-SATA box действительно обработан не будет, поскольку для USB используются другие имена (но для hdparm это всё равно неактуально).
Comment 14 Michael Shigorin 2010-09-21 01:05:40 MSD
(In reply to comment #11)
> Однако имя в подкаталоге указать уже не получится (для некоторых других задач
> это тоже может быть проблемой - например, из-за /dev/cciss/cXdY и других
> устройств со "странными" именами).
А этим hdparm и не припарка:

# hdparm -d 1 /dev/ida/c0d0
/dev/ida/c0d0:
 setting using_dma to 1 (on)
 HDIO_SET_DMA failed: Invalid argument
Comment 15 Evgenii Terechkov 2010-09-21 03:08:46 MSD
> > устройств со "странными" именами).
> А этим hdparm и не припарка:

Тем не менее, лучше сделать чтобы припарку можно было накладывать в любом месте.
Comment 16 Evgenii Terechkov 2010-09-27 20:16:11 MSD
Новый вариант:

http://git.altlinux.org/people/evg/packages/startup.git?p=startup.git;a=commitdiff;h=04c6bb085434add7b310a5289615d2d14693fd61 (требуется review).
Comment 17 Michael Shigorin 2010-09-28 14:05:57 MSD
Пробел упустил и ещё кой-чего, см.:
http://git.altlinux.org/people/mike/packages/?p=startup.git;a=commitdiff;h=c1598db4ef28e95e6bd4c744cd67ec47808fb151

Проверил на домашней SATA-only системе -- пришлось переименовать один из /etc/sysconfig/harddisk/hd* в sdd.conf и выкинуть MULTIPLE_IO с EIDE_32BIT, осталось:

home:~> cat /etc/sysconfig/harddisk/sdd.conf
LOOKAHEAD=1
EXTRA_PARAMS=-qq

и на ноуте с IDE и

pad:~> cat /etc/sysconfig/harddisk/sda.conf
LOOKAHEAD=1
EXTRA_PARAMS=-B255

Вердикт: живое, но про необходимость переименования файлов хорошо бы нарисовать отдельную предупреждалку в %post и упомянуть в %changelog.  Могу дописать когда-нибудь после субботней конференции (сейчас жду человека).

Возможно, сюда же будет смысл подкинуть sdparm (тоже потом).

PS: если мержить, то предлагаю следом сделать
git mv startup/rc.d/scripts/{idetune,hdparm}
subst 's,idetune,hdparm,' rc.d/rc.sysinit
git commit -am 'renamed scripts/idetune to scripts/hdparm'
Comment 18 Evgenii Terechkov 2010-09-28 14:36:20 MSD
%post/%changelog это уже к маинтайнеру. Упомянуть необходимость переименования в .conf надо.

vsu, ldv?
Comment 19 Evgenii Terechkov 2010-10-05 12:57:18 MSD
ping?
Comment 21 Evgenii Terechkov 2011-01-20 03:19:31 MSK
2ldv: Так чего же, всё таки, хочется?
Comment 22 Dmitry V. Levin 2011-07-14 20:24:19 MSK
Вопрос: если каталог /etc/sysconfig/harddisk/ пуст, а файл /etc/sysconfig/harddisks не пуст, применять содержимое последнего ко всем дискам?  Раньше, в старом scripts/idetune, было именно так.  В вашей версии /etc/sysconfig/harddisks применяется только для дисков, указанных в /etc/sysconfig/harddisk/.
Comment 23 Michael Shigorin 2011-07-14 23:06:06 MSK
Пожалуй, при прочих равных лучше бы оставить старую семантику.
Comment 24 Evgenii Terechkov 2011-07-15 02:59:54 MSK
Да.
Comment 25 Dmitry V. Levin 2011-07-15 03:05:21 MSK
(In reply to comment #23)
> Пожалуй, при прочих равных лучше бы оставить старую семантику.

Тогда вопрос, для каких блочных устройств применять /etc/sysconfig/harddisks?
Для всех /sys/block/*/device?  Если не для всех, то для каких?

Имеет ли смысл сейчас применять какой-то тюнинг единообразно ко всем блочным устройствам?
Comment 26 Michael Shigorin 2011-07-15 17:04:13 MSK
Смотри:
- ноутбук: только sda (HDD)
- десктоп: fd0, sd[a-h], sr0 => флопик, 4HDD, card reader, писалка
- сервер: sd[a-i], sr0 => SSD, 8HDD, писалка

Из них во всех случаях можно спокойно исключить fd* и sr*; sd* для случая десктопа скорее можно тюнить однообразно; для случая сервера скорее можно полагаться на то, что уж если оказалась необходимость тюнинга и сисадмин в курсе про /etc/sysconfig/harddisk*, то в случае различных типов дисков он это учтёт.
Comment 27 Dmitry V. Levin 2011-07-15 19:45:03 MSK
(In reply to comment #26)
> Из них во всех случаях можно спокойно исключить fd* и sr*;

А как это лучше сделать?
Comment 28 Sergey Vlasov 2011-07-15 23:39:03 MSK
В любом случае hdparm имеет смысл применять только к /dev/disk/by-id/ata-* (там, правда, мешаются разделы, ну и могут быть конфликты из-за CD-приводов без серийного номера вида /dev/disk/by-id/ata-Optiarc_DVD_RW_AD-7173S).

Можно сделать что-то типа

  /sbin/udevadm trigger --dry-run --verbose --subsystem-match=block \
    --property-match=ID_ATA=1 --attr-nomatch=partition=\*

(но --attr-nomatch=partition=\* требует ядра >= 2.6.28).

Либо фильтровать по именам устройств:

  /sbin/udevadm trigger --dry-run --verbose --subsystem-match=block \
    --property-match=ID_ATA=1 --sysname-match='*[a-z]'

(но при этом отфильтруются и sr*). Впрочем, потом всё равно придётся переводить полученные таким образом пути sysfs в имена устройств (например, вызовами udevadm info).
Comment 29 Michael Shigorin 2011-07-16 01:26:27 MSK
Тогда вообще напрашивается udev rule.
Comment 30 Dmitry V. Levin 2011-07-16 01:55:29 MSK
(In reply to comment #29)
> Тогда вообще напрашивается udev rule.

Да, это единственный разумный способ тюнить диски, подключаемые позже во время работы системы.
Comment 31 Sergey Vlasov 2011-07-16 11:57:22 MSK
(В ответ на комментарий №29)
> Тогда вообще напрашивается udev rule.

В Debian именно так и сделано:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="[sh]d[a-z]", RUN+="/etc/init.d/hdparm hotplug"

Правильная версия скриптов:

  http://patch-tracker.debian.org/patch/debianonly/view/hdparm/9.32-1

(в том, что лежит в апстримном hdparm, имя устройства из hdparm.conf просто сравнивается с DEVNAME, без возможности использования /dev/disk/by-id/*).

Впрочем, формат конфигурации там всё равно не имеет ничего общего с нашим.
Comment 32 ildar 2011-12-01 08:21:34 MSK
на эту тему прошу сделать аудит этого:
/usr/lib/pm-utils/power.d/harddrive .

Прошу учесть, что пакет pm-utils стоит у большинства desktop-пользователей.