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 занятость спадает.
почему-то не создаёт ссылки udev, есть мысли что не так в /etc/udev/rules.d/kpartx.rules ? kpartx замечательно создаёт /dev/dm-*, точную циферку которого можно увидеть при запуске kpartx -v -a и потом запустить скажем udevadm info --query=all --name=/dev/dm-4
(В ответ на комментарий №1) > почему-то не создаёт ссылки udev, есть мысли что не так в > /etc/udev/rules.d/kpartx.rules ? Мне не нравится, что kpartx.rules и multipath.rules не имеют номеров. Но ручное переименование мне не помогло.
Решение этой проблемы: --- /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 лучше меня прокомментировать, чем, кроме исправления этого бага, чревато это изменение?
(В ответ на комментарий №3) > +ENV{DM_NAME}=="?*", NAME="mapper/$env{DM_NAME}", SYMLINK+="$kernel" Вообще разработчики udev крайне не рекомендуют менять NAME - можно только добавлять SYMLINK.
(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}" - разве этого недостаточно?
(В ответ на комментарий №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).
Собрал 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.
Короче говоря, наш kpartx отстал от наших новых kernel+libdevmapper. Вероятно, имеет смысл заглянуть в http://cvs.fedoraproject.org/viewvc/devel/device-mapper-multipath/
Исправлено в 0.4.9-alt2.