nixp.ru v3.0

17 октября 2017,
вторник,
06:58:45 MSK

DevOps с компанией «Флант»
anonymous написал 16 декабря 2004 года в 11:29 (571 просмотр) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Есть такая штука как rawdevices в ядрах помоложе (если кто-то знает). Она необходима, например для подключения неформатированных разделов (хранение данных) к мощным базам данных (Oracle, DB2, Sybase). С переходом в ядре 2.6.9 на udev отсутствует утилита 'raw’, которая есть еще в дистре Fedora Code 2. Так вот, вопрос. Подскажите плиз, если это возможно, как создать в rawdevice в выше уазанном ядре.

К стати я юзаю Fedora Code 3 и мне позарез необходимо это сделать.

Заранее благодарен.

Genie

эээ.. я что-то пропустил?

использовать (deprecated) rawdevices из ядра ветки 2.6., которую Линус всё ещё считает нестабильной и доводку до потребного состояния отдаёт дистрибутиво-строителям, в продукции с таким ПО, как Оракл и подобным, не очень радушно относящимся к подобному ядру..

как-то это всё не вяжется.. :))

ну, если надо — то надо. пересобирай ядро, включив поддержку rawdevices, скачивай и компилируй последную доступную raw и пробуй, что у тебя получится. udev я бы посоветовал отключить и использовать /dev/*, но это хозяин — барин…

fly4life
Есть такая штука как rawdevices в ядрах помоложе (если кто-то знает).

Так а в чём был смысл тогда переходить на 2.6.9? Откатись на ядро «помоложе» и не мучайся.

anonymous

Судя по словам моих друзей и своему мнению, ядро 2.6 выше по производительности. В FC2-3 используется новейшее ПО, от которого совсем не хочеться отказываться. ОЧень бы хотелось найти ответ на этот вопрос. К тому же в udev все это есть. Я уже пробовал пересобирать ядро с включенным rawdevices. Утилита raw говорит 'Cannot open master raw device '/dev/rawctl' (No such file or directory)’. Но имея новое ядро я бы хотел выяснить для себя как же разработчики Баз Данных собираются обходить эту проблему.

anonymous

Так уж если rawdevices — deprecated, как можно обойти его, т.е. подсоединить неформатированный раздел как character device?

fly4life
Дмитрий
Судя по словам моих друзей и своему мнению, ядро 2.6 выше по производительности. В FC2-3 используется новейшее ПО, от которого совсем не хочеться отказываться.

Я ж не заставляю тебя менять дистрибутив ;). Просто собери там ядро, в котором всё нормально работает.

Кстати, если в федоре тебя заинтересовало лишь новейшее ПО, то ставь SuSE — там с raw devices всё нормально прямо «из коробки» (по крайней мере, в 9.1. Как обстоят дела в последней 9.2, я не знаю, т.к. не видел. Но думаю, там тоже всё нормально) ;)

Дмитрий
ОЧень бы хотелось найти ответ на этот вопрос. К тому же в udev все это есть. Я уже пробовал пересобирать ядро с включенным rawdevices. Утилита raw говорит 'Cannot open master raw device '/dev/rawctl' (No such file or directory)’. Но имея новое ядро я бы хотел выяснить для себя как же разработчики Баз Данных собираются обходить эту проблему.

Так не исопльзуй udev. Используй /dev/*. А все необходимые устройства (например, /dev/rawctl) создай вручную с помощью 'mknod’. Может так твоя проблема решится.

anonymous

И на этом спасибо. Но создавать «/dev/rawctl» с помощью mknod тоже пробовал. Я облазил по этой теме все что нашел в Google. raw всегда говорит одно и тоже. Эти файлы должны создаваться самостоятельно. Но этого не происходит.

Genie

mknod создаёт только в каталоге /dev/*, а не в виртуальной файловой системе udev, в которой модули устройств сами регистрируют необходимые им устройства.

нежелательность использования udev в производственной практике заключается в том, что не дай бог гавкнется модуль этой fs — система рухнет. тут же.

такой риск никому вроде бы как не нужен.

есди эе у тебя /dev/ находится на нормальной fs, то даже в случае отказа этой fs у тебя будет система работать с теми устройствами, что были открыты на момент сбоя. что является плюсом.

более того, есть мысль вообще располагать /dev/ систему в cramfs-образе.

соотвественно, если у тебя при использовании udev не устройств, относящихся к rawdevices, то — либо нет такого модуля (не скомпилирован), либо он не подгржуен. либо, как и грозились, его выкинули.

Оракл, кстати, уже и без rawdevice работать умеет.

Genie
Дмитрий
Так уж если rawdevices — deprecated, как можно обойти его, т.е. подсоединить неформатированный раздел как character device?


всю жизнь разделы были блочными устройствами.

и зачем базу делать на символьном устройстве?

хотя, может я тут чего путаю, и это только мне так кажется, что символьное устройство — это устройство с последовательным доступом…

anonymous

1. А если допустим что модуль rawdevices скомпилирован но не подключен, как дать ядру знать что-б оно его подключило?

2. Совешенно верно. Символьное устройство имеет последовательный доступ. Представим такую ситуацию. Допустим БД начинает транзакцию по записи в определенную строчку таблицы. Выполняе ее и закрывает. Что будет делать блочное устройство. Оно будет кэшировать часто используемую информацию. Возможно результаты последней транзакции она и закэширует. Тут открывается новая транзакция. Пытается прочитать данные с результатов предыдущей транз. Соответственно на винчестере будет старая инфрмация и БД отдаст то что у нее есть на текущий момент. Соответственно результаты не правильны.

В случае же символьного устройства данные ложаться последовательно. Байт за байтом. И тут исключена возможность кэширования. На это и обращают внимание разработчики БД.

Genie
1. А если допустим что модуль rawdevices скомпилирован но не подключен, как дать ядру знать что-б оно его подключило?

modprobe rawdevices

?

или добавить этот модуль в /etc/modules, чтобы подгружался при старте системы.

….В случае же символьного устройства данные ложаться последовательно. Байт за байтом. И тут исключена возможность кэширования. На это и обращают внимание разработчики БД.

интересные сказки.

а как тогда реализовавыется отключение кеширование на уровне буыера жёсткого диска? а?

ихмо, это несущественно — блочное ли устройство видится или символьное.

anonymous

Пробовал 'modprobe rawdevices’ — говорит не найден такой модуль.

/dev/modules.conf они переименовали на modprobe.conf

Как они видятся не важно. Работают они, на сколько я понимаю, по разному.

Пробовал к Sybase подсовывать блочные устройства. К стати работает. И Ничего не говорит. Как он себя поведет в усиленном юзании — не знаю. Но факт остается фактом — работает.

Но всетаки хотелось бы выяснить, неужели в новом ядре добавлена поддержка блочных устройств как символьных или я чего-то недопонимаю.

Genie

Эххх….

Linux Kernel v2.6.9 Configuration

RAW driver (/dev/raw/rawN) (OBSOLETE)

CONFIG_RAW_DRIVER:

The raw driver permits block devices to be bound to /dev/raw/rawN. Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O. See the raw(8) manpage for more details.

The raw driver is deprecated and may be removed from 2.7 kernels. Applications should simply open the device (eg /dev/hda1) with the O_DIRECT flag.

Может быть они, разработчики, тоже документацию иногда почитывают, а?

anonymous

Где устанавливается вышеуказанный флаг?

Т.е. получается мне нужно просто указывать блочное устройство. Так?

Genie

при открытии длочного устройства указываются опции. «побитовым или» нужные устанавливаются.

вот туда и добавть это самое O_DIRECT.

точного кода не напишу, поскольку таким не занимался ;)

anonymous

Спасибо. БОЛЬШОЕ.