MYCSS

2023-05-13

Нотатка. Монтування дисків NFS, ZFS поверх iSCSI. FreeBSD rc.d.

Є підключення диска через iSCSI, надалі диск форматується у ZFS. При завантаженні системи потрібно зачекати мережевого з'єднання iSCSI Initiatior з iSCSI target. Потім, змотувати ZFS pool. Потім запустити hook скрипт, після успішного монтування.  

source imgage : https://www.data-storage.uk
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"
view raw iscsi-zfs hosted with ❤ by GitHub

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, монтування продовжиться у фоновому процесі, а завантаження системи піде далі.

Немає коментарів:

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready