Є підключення диска через iSCSI, надалі диск форматується у ZFS. При завантаженні системи потрібно зачекати мережевого з'єднання iSCSI Initiatior з iSCSI target. Потім, змотувати ZFS pool. Потім запустити hook скрипт, після успішного монтування.
![]() |
iSCSI Storage |
iSCSI
/etc/rc.conf:
#iSCSI iscsid_enable="YES" iscsictl_enable="YES" iscsictl_flags="-Aa"/etc/iscsi.conf:
t0 { TargetAddress = nas1 TargetName = iqn.2023-05.net.server.nas1:server1-storage AuthMethod = CHAP chapIName = server1 chapSecret = "kdwkjdqhdww3qq@@6td3_3eiw9e7w43" }
ZFS:
/etc/rc.conf:
#iSCSI_ZFS iscsi_zfs_enable="YES" iscsi_zfs_wait_iqn="server1-storage" iscsi_zfs_wait_pool="storage" iscsi_zfs_post_hook="/root/script/post-mount.sh" iscsi_zfs_pre_hook="/root/script/pre-umount.sh"
Файл /usr/local/etc/rc.d/iscsi-zfs :
#!/bin/sh | |
# PROVIDE: iscsi-zfs | |
# REQUIRE: iscsid iscsictl mountcritlocal var | |
# KEYWORD: nojail shutdown | |
. /etc/rc.subr | |
name="iscsi_zfs" | |
start_cmd="${name}_start" | |
stop_cmd="${name}_stop" | |
rcvar="${name}_enable" | |
iscsi_zfs_enable=${iscsi_zfs_enable:-"NO"} | |
iscsi_zfs_wait_iqn=${iscsi_zfs_wait_iqn:-""} | |
iscsi_zfs_wait_pool=${iscsi_zfs_wait_pool:-""} | |
iscsi_zfs_wait_retry=${iscsi_zfs_wait_retry:-"30"} | |
iscsi_zfs_post_hook=${iscsi_zfs_post_hook:-""} | |
iscsi_zfs_pre_hook=${iscsi_zfs_pre_hook:-""} | |
iscsi_zfs_start() | |
{ | |
retry=0 | |
while [ "$retry" -lt "${iscsi_zfs_wait_retry}" ] | |
do | |
if iscsictl | fgrep "${iscsi_zfs_wait_iqn}" | fgrep "Connected: " >/dev/null; then | |
break | |
fi | |
retry=`expr ${retry} + 1` | |
sleep 1 | |
done | |
if [ -z "${iscsi_zfs_wait_pool}" ]; then | |
zpool import -a >/dev/null 2>&1 | |
zfs mount -a | |
if [ ! -z "${iscsi_zfs_post_hook}" ]; then | |
`${iscsi_zfs_post_hook}` | |
fi | |
else | |
retry=0 | |
while [ "$retry" -lt "${iscsi_zfs_wait_retry}" ] | |
do | |
if zpool status "${iscsi_zfs_wait_pool}" >/dev/null 2>&1; then | |
break | |
fi | |
zpool import "${iscsi_zfs_wait_pool}" >/dev/null 2>&1 | |
retry=`expr ${retry} + 1` | |
sleep 1 | |
done | |
retry=0 | |
while [ "$retry" -lt "${iscsi_zfs_wait_retry}" ] | |
do | |
zfs mount -a | |
if mount | fgrep "${iscsi_zfs_wait_pool}" >/dev/null 2>&1; then | |
if [ ! -z "${iscsi_zfs_post_hook}" ]; then | |
`${iscsi_zfs_post_hook}` | |
fi | |
break | |
fi | |
retry=`expr ${retry} + 1` | |
sleep 1 | |
done | |
fi | |
} | |
iscsi_zfs_stop() | |
{ | |
if [ ! -z "${iscsi_zfs_pre_hook}" ];then | |
`${iscsi_zfs_pre_hook}` | |
fi | |
if [ -z "${iscsi_zfs_wait_pool}" ]; then | |
zfs umount -a | |
zpool export -a >/dev/null 2>&1 | |
else | |
zfs umount -a | |
zpool export -f "${iscsi_zfs_wait_pool}" >/dev/null 2>&1 | |
fi | |
} | |
load_rc_config $name | |
run_rc_command "$1" |
NFS:
/etc/rc.conf:
#NFS rpcbind_enable="YES" nfs_client_enable="YES" rpc_lockd_enable="YES" rpc_statd_enable="YES"
/etc/fstab:
# Device<-->Mountpoint<>FStype<>Options>Dump<-->Pass# # ... nfs-server:/storage-raid /mnt/raid nfs rw,bg 0 0
Опція -o bg, дозволяє при монтуванні у /etc/rc.d/mountcritremote у випадку помилки мережі, не зависати серверу. І тоді віддалено не зайдеш.
А так з bg, монтування продовжиться у фоновому процесі, а завантаження системи піде далі.
Немає коментарів:
Дописати коментар