晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/proc/self/root/proc/thread-self/root/lib/dracut/modules.d/95nvmf/ |
| Current File : //proc/self/root/proc/thread-self/root/lib/dracut/modules.d/95nvmf/module-setup.sh |
#!/usr/bin/bash
# called by dracut
check() {
require_binaries nvme jq || return 1
is_nvmf() {
local _dev=$1
local trtype
[[ -L "/sys/dev/block/$_dev" ]] || return 0
cd -P "/sys/dev/block/$_dev" || return 0
if [ -f partition ]; then
cd ..
fi
for d in device/nvme*; do
[ -L "$d" ] || continue
if readlink "$d" | grep -q nvme-fabrics; then
trtype=$(cat "$d"/transport)
break
fi
done
[[ $trtype == "fc" ]] || [[ $trtype == "tcp" ]] || [[ $trtype == "rdma" ]]
}
has_nbft() {
local f found=
for f in /sys/firmware/acpi/tables/NBFT*; do
[ -f "$f" ] || continue
found=1
break
done
[[ $found ]]
}
[[ $hostonly ]] || [[ $mount_needs ]] && {
[ -f /etc/nvme/hostnqn ] || return 255
[ -f /etc/nvme/hostid ] || return 255
pushd . > /dev/null
for_each_host_dev_and_slaves is_nvmf
local _is_nvmf=$?
popd > /dev/null || exit
[[ $_is_nvmf == 0 ]] || return 255
if [ ! -f /sys/class/fc/fc_udev_device/nvme_discovery ] \
&& [ ! -f /etc/nvme/discovery.conf ] \
&& [ ! -f /etc/nvme/config.json ] && ! has_nbft; then
echo "No discovery arguments present"
return 255
fi
}
return 0
}
# called by dracut
depends() {
echo bash rootfs-block network
return 0
}
# called by dracut
installkernel() {
instmods nvme_fc lpfc qla2xxx
hostonly="" instmods nvme_tcp nvme_fabrics 8021q
# lookup NIC kernel modules for active NBFT interfaces
if [[ $hostonly ]]; then
for i in /sys/class/net/nbft*; do
[ -d "$i" ] || continue
_driver=$(basename "$(readlink -f "$i/device/driver/module")")
[ -z "$_driver" ] || instmods "$_driver"
done
fi
}
# called by dracut
cmdline() {
local _hostnqn
local _hostid
gen_nvmf_cmdline() {
local _dev=$1
local trtype
local traddr
local host_traddr
local trsvcid
local _address
local -a _address_parts
[[ -L "/sys/dev/block/$_dev" ]] || return 0
cd -P "/sys/dev/block/$_dev" || return 0
if [ -f partition ]; then
cd ..
fi
for d in device/nvme*; do
[ -L "$d" ] || continue
if readlink "$d" | grep -q nvme-fabrics; then
trtype=$(cat "$d"/transport)
break
fi
done
[ -z "$trtype" ] && return 0
nvme list-subsys "${PWD##*/}" | while read -r _ _ trtype _address _; do
[[ -z $trtype || $trtype != "${trtype#NQN}" ]] && continue
unset traddr
unset host_traddr
unset trsvcid
mapfile -t -d ',' _address_parts < <(printf "%s" "$_address")
for i in "${_address_parts[@]}"; do
[[ $i =~ ^traddr= ]] && traddr="${i#traddr=}"
[[ $i =~ ^host_traddr= ]] && host_traddr="${i#host_traddr=}"
[[ $i =~ ^trsvcid= ]] && trsvcid="${i#trsvcid=}"
done
[[ -z $traddr && -z $host_traddr && -z $trsvcid ]] && continue
echo -n " rd.nvmf.discover=$trtype,$traddr,$host_traddr,$trsvcid"
done
}
if [ -f /etc/nvme/hostnqn ]; then
_hostnqn=$(cat /etc/nvme/hostnqn)
echo -n " rd.nvmf.hostnqn=${_hostnqn}"
fi
if [ -f /etc/nvme/hostid ]; then
_hostid=$(cat /etc/nvme/hostid)
echo -n " rd.nvmf.hostid=${_hostid}"
fi
[[ $hostonly ]] || [[ $mount_needs ]] && {
pushd . > /dev/null
for_each_host_dev_and_slaves gen_nvmf_cmdline
popd > /dev/null || exit
}
}
# called by dracut
install() {
if [[ $hostonly_cmdline == "yes" ]]; then
local _nvmf_args
_nvmf_args=$(cmdline)
[[ "$_nvmf_args" ]] && printf "%s" "$_nvmf_args" >> "${initdir}/etc/cmdline.d/95nvmf-args.conf"
fi
inst_simple -H "/etc/nvme/hostnqn"
inst_simple -H "/etc/nvme/hostid"
inst_multiple ip sed
inst_script "${moddir}/nvmf-autoconnect.sh" /sbin/nvmf-autoconnect.sh
inst_script "${moddir}/nbftroot.sh" /sbin/nbftroot
inst_multiple nvme jq
inst_hook cmdline 92 "$moddir/parse-nvmf-boot-connections.sh"
inst_simple "/etc/nvme/discovery.conf"
inst_simple "/etc/nvme/config.json"
inst_rules /usr/lib/udev/rules.d/71-nvmf-iopolicy-netapp.rules
inst_rules "$moddir/95-nvmf-initqueue.rules"
dracut_need_initqueue
}
|