From: Victor Lowther Date: Wed, 19 Aug 2009 20:51:54 +0000 (-0500) Subject: Abstract out vol_id vs. blkid usage X-Git-Tag: 001~36 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=59c88f499f404429ea331252bd6ad8c9d537f7d3;p=thirdparty%2Fdracut.git Abstract out vol_id vs. blkid usage Since different distros may or may not use vol_id in udev, and blkid is generally replacing vol_id, abstract them out into a function which tries to use vol_id first and blkid second, on the assumption that blkid can take over for vol_id if vol_id is no longer there. --- diff --git a/dracut-functions b/dracut-functions index 1df20456c..655d311f6 100755 --- a/dracut-functions +++ b/dracut-functions @@ -48,6 +48,17 @@ derror() { [[ -w $dracutlogfile ]] && echo "E: $@" >>"$dracutlogfile" } +get_fs_type() ( + if [[ -x /lib/udev/vol_id ]]; then + eval /usr/udev/vol_id --export $1 + echo $ID_FS_TYPE + elif find_binary >/dev/null; then + blkid -o value -s TYPE $1 + else + return 1 + fi +) + # finds the major:minor of the block device backing the root filesystem. find_root_block_device() { local rootdev blkdev fs type opts misc diff --git a/modules.d/90crypt/check b/modules.d/90crypt/check index edd450d99..07c53f9f7 100755 --- a/modules.d/90crypt/check +++ b/modules.d/90crypt/check @@ -9,7 +9,7 @@ which cryptsetup >/dev/null 2>&1 || exit 1 . $dracutfunctions -is_crypt() { /lib/udev/vol_id /dev/block/$1 |grep -q crypto_LUKS; } +is_crypt() { [[ $(get_fs_type /dev/block/$1) = crypto_LUKS ]]; } [[ $1 = '-h' ]] && { rootdev=$(find_root_block_device) diff --git a/modules.d/90dmraid/check b/modules.d/90dmraid/check index 7008f811d..4dd9d7a3a 100755 --- a/modules.d/90dmraid/check +++ b/modules.d/90dmraid/check @@ -6,7 +6,7 @@ which dmraid >/dev/null 2>&1 || exit 1 . $dracutfunctions -is_dmraid() { /lib/udev/vol_id /dev/block/$1 |grep -v linux_raid_member | \ +is_dmraid() { get_fs_type /dev/block/$1 |grep -v linux_raid_member | \ grep -q _raid_member; } [[ $1 = '-h' ]] && { diff --git a/modules.d/90lvm/check b/modules.d/90lvm/check index 3e6a99075..e57d60f04 100755 --- a/modules.d/90lvm/check +++ b/modules.d/90lvm/check @@ -5,7 +5,7 @@ which lvm >/dev/null 2>&1 || exit 1 . $dracutfunctions -is_lvm() { /lib/udev/vol_id /dev/block/$1 |grep -q LVM2_member; } +is_lvm() { [[ $(get_fs_type /dev/block/$1) = LVM2_member ]]; } [[ $1 = '-h' ]] && { rootdev=$(find_root_block_device) @@ -15,7 +15,7 @@ is_lvm() { /lib/udev/vol_id /dev/block/$1 |grep -q LVM2_member; } check_block_and_slaves is_lvm "$rootdev" || exit 1 else # root is not on a block device, use the shotgun approach - blkid | grep -q lvm2pv || exit 1 + blkid | grep -q LVM2_member || exit 1 fi } diff --git a/modules.d/90mdraid/check b/modules.d/90mdraid/check index d002bdc33..5bffd36a1 100755 --- a/modules.d/90mdraid/check +++ b/modules.d/90mdraid/check @@ -5,7 +5,7 @@ which mdadm >/dev/null 2>&1 || exit 1 . $dracutfunctions -is_mdraid() { /lib/udev/vol_id /dev/block/$1 |egrep -q '(linux|isw)_raid'; } +is_mdraid() { get_fs_type /dev/block/$1 |egrep -q '(linux|isw)_raid'; } [[ $1 = '-h' ]] && { rootdev=$(find_root_block_device)