Bug 20197 - /etc/rc.d/scripts/idetune не настраивает sda
: /etc/rc.d/scripts/idetune не настраивает sda
Status: ASSIGNED
: Sisyphus
(All bugs in Sisyphus/startup)
: unstable
: all Linux
: P3 enhancement
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2009-05-27 16:44 by
Modified: 2011-12-01 08:21 (History)


Attachments


Note

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


Description From 2009-05-27 16:44:15
Очень часто нужно указывать 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 From 2010-09-01 17:09:51 -------
Может быть есть смысл к UUID/LABEL каким-то привязываться, если нет разделения
ide/sata/scsi? Или это не проблема? Что мешает сделать такое?
------- Comment #2 From 2010-09-01 17:14:45 -------
Подозреваю, что банальная лень.  Кстати, у _дисков_ не бывает UUID/LABEL.

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

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

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

Поддержка только WWN оставляет за бортом не только PATA-диски, но и многие
SATA-диски не самых последних серий. Вероятно, лучше брать просто имя ссылки из
/dev/disk/by-id/*, чтобы можно было использовать любой доступный вариант.
------- Comment #10 From 2010-09-20 19:56:06 -------
Там не только WWN, но и /dev/FOO можно указать (см. код). И даже нужно для
всяких *-ROM. Всё подряд из /dev/disk/by-*/* не стал брать, потому что а) Было
лень фильтровать оттуда лишь целые диски (без партиций и т.п.) и б) потому что
не вижу смысла в привязке к месте на шине.
------- Comment #11 From 2010-09-20 21:10:22 -------
(В ответ на комментарий №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 From 2010-09-20 21:33:37 -------
> > Там не только 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 From 2010-09-20 23:49:56 -------
(В ответ на комментарий №12)
> Про привязку с шине имею ввиду и by-path/* и
> by-id/{ata,scci}* (может, конечно, ошибаюсь).

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

Хотя случай перетыкания диска в USB-SATA box действительно обработан не будет,
поскольку для USB используются другие имена (но для hdparm это всё равно
неактуально).
------- Comment #14 From 2010-09-21 01:05:40 -------
(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 From 2010-09-21 03:08:46 -------
> > устройств со "странными" именами).
> А этим hdparm и не припарка:

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

http://git.altlinux.org/people/evg/packages/startup.git?p=startup.git;a=commitdiff;h=04c6bb085434add7b310a5289615d2d14693fd61
(требуется review).
------- Comment #17 From 2010-09-28 14:05:57 -------
Пробел упустил и ещё кой-чего, см.:
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 From 2010-09-28 14:36:20 -------
%post/%changelog это уже к маинтайнеру. Упомянуть необходимость переименования
в .conf надо.

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

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

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

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

А как это лучше сделать?
------- Comment #28 From 2011-07-15 23:39:03 -------
В любом случае 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 From 2011-07-16 01:26:27 -------
Тогда вообще напрашивается udev rule.
------- Comment #30 From 2011-07-16 01:55:29 -------
(In reply to comment #29)
> Тогда вообще напрашивается udev rule.

Да, это единственный разумный способ тюнить диски, подключаемые позже во время
работы системы.
------- Comment #31 From 2011-07-16 11:57:22 -------
(В ответ на комментарий №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 From 2011-12-01 08:21:34 -------
на эту тему прошу сделать аудит этого:
/usr/lib/pm-utils/power.d/harddrive .

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