Bug 23041 - udev не создаёт верные пути для dm-устройств
Summary: udev не создаёт верные пути для dm-устройств
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: multipath-tools (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Alexey Shabalin
QA Contact: qa-sisyphus
URL: http://cvs.fedoraproject.org/viewvc/d...
Keywords:
Depends on:
Blocks:
 
Reported: 2010-02-27 16:25 MSK by Vitaly Kuznetsov
Modified: 2010-03-02 09:47 MSK (History)
8 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Kuznetsov 2010-02-27 16:25:20 MSK
kpartx -a делает вид, что работает, но устройства не появляются.

Создаём volume в LVM
# lvcreate -L1G -n ggg local
  Logical volume "ggg" created

Создаём на нём раздел:
# fdisk /dev/local/ggg 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x343a3179.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): 
Using default value 130

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

выполняем 
# kpartx -a -p- /dev/local/ggg
#
(делает вид, что работает)

Смотрим на девайсы:
ls -la /dev/mapper/*ggg*
lrwxrwxrwx 1 root root 7 Feb 27 16:16 /dev/mapper/local-ggg -> ../dm-6

Ожидаю увидеть /dev/mapper/local-ggg-1, а его нет.

На стоящем рядом debian-squeeze устройство появляется. Но у них kpartx отпилен от multipath-tools и другой версии (0.4.8-15).

При этом lvm-том занят:

lvs | grep ggg
  ggg                                        local -wi-ao  1.00g   

после kpartx -d занятость спадает.
Comment 1 Konstantin Pavlov 2010-02-27 16:41:56 MSK
почему-то не создаёт ссылки udev, есть мысли что не так в /etc/udev/rules.d/kpartx.rules ?

kpartx замечательно создаёт /dev/dm-*, точную циферку которого можно увидеть при запуске kpartx -v -a

и потом запустить скажем
udevadm info --query=all --name=/dev/dm-4
Comment 2 Vitaly Kuznetsov 2010-02-27 17:03:28 MSK
(В ответ на комментарий №1)
> почему-то не создаёт ссылки udev, есть мысли что не так в
> /etc/udev/rules.d/kpartx.rules ?

Мне не нравится, что kpartx.rules и multipath.rules не имеют номеров. Но ручное переименование мне не помогло.
Comment 3 Konstantin Pavlov 2010-02-27 17:18:46 MSK
Решение этой проблемы:

--- /lib/udev/rules.d/10-dm.rules       2010-02-16 20:29:08.000000000 +0300
+++ /home/thresh/10-dm.rules    2010-02-27 17:16:24.000000000 +0300
@@ -58,6 +58,8 @@
 ENV{DM_SUSPENDED}=="Active", ENV{DM_SUSPENDED}="0"
 ENV{DM_SUSPENDED}=="Suspended", ENV{DM_SUSPENDED}="1"

+ENV{DM_NAME}=="?*", NAME="mapper/$env{DM_NAME}", SYMLINK+="$kernel"
+
 # This variable provides a reliable way to check that device-mapper
 # rules were installed. It means that all needed variables are set
 # by these rules directly so there's no need to acquire them again


Может ли кто-нибудь из умеющих udev лучше меня прокомментировать, чем, кроме исправления этого бага, чревато это изменение?
Comment 4 Sergey Vlasov 2010-02-27 17:24:33 MSK
(В ответ на комментарий №3)
> +ENV{DM_NAME}=="?*", NAME="mapper/$env{DM_NAME}", SYMLINK+="$kernel"
Вообще разработчики udev крайне не рекомендуют менять NAME - можно только добавлять SYMLINK.
Comment 5 Dmitry V. Levin 2010-02-27 18:24:00 MSK
(In reply to comment #4)
> (В ответ на комментарий №3)
> > +ENV{DM_NAME}=="?*", NAME="mapper/$env{DM_NAME}", SYMLINK+="$kernel"
> Вообще разработчики udev крайне не рекомендуют менять NAME - можно только
> добавлять SYMLINK.

В udev/10-dm.rules.in уже есть изготовление ссылок:
ENV{DM_UDEV_DISABLE_DM_RULES_FLAG}!="1", ENV{DM_NAME}=="?*", SYMLINK+="(DM_DIR)/$env{DM_NAME}"
- разве этого недостаточно?
Comment 6 Sergey Vlasov 2010-02-27 19:08:35 MSK
(В ответ на комментарий №5)
> В udev/10-dm.rules.in уже есть изготовление ссылок:
> ENV{DM_UDEV_DISABLE_DM_RULES_FLAG}!="1", ENV{DM_NAME}=="?*",
> SYMLINK+="(DM_DIR)/$env{DM_NAME}"
> - разве этого недостаточно?

Похоже, в случае использования kpartx ссылки не создаются из-за выставленного флага DM_UDEV_DISABLE_DM_RULES_FLAG, поскольку kpartx не использует функцию dm_task_set_cookie(), необходимую для синхронизации с udevd. Патч для kpartx есть в природе:

http://osdir.com/ml/general/2010-02/msg19444.html

Всё это, кстати, актуально только при использовании ядра >= 2.6.31 (только в этой версии в драйвер dm добавили поддержку DM_COOKIE, необходимую для синхронизации с udevd).
Comment 7 Vitaly Kuznetsov 2010-02-27 19:10:50 MSK
Собрал kpartx с libdevmapper-ной отладкой, на выходе:

Cookie value is not set while trying to call DM_DEVICE_RESUME, DM_DEVICE_REMOVE or DM_DEVICE_RENAME ioctl. Please, consider using libdevmapper's udev synchronisation interface or disable it explicitly by calling dm_udev_set_sync_support(0).

Итог: kpartx не умеет синхронизацию с udev. Если в апстриме ещё не реализовали, то надо добавить ту самую dm_udev_set_sync_support(0) куда-нибудь в main.
Comment 8 Dmitry V. Levin 2010-02-28 05:10:23 MSK
Короче говоря, наш kpartx отстал от наших новых kernel+libdevmapper.

Вероятно, имеет смысл заглянуть в
http://cvs.fedoraproject.org/viewvc/devel/device-mapper-multipath/
Comment 9 Konstantin Pavlov 2010-03-02 09:47:16 MSK
Исправлено в 0.4.9-alt2.