chiark / gitweb /
delete vol_id and require util-linux-ng's blkid
authorKay Sievers <kay.sievers@vrfy.org>
Mon, 11 May 2009 02:12:23 +0000 (04:12 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Mon, 11 May 2009 02:12:23 +0000 (04:12 +0200)
NEWS
extras/volume_id/Makefile.am
extras/volume_id/README [deleted file]
extras/volume_id/vol_id.c [deleted file]
extras/volume_id/vol_id.xml [deleted file]
rules/packages/64-md-raid.rules
rules/rules.d/60-persistent-storage.rules
rules/suse/64-device-mapper.rules

diff --git a/NEWS b/NEWS
index 91698d5380aaac6cc7fb5e25fc35c7fcfca19c63..e743b11844e9d68bc78a93bc733641ea1456f537 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,11 @@ udev 142
 ========
 Bugfixes.
 
+The program vol_id is removed from the repository and blkid from the
+latest util-linux-ng package replaces it. Persisten disk links for
+label and uuid depend on the util-linux-ng version of blkid now. Older
+versions can not be used with udev.
+
 Libudev allows to subscribe to udev events. To prevent unwanted messages
 to be delivered, and waking up the subscribing process, a filter can be
 installed, to drop messages inside a kernel socket filter. The filters
@@ -15,7 +20,9 @@ are expected anymore, and a first stable release should happen soon.
 
 A too old kernel (2.6.21) or a kernel with CONFIG_SYSFS_DEPRECATED
 is not supported since while and udevd will log an error message at
-startup.
+startup. It should still be able to boot-up, but advanced rules and system
+services which depend on the information not available in the old sysfs
+format will fail to work correctly.
 
 DVB device naming is supplied by the kernel now. In case older kernels
 need to be supported, the old shell script should be added to a compat
index 4a8ba9465492f933b57b8e8ea73e0d2810f6c866..e4d2e7f1f1db0b4d0aeb883a645db8d6972dda65 100644 (file)
@@ -2,30 +2,3 @@ include $(top_srcdir)/Makefile.am.inc
 
 SUBDIRS = \
        lib
-
-udevhomedir = $(udev_prefix)/lib/udev
-udevhome_PROGRAMS = \
-       vol_id
-
-vol_id_SOURCES = \
-       vol_id.c \
-       ../../udev/lib/libudev.h \
-       ../../udev/lib/libudev.c \
-       ../../udev/lib/libudev-list.c \
-       ../../udev/lib/libudev-util.c
-
-vol_id_LDADD = \
-       lib/libvolume_id.la
-
-dist_man_MANS = \
-       vol_id.8
-
-EXTRA_DIST = \
-       vol_id.xml
-
-%.7 %.8 : %.xml
-       $(XSLTPROC) -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
-
-MAINTAINERCLEANFILES= \
-       $(dist_man_MANS)
-
diff --git a/extras/volume_id/README b/extras/volume_id/README
deleted file mode 100644 (file)
index 9459c88..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-vol_id - probe filesystem and read label and uuid
-
-vol_id will only return with a non-zero exit code if the string asked for,
-is not empty. All trailing whitespace will be removed, spaces replaced by
-underscore and slashes ignored.
-Unmangled values are available in the --export mode as hex-encoded strings
-in *_ENC= keys.
-
-  $ extras/volume_id/vol_id --export /dev/sda6
-  ID_FS_USAGE=filesystem
-  ID_FS_TYPE=ext3
-  ID_FS_VERSION=1.0
-  ID_FS_UUID=3e999973-00c9-4917-9442-b7633bd95b9e
-  ID_FS_UUID_ENC=3e999973-00c9-4917-9442-b7633bd95b9e
-  ID_FS_LABEL=devel
-  ID_FS_LABEL_ENC=devel
-
-  $ extras/volume_id/vol_id --label /dev/sda6
-  devel
-
-  $ extras/volume_id/vol_id --type /dev/sda6
-  ext3
-
-
-fstype                 probe  label  uuid  version
---------------------------------------------------
-linux swap             *      *      *     *
-btrfs                  *      *      *     -
-ext                    *      *      *     *
-reiserfs jr/3.5/3.6/4  *      *      *     *
-fat (12, 16, 32)       *      *      *     *
-ntfs                   *      *      *     *
-jfs                    *      *      *     -
-xfs                    *      *      *     -
-hfs (plus, wrapped)    *      *      *     -
-udf                    *      *      -     -
-iso9660                *      *      -     -
-ufs                    *      -      -     -
-cramfs                 *      *      -     -
-sysv                   *      *      -     *
-luks                   *      -      *     -
-hpfs                   *      *      -     -
-romfs                  *      *      -     -
-squashfs               *      -      -     -
-minix                  *      -      -     *
-ocfs (1, 2)            *      *      *     *
-vxfs                   *      -      -     *
-nss (netware)          *      -      *     *
-gfs, gfs2              *      *      *     -
-oracleasm              *      *      -     -
-
-Raid members are detected to prevent the probing for a filesystem
------------------------------------------------------------------
-linux raid (md)        *      *      *     *
-LVM 1                  *      -      -     -
-LVM 2                  *      -      -     *
-ddf                    *      -      *     *
-highpoint              *      -      -     -
-isw_raid               *      -      -     -
-lsi_raid               *      -      -     -
-nvidia_raid            *      -      -     -
-promise_raid           *      -      -     -
-silicon_raid           *      -      -     -
-via_raid               *      -      -     -
-jmicron                *      -      -     -
-adaptec                *      -      -     -
diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c
deleted file mode 100644 (file)
index 3e44c3b..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * vol_id - read filesystem label and uuid
- *
- * Copyright (C) 2005-2008 Kay Sievers <kay.sievers@vrfy.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE 1
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-#include <getopt.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <inttypes.h>
-#include <sys/ioctl.h>
-
-#include "../../udev/udev.h"
-#include "lib/libvolume_id.h"
-
-#define BLKGETSIZE64 _IOR(0x12,114,size_t)
-
-static int debug;
-struct udev *udev_ctx;
-
-static void log_fn(struct udev *udev, int priority,
-                  const char *file, int line, const char *fn,
-                  const char *format, va_list args)
-{
-       if (debug) {
-               fprintf(stderr, "%s: ", fn != NULL ? fn : file);
-               vfprintf(stderr, format, args);
-       } else {
-               vsyslog(priority, format, args);
-       }
-}
-
-static void vid_log(int priority, const char *file, int line, const char *format, ...)
-{
-       va_list args;
-
-       if (priority > udev_get_log_priority(udev_ctx))
-               return;
-       va_start(args, format);
-       log_fn(udev_ctx, priority, file, line, NULL, format, args);
-       va_end(args);
-       return;
-}
-
-static int all_probers(volume_id_probe_fn_t probe_fn,
-                      struct volume_id *id, uint64_t off, uint64_t size,
-                      void *data)
-{
-       const char *type;
-
-       if (probe_fn(id, off, size) == 0)
-               if (volume_id_get_type(id, &type))
-                       printf("%s\n", type);
-
-       return 0;
-}
-
-int main(int argc, char *argv[])
-{
-       static const struct option options[] = {
-               { "label", no_argument, NULL, 'l' },
-               { "label-raw", no_argument, NULL, 'L' },
-               { "uuid", no_argument, NULL, 'u' },
-               { "type", no_argument, NULL, 't' },
-               { "export", no_argument, NULL, 'x' },
-               { "skip-raid", no_argument, NULL, 's' },
-               { "size", required_argument, NULL, 'S' },
-               { "probe-all", no_argument, NULL, 'a' },
-               { "offset", optional_argument, NULL, 'o' },
-               { "debug", no_argument, NULL, 'd' },
-               { "help", no_argument, NULL, 'h' },
-               {}
-       };
-
-       enum print_type {
-               PRINT_EXPORT,
-               PRINT_TYPE,
-               PRINT_LABEL,
-               PRINT_UUID,
-               PRINT_LABEL_RAW,
-       } print = PRINT_EXPORT;
-
-       struct volume_id *vid = NULL;
-       char label_safe[256];
-       char label_enc[256];
-       char uuid_safe[256];
-       char uuid_enc[256];
-       char uuid_sub_enc[256];
-       char type_enc[256];
-       char type_version_enc[256];
-       uint64_t size = 0;
-       int skip_raid = 0;
-       int probe_all = 0;
-       uint64_t offset = 0;
-       const char *node;
-       int fd;
-       const char *label, *uuid, *uuid_sub, *type, *type_version, *usage;
-       int retval;
-       int rc = 0;
-
-       udev_ctx = udev_new();
-       if (udev_ctx == NULL)
-               goto exit;
-       logging_init("vol_id");
-       udev_set_log_fn(udev_ctx, log_fn);
-
-       /* hook in our debug into libvolume_id */
-       volume_id_log_fn = vid_log;
-
-       while (1) {
-               int option;
-
-               option = getopt_long(argc, argv, "lLutxsS:aodh", options, NULL);
-               if (option == -1)
-                       break;
-
-               switch (option) {
-               case 'd':
-                       debug = 1;
-                       if (udev_get_log_priority(udev_ctx) < LOG_INFO)
-                               udev_set_log_priority(udev_ctx, LOG_INFO);
-                       break;
-               case 'l':
-                       print = PRINT_LABEL;
-                       break;
-               case 'L':
-                       print = PRINT_LABEL_RAW;
-                       break;
-               case 'u':
-                       print = PRINT_UUID;
-                       break;
-               case 't':
-                       print = PRINT_TYPE;
-                       break;
-               case 'x':
-                       print = PRINT_EXPORT;
-                       break;
-               case 's':
-                       skip_raid = 1;
-                       break;
-               case 'a':
-                       probe_all = 1;
-                       break;
-               case 'S':
-                       if (optarg[0] != '\0')
-                               size = strtoull(optarg, NULL, 0);
-                       break;
-               case 'o':
-                       if (optarg[0] != '\0')
-                               offset = strtoull(optarg, NULL, 0);
-                       break;
-               case 'h':
-                       printf("Usage: vol_id [options] <device>\n"
-                           " --export         export key/value pairs\n"
-                           " --type           filesystem type\n"
-                           " --label          filesystem label\n"
-                           " --label-raw      raw label\n"
-                           " --uuid           filesystem uuid\n"
-                           " --skip-raid      don't probe for raid\n"
-                           " --probe-all      find possibly conflicting signatures\n"
-                           " --offset=<bytes> probe at the given offset\n"
-                           " --size=<bytes>   overwrite device size\n"
-                           " --debug          print debug output to stderr\n"
-                           " --help\n\n");
-                       goto exit;
-               default:
-                       retval = 1;
-                       goto exit;
-               }
-       }
-
-       node = argv[optind];
-       if (!node) {
-               err(udev_ctx, "no device\n");
-               fprintf(stderr, "no device\n");
-               rc = 1;
-               goto exit;
-       }
-
-       fd = open(node, O_RDONLY);
-       if (fd < 0) {
-               fprintf(stderr, "%s: error opening volume\n", node);
-               rc = 2;
-               goto exit;
-       }
-
-       vid = volume_id_open_fd(fd);
-       if (vid == NULL) {
-               rc = 2;
-               goto exit;
-       }
-
-       if (size == 0) {
-               if (ioctl(fd, BLKGETSIZE64, &size) == 0) {
-                       info(udev_ctx, "BLKGETSIZE64=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30);
-               } else {
-                       struct stat statbuf;
-
-                       if (fstat(fd, &statbuf) == 0 && S_ISREG(statbuf.st_mode))
-                               size = statbuf.st_size;
-                       else
-                               size = 0;
-                       info(udev_ctx, "stat=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30);
-               }
-       }
-
-       /* try to drop all privileges before reading disk content */
-       if (getuid() == 0) {
-               struct passwd *pw;
-
-               pw = getpwnam("nobody");
-               if (pw != NULL && pw->pw_uid > 0 && pw->pw_gid > 0) {
-                       if (setgroups(0, NULL) != 0 ||
-                           setgid(pw->pw_gid) != 0 ||
-                           setuid(pw->pw_uid) != 0)
-                               info(udev_ctx, "unable to drop privileges: %s\n\n", strerror(errno));
-               }
-       }
-
-       if (probe_all) {
-               volume_id_all_probers(all_probers, vid, offset, size, NULL);
-               goto exit;
-       }
-
-       if (skip_raid)
-               retval = volume_id_probe_filesystem(vid, offset, size);
-       else
-               retval = volume_id_probe_all(vid, offset, size);
-       if (retval != 0) {
-               fprintf(stderr, "unknown or non-unique volume type "
-                               "(--probe-all lists possibly conflicting types)\n");
-               rc = 4;
-               goto exit;
-       }
-
-       if (!volume_id_get_label(vid, &label) ||
-           !volume_id_get_usage(vid, &usage) ||
-           !volume_id_get_type(vid, &type) ||
-           !volume_id_get_type_version(vid, &type_version) ||
-           !volume_id_get_uuid(vid, &uuid) ||
-           !volume_id_get_uuid_sub(vid, &uuid_sub)) {
-               rc = 4;
-               goto exit;
-       }
-
-       udev_util_replace_whitespace(label, label_safe, sizeof(label_safe));
-       udev_util_replace_chars(label_safe, UDEV_ALLOWED_CHARS_INPUT);
-       volume_id_encode_string(label, label_enc, sizeof(label_enc));
-
-       udev_util_replace_whitespace(uuid, uuid_safe, sizeof(uuid_safe));
-       udev_util_replace_chars(uuid_safe, UDEV_ALLOWED_CHARS_INPUT);
-       volume_id_encode_string(uuid, uuid_enc, sizeof(uuid_enc));
-
-       volume_id_encode_string(uuid_sub, uuid_sub_enc, sizeof(uuid_sub_enc));
-
-       volume_id_encode_string(type, type_enc, sizeof(type_enc));
-       volume_id_encode_string(type_version, type_version_enc, sizeof(type_version_enc));
-
-       switch (print) {
-       case PRINT_EXPORT:
-               printf("ID_FS_USAGE=%s\n", usage);
-               printf("ID_FS_TYPE=%s\n", type_enc);
-               printf("ID_FS_VERSION=%s\n", type_version_enc);
-               printf("ID_FS_UUID=%s\n", uuid_safe);
-               printf("ID_FS_UUID_ENC=%s\n", uuid_enc);
-               if (uuid_sub_enc[0] != '\0')
-                       printf("ID_FS_UUID_SUB_ENC=%s\n", uuid_sub_enc);
-               printf("ID_FS_LABEL=%s\n", label_safe);
-               printf("ID_FS_LABEL_ENC=%s\n", label_enc);
-               break;
-       case PRINT_TYPE:
-               printf("%s\n", type);
-               break;
-       case PRINT_LABEL:
-               if (label_safe[0] == '\0' || strcmp(usage, "raid") == 0) {
-                       rc = 3;
-                       goto exit;
-               }
-               printf("%s\n", label_safe);
-               break;
-       case PRINT_UUID:
-               if (uuid_enc[0] == '\0' || strcmp(usage, "raid") == 0) {
-                       rc = 4;
-                       goto exit;
-               }
-               printf("%s\n", uuid_enc);
-               break;
-       case PRINT_LABEL_RAW:
-               if (label[0] == '\0' || strcmp(usage, "raid") == 0) {
-                       rc = 3;
-                       goto exit;
-               }
-               printf("%s\n", label);
-               break;
-       }
-
-exit:
-       if (vid != NULL)
-               volume_id_close(vid);
-       udev_unref(udev_ctx);
-       logging_close();
-       return rc;
-}
diff --git a/extras/volume_id/vol_id.xml b/extras/volume_id/vol_id.xml
deleted file mode 100644 (file)
index 475e9bc..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-
-<article>
-  <section>
-    <title>vol_id</title>
-    <refentry>
-      <refentryinfo>
-        <title>vol_id</title>
-        <date>March 2006</date>
-        <productname>volume_id</productname>
-      </refentryinfo>
-
-      <refmeta>
-        <refentrytitle>vol_id</refentrytitle>
-        <manvolnum>8</manvolnum>
-        <refmiscinfo class="version"></refmiscinfo>
-      </refmeta>
-
-      <refnamediv>
-        <refname>vol_id</refname><refpurpose>probe filesystem type and read label and uuid</refpurpose>
-      </refnamediv>
-
-      <refsynopsisdiv>
-        <cmdsynopsis>
-          <command>vol_id</command>
-          <arg><option>--export</option></arg>
-          <arg><option>--type</option></arg>
-          <arg><option>--label</option></arg>
-          <arg><option>--label-raw</option></arg>
-          <arg><option>--uuid</option></arg>
-          <arg><option>--skip-raid</option></arg>
-          <arg><option>--probe-all</option></arg>
-          <arg><option>--offset=<replaceable>bytes</replaceable></option></arg>
-          <arg><option>--debug</option></arg>
-          <arg><option>--help</option></arg>
-          <arg><replaceable>device</replaceable></arg>
-        </cmdsynopsis>
-      </refsynopsisdiv>
-
-      <refsect1><title>DESCRIPTION</title>
-        <para><command>vol_id</command> is usually called from a udev rule, to
-        provide udev with the filesystem type, the label and the uuid of a
-        volume. It supports most of the common filesystem formats and detects
-        various raid setups to prevent the recognition of raid members
-        as a volume with a filesystem.</para>
-      </refsect1>
-
-      <refsect1><title>OPTIONS</title>
-        <variablelist>
-          <varlistentry>
-            <term><option>--export</option></term>
-            <listitem>
-              <para>Print all values in key/value format to import them into the
-              environment.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--type</option></term>
-            <listitem>
-              <para>Print the filesystem type.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--label</option></term>
-            <listitem>
-              <para>
-                Print the safe version of volume label suitable for
-                use as filename.
-              </para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--label-raw</option></term>
-            <listitem>
-              <para>
-                Print the raw volume label.
-              </para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--uuid</option></term>
-            <listitem>
-              <para>Print the uuid of a volume.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--skip-raid</option></term>
-            <listitem>
-              <para>Skip detection of raid metadata.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--probe-all</option></term>
-            <listitem>
-              <para>Probe for all types and print all matches.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--offset=<replaceable>bytes</replaceable></option></term>
-            <listitem>
-              <para>Start probing at the given offset, instead of the beginning
-              of the volume. The offset value is specified in bytes.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--debug</option></term>
-            <listitem>
-              <para>Print debug messages to stderr.</para>
-            </listitem>
-          </varlistentry>
-          <varlistentry>
-            <term><option>--help</option></term>
-            <listitem>
-              <para>Print usage.</para>
-            </listitem>
-          </varlistentry>
-        </variablelist>
-      </refsect1>
-
-      <refsect1><title>ENVIRONMENT</title>
-        <variablelist>
-          <varlistentry>
-            <term><option>UDEV_LOG</option></term>
-            <listitem>
-              <para>Set the syslog priority.</para>
-            </listitem>
-          </varlistentry>
-        </variablelist>
-      </refsect1>
-
-      <refsect1><title>EXIT STATUS</title>
-        <para><command>vol_id</command> will only return successful if the
-        value asked for is not empty. All trailing whitespace will be removed,
-        spaces replaced by underscore and slashes ignored.</para>
-     </refsect1>
-
-      <refsect1><title>AUTHOR</title>
-        <para>Written by Kay Sievers <email>kay.sievers@vrfy.org</email></para>
-      </refsect1>
-
-      <refsect1>
-        <title>SEE ALSO</title>
-        <para><citerefentry>
-            <refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum>
-        </citerefentry></para>
-      </refsect1>
-    </refentry>
-  </section>
-</article>
index 4faf18c10635d197a119236cb082697148348015..6ba93b661ef988fe774b1bea6264dc050121274b 100644 (file)
@@ -27,7 +27,7 @@ ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env
 ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n"
 ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n"
 
-IMPORT{program}="vol_id --export $tempnode"
+IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
 OPTIONS+="link_priority=100"
 OPTIONS+="watch"
 ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
index 409548893bfafe9f300236c5accb03568e471d98..fea86d9310404a22c8e5887436383510b99cad35 100644 (file)
@@ -55,10 +55,10 @@ ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PA
 ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end"
 
 # probe filesystem metadata of optical drives which have a media inserted
-KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", IMPORT{program}="vol_id --export --skip-raid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode"
+KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", IMPORT{program}="/sbin/blkid -o udev -p -u noraid -O $env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode"
 
 # probe filesystem metadata of disks
-KERNEL!="sr*", IMPORT{program}="vol_id --export $tempnode"
+KERNEL!="sr*", IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
 
 # watch for future changes
 KERNEL!="sr*", OPTIONS+="watch"
index 15e7ddf75555bf37409f03cbc1de05be0f8f3f71..2bffe8344a11c8cbcea3ca108941acd71de6b849 100644 (file)
@@ -14,7 +14,7 @@ ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}", OPTIONS+="strin
 ENV{DM_STATE}=="SUSPENDED", GOTO="device_mapper_end"
 ENV{DM_TARGET_TYPES}=="|*error*", GOTO="device_mapper_end"
 
-IMPORT{program}="vol_id --export $tempnode"
+IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
 OPTIONS+="link_priority=-100"
 OPTIONS+="watch"
 ENV{DM_TARGET_TYPES}=="*snapshot-origin*", OPTIONS+="link_priority=-90"