drop dracut duplicate functions
We maintained several kdump specific functions which are duplicate with the similar versions in dracut, Dracut upstream splitted dracut init stuff from dracut-functions.sh so that we can source it now. Notes about kdump_get_presistent_dev: Dracut now has a persistent_policy feature, for kdump when we dump to raw disks we do not care the filesystem uuid and labels so we prefer to search disk id instead. For raw disk set the persistent_policy before calling get_persistent_dev ensure kdump logic still work. Tested filesystem and raw dump in kvm guests. [Xunlei: drop other functions other than get_persistent_dev.] Signed-off-by: Dave Young <dyoung@redhat.com> Reviewed-by: Xunlei Pang <xlpang@redhat.com>
This commit is contained in:
parent
391969ced7
commit
631d979eb3
26
kdump-lib.sh
26
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
|
||||
|
8
kdumpctl
8
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
|
||||
|
70
mkdumprd
70
mkdumprd
@ -6,6 +6,8 @@
|
||||
# Written by Cong Wang <amwang@redhat.com>
|
||||
#
|
||||
|
||||
[[ $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 <device>
|
||||
# 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"
|
||||
|
Loading…
Reference in New Issue
Block a user