diff --git a/kdump-lib.sh b/kdump-lib.sh index 406bbc7..e3b5a01 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -88,32 +88,6 @@ to_dev_name() { echo $dev } -kdump_get_persistent_dev() { - local i _tmp _dev _lookup_dirs - - _dev=$(udevadm info --query=name --name="$1" 2>/dev/null) - [ -z "$_dev" ] && { - perror_exit "Kernel dev name of $1 is not found." - } - - if [[ $2 = "raw" ]];then - _lookup_dirs="/dev/mapper/* /dev/disk/by-id/*" - else - _lookup_dirs="/dev/mapper/* /dev/disk/by-uuid/* /dev/disk/by-id/*" - fi - - for i in $_lookup_dirs; do - _tmp=$(udevadm info --query=name --name="$i" 2>/dev/null) - if [ "$_tmp" = "$_dev" ]; then - echo $i - return - fi - done - - perror "WARNING: Persistent device name of $1 not found. Using $1 as dump target name" - echo $1 -} - get_user_configured_dump_disk() { local _target diff --git a/kdumpctl b/kdumpctl index 6f5df33..cb6f004 100755 --- a/kdumpctl +++ b/kdumpctl @@ -19,6 +19,8 @@ FADUMP_REGISTER_SYS_NODE="/sys/kernel/fadump_registered" DEFAULT_DUMP_MODE="kdump" image_time=0 +[[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut +. $dracutbasedir/dracut-functions.sh . /lib/kdump/kdump-lib.sh standard_kexec_args="-p" @@ -432,7 +434,11 @@ check_dump_fs_modified() if [[ $(expr substr $_new_fstype 1 3) = "nfs" ]];then _new_dev=$_target else - _new_dev=$(kdump_get_persistent_dev $_target $_new_fstype) + _new_dev=$(get_persistent_dev $_target) + if [ -z "$_new_dev" ]; then + echo "Get persistent device name failed" + return 2 + fi fi if ! findmnt $_target >/dev/null; then diff --git a/mkdumprd b/mkdumprd index 12f59a9..3359383 100644 --- a/mkdumprd +++ b/mkdumprd @@ -6,6 +6,8 @@ # Written by Cong Wang # +[[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut +. $dracutbasedir/dracut-functions.sh . /lib/kdump/kdump-lib.sh export IN_KDUMP=1 @@ -78,9 +80,6 @@ add_dracut_sshkey() { add_dracut_arg "--sshkey" "$1" } -# Generic substring function. If $2 is in $1, return 0. -strstr() { [[ $1 =~ $2 ]]; } - target_is_root() { local _t _t=$(findmnt -k -n -r -o TARGET $1|sort|head -1) @@ -127,8 +126,8 @@ to_mount() { _mntopts="$_target $_fstype $_options" #for non-nfs _dev converting to use udev persistent name if [ -b "$_source" ]; then - _pdev="$(kdump_get_persistent_dev $_source $_fstype)" - if [ $? -ne 0 ]; then + _pdev="$(get_persistent_dev $_source)" + if [ -z "$_pdev" ]; then return 1 fi @@ -257,63 +256,6 @@ add_mount() { fi } -# get_maj_min -# Prints the major and minor of a device node. -# Example: -# $ get_maj_min /dev/sda2 -# 8:2 -get_maj_min() { - local _dev - _dev=$(stat -L -c '$((0x%t)):$((0x%T))' "$1" 2>/dev/null) - _dev=$(eval "echo $_dev") - echo $_dev -} - -# ugly workaround for the lvm design -# There is no volume group device, -# so, there are no slave devices for volume groups. -# Logical volumes only have the slave devices they really live on, -# but you cannot create the logical volume without the volume group. -# And the volume group might be bigger than the devices the LV needs. -check_vol_slaves() { - local _lv _vg _pv - for i in /dev/mapper/*; do - _lv=$(get_maj_min $i) - if [[ $_lv = $2 ]]; then - _vg=$(lvm lvs --noheadings -o vg_name $i 2>/dev/null) - # strip space - _vg=$(echo $_vg) - if [[ $_vg ]]; then - for _pv in $(lvm vgs --noheadings -o pv_name "$_vg" 2>/dev/null) - do - check_block_and_slaves $1 $(get_maj_min $_pv) && return 0 - done - fi - fi - done - return 1 -} - -# Walk all the slave relationships for a given block device. -# Stop when our helper function returns success -# $1 = function to call on every found block device -# $2 = block device in major:minor format -check_block_and_slaves() { - local _x - [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry. - "$1" $2 && return - check_vol_slaves "$@" && return 0 - if [[ -f /sys/dev/block/$2/../dev ]]; then - check_block_and_slaves $1 $(cat "/sys/dev/block/$2/../dev") && return 0 - fi - [[ -d /sys/dev/block/$2/slaves ]] || return 1 - for _x in /sys/dev/block/$2/slaves/*/dev; do - [[ -f $_x ]] || continue - check_block_and_slaves $1 $(cat "$_x") && return 0 - done - return 1 -} - get_block_dump_target() { local _target @@ -532,8 +474,8 @@ do dd if=$config_val count=1 of=/dev/null > /dev/null 2>&1 || { perror_exit "Bad raw disk $config_val" } - _praw=$(kdump_get_persistent_dev $config_val "raw") - if [ $? -ne 0 ]; then + _praw=$(persistent_policy="by-id" get_persistent_dev $config_val) + if [ -z "$_praw" ]; then exit 1 fi add_dracut_arg "--device" "$_praw"