Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Репозиторий entware включает в себя два nfs сервера - userspace сервер unfs3 и ядерный. В связи с возможностью установки дополнительных модулей ядра - viewtopic.php?f=3&t=471

расширились и возможности кинетика. В этом сообщении я покажу как поднять ядерный nfs сервер.

Первое, что нужно сделать, это установить нужные модули. См. скриншот:

nfs.png

В момент написания данной заметки все установленные модули автоматически загружаются. Делать insmod или modprobe не нужно.
Второе- установим и запустим pormap

opkg install portmap
/opt/etc/init.d/S55portmap start


(После перезагрузок pormap будет автоматически запускаться)
Третье - установим сервер

opkg install nfs-kernel-server


Четвертое - отредактируем файл /opt/etc/exports 

 # cat /opt/etc/exports
/opt    *(rw,no_root_squash,insecure,sync,no_subtree_check)


Я в этом примере расшариваю всем всю директорию /opt на запись 
Пятое - удалим скрипт запуска и заменим его другим

rm /opt/etc/init.d/S57nfs-kernel-server
wget http://pkg.entware-keenetic.ru/binaries/S20nfsd -O /opt/etc/init.d/S20nfsd
chmod +x /opt/etc/init.d/S20nfsd


Шестое. Запустим скрипт запуска

/opt/etc/init.d/S20nfsd start


Седьмое - профит!  :D

PS Лучше переименовать скрипты запуска portmap и nfsd, чтобы portmap запускался первым.
PPS. Содержимое S20nfsd:

 # cat /opt/etc/init.d/S20nfsd
#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
	PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NFS_D=/opt/var/lib/nfs
LOCK_D=/opt/var/lib/nfs/sm
	start() {
        grep -q /proc/fs/nfsd /proc/mounts || \
                mount -t nfsd nfsd /proc/fs/nfsd
        mkdir -p $LOCK_D
        touch $NFS_D/rmtab
        sysctl -w fs.nfs.nlm_tcpport=32777 fs.nfs.nlm_udpport=32777 > /dev/null
        rpc.statd -p 32778 -o 32779
        exportfs -r
        rpc.nfsd
        rpc.mountd -p 32780
}
	stop() {
        killall rpc.mountd 2> /dev/null
        rpc.nfsd 0 2> /dev/null
        exportfs -au
        killall rpc.statd 2> /dev/null
        grep -q /proc/fs/nfsd /proc/mounts && \
                umount /proc/fs/nfsd
}
	reload() {
        exportfs -r
}

case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            stop
            start
            ;;
        reload)
                reload
            ;;
        link_up)
                ;;
        ppp_up)
            ;;
        link_down)
            ;;
        ppp_down)
            ;;
        *)
            echo "Usage: $0 {start|stop|restart|reload|link_up|link_down|ppp_up|ppp_down}"
            ;;
esac

Опубликовано

Проверка быстродействия.

Сразу отмазка - в качестве носителя использовалась далеко не самая быстрая флешка с ext2. Роутер Extra.

Монтировалось на НАСе с Intel Atom (-o vers=3,udp)

Запись

dd if=/dev/zero of=tempfile bs=100k count=10240
10240+0 records in
10240+0 records out
1048576000 bytes (1.0 GB) copied, 349.182 s, 3.0 MB/s

CPU загружен в районе 30%.

Чтение этого же файла

 dd if=./tempfile  of=/dev/null bs=100k
10240+0 records in
10240+0 records out
1048576000 bytes (1.0 GB) copied, 82.6796 s, 12.7 MB/s

CPU загружен в районе 60%. Данные привожу для сравнения с неядерным unfs3

Опубликовано (изменено)

Несколько слов о userspace nfs сервере unfs3.

Устанавливается он командой `opkg install unfs3`. Для работы так же нужен запущенный portmap.

Файл /opt/etc/exports можно такой (расшариваем на запись /opt)

 # cat /opt/etc/exports
/opt    (rw,no_root_squash,insecure)

Скрипт запуска `/opt/etc/init.d/S56unfsd`

Быстродействие (условия из сообщения выше)

Скорость записи печальная

# dd if=/dev/zero of=tempfile bs=100k count=10240
10240+0 records in
10240+0 records out
1048576000 bytes (1.0 GB) copied, 1209.39 s, 867 kB/s

Загрузка CPU не выше, чем для ядерного сервера.

Скорее всего виновник таких низких скоростей - флешка. Измерения скорости несколько лет назад с hdd показывало превосходство unfs3 над samba и заметно более высокие скорости записи.

А вот чтение - быстрее !!!

# dd if=./tempfile  of=/dev/null bs=100k
10240+0 records in
10240+0 records out
1048576000 bytes (1.0 GB) copied, 64.5975 s, 16.2 MB/s

При загрузке CPU около 90%.

Вывод - если nfs сервер нужен для предоставления контента мультимедиа плееру (transmission на кинетике, плеер берет скачанное по nfs), unfs3 вполне подойдет.

Изменено пользователем Гость
Опубликовано

Для nfs-kernel-server, сыпит

Jun 19 11:25:29ndmkernel: RPC: fragment too large: 0x7f010000
Jun 19 11:25:35ndmkernel: RPC: fragment too large: 0x7f010000
Jun 19 11:25:41ndmkernel: RPC: fragment too large: 0x7f010000
Jun 19 11:25:41ndmCore::Syslog: last message repeated 2 times.

Опубликовано
  Дмитрий сказал:
Для nfs-kernel-server, сыпит

А у меня не сыпЕт. Для начала спросите тут - http://obninsk.name/tele/

Главное в п.3.

Какое устройство, прошивка, клиент, с какими опциями монтируется на клиенте? Чему равно

cat /proc/fs/nfsd/max_block_size

А что если у клиента при монтировании уменьшить wsize до этого значения?

Учитесь искать решение самостоятельно. Потом делиться найденным!

Много лет назад я слышал такое сравнение - Windows - это пельмени в пачке из магазина. Linux - это мука, мясо, соль, специи, мясорубка и поваренная книга. Если постараться, выйдет вкусно, если нет - хуже чем из магазина. Но поваренную книгу читать нужно и поработать придется, чтобы было вкусно.

Опубликовано

На клиенте невозможно ничего сделать, китайцы защитились от ковыряния девайса.

Документации на сервер все равно что нет, все что есть очень скудно.

cat /proc/fs/nfsd/max_block_size возвращает 8192

Видел что кто-то пробовал менять, но как делал не пишет

Соответственно вопрос, параметр может быть изменен на сервере или нет?

омни v2.07(AAKU.10)B0

клиент - ip камера, трогать можно, но опасно, могу только методом тыка попробовать подобрать настройки сервера

Опубликовано
  Дмитрий сказал:
...

Соответственно вопрос, параметр может быть изменен на сервере или нет?

...

Клиент позволяет запустить команду mount без параметров, чтобы узнать размер буферов чтения и записи?

Гугл говорит, что начиная с ядра 3.4 значение max_block_size вычисляется автоматически в зависимости от размера RAM. У меня на Extra RAM в два раза больше и max_block_size в 2 раза больше.

Можно попробовать через echo увеличить это значение, посмотрев, что клиент запрашивает.

Вот в этом месте

....
grep -q /proc/fs/nfsd /proc/mounts || \
               mount -t nfsd nfsd /proc/fs/nfsd

echo 32768 >  /proc/fs/nfsd/max_block_size

       mkdir -p $LOCK_D
.....        

Может поможет, но не уверен.

Опубликовано
  Дмитрий сказал:

rpc.statd -p 1048576 -o 1048577

это номера портов

usage: rpc.statd [options]
     -h, -?, --help       Print this help screen.
     -F, --foreground     Foreground (no-daemon mode)
     -d, --no-syslog      Verbose logging to stderr.  Foreground mode only.
     -p, --port           Port to listen on
     -o, --outgoing-port  Port for outgoing connections
     -V, -v, --version    Display version information and exit.
     -n, --name           Specify a local hostname.
     -P                   State directory path.
     -N                   Run in notify only mode.
     -L, --no-notify      Do not perform any notification.
     -H                   Specify a high-availability callout program.

У меня с буфером 16k и нормальным клиентом проблем нет. Если nfs нужен для чтения с кинетика - имеет смысл попробовать unfs3.

Опубликовано
  Дмитрий сказал:
На клиенте невозможно ничего сделать, китайцы защитились от ковыряния девайса.

....

Первое, что стоит сделать - проверить сервер с нормального клиента. Может и не китайцы виноваты.

Дополнение 1. Насколько понял - значение /proc/fs/nfsd/max_block_size играет роль только для tcp. Подключился клиентом по tcp. Он поставил буферы в 32k (у меня max_block_size=16k) скопировал несколько файлов туда-сюда. Ошибки нет. На всякий пожарный (если копаем в правильном направлении). Размер 8k минимальный и задается тут

https://github.com/ndmsystems/linux-3.4 ... svc.c#L308

Так он задавался всегда. А ядерный nfs сервер заводили еще на белых кинетиках без проблем (по tcp).

Дополнение 2. Вот оно сообщение об ошибке - https://github.com/ndmsystems/linux-3.4 ... ck.c#L1018

Только для tcp. Нужно проверить работу сервера по tcp с нормального некитайского клиента и делать выводы. У меня на Extra - работает. Может нужна особая ситуация, когда ошибка возникает?

Опубликовано

OmniII v2.07(AAUS.10)B0 + *nix (Ubuntu/FreeBSD/Debian)

размер по дефолту - 8k

~ # cat /proc/fs/nfsd/max_block_size
8192

монтирование по udp/tcp

mount -t nfs 192.168.1.7:/opt /media/nfs/ -o vers=3,udp
mount -t nfs 192.168.1.7:/opt /media/nfs/ -o vers=3,tcp

копирование файла туды-суды (пример)

~$ cp /home/thebb/zyxel/kng_rb_draft_2.06.B.3.0-4.bin /media/nfs/tmp/
~$ cp -rf /media/nfs/tmp/kng_rb_draft_2.06.B.3.0-4.bin /home/thebb/zyxel/

часть сислога

[i] Jun 20 13:51:35 rpc.mountd[3350]: Caught signal 15, un-registering and exiting.
[W] Jun 20 13:51:35 ndm: kernel: nfsd: last server has exited, flushing export cache
[i] Jun 20 13:51:35 rpc.statd[3850]: Version 1.3.3 starting
[W] Jun 20 13:51:35 rpc.statd[3850]: Running as root.  chown /opt/var/lib/nfs to choose different user
[W] Jun 20 13:51:35 ndm: kernel: svc: failed to register lockdv1 RPC service (errno 124).
[i] Jun 20 13:51:35 rpc.mountd[3864]: Version 1.3.3 starting
[i] Jun 20 14:18:49 rpc.mountd[3864]: authenticated mount request from 192.168.1.5:814 for /opt (/opt)
[i] Jun 20 14:23:22 rpc.mountd[3864]: authenticated unmount request from 192.168.1.5:723 for /opt (/opt)
[W] Jun 20 14:32:25 ndm: kernel: svc: 192.168.1.50, port=719: unknown version (4 for prog 100003, nfsd)
[i] Jun 20 14:32:25 rpc.mountd[3864]: authenticated mount request from 192.168.1.50:991 for /opt (/opt)
[i] Jun 20 14:33:06 rpc.mountd[3864]: authenticated unmount request from 192.168.1.50:722 for /opt (/opt)
[i] Jun 20 14:35:27 rpc.mountd[3864]: authenticated mount request from 192.168.1.50:849 for /opt (/opt)
[i] Jun 20 14:43:15 rpc.mountd[3864]: authenticated unmount request from 192.168.1.50:961 for /opt (/opt)
[i] Jun 20 14:43:39 rpc.mountd[3864]: authenticated mount request from 192.168.1.50:1022 for /opt (/opt)

как говорят умные люди со светлыми головами, это "svc: failed to register lockdv1 RPC service (errno 124)" - нормально, при наличии ipv6

  • 5 месяцев спустя...
Опубликовано
  В 18.06.2016 в 09:22, zyxmon сказал:

Первое, что нужно сделать, это установить нужные модули. См. скриншот:

Показать  

Прошу уточнить второе: как настраивать и как отлаживать, логи в журнале кинетика молчат, сам сервер молчит, никому не отвечает. Появился файл exports-opkg...

Опубликовано
  В 20.12.2016 в 17:52, Дмитрий сказал:

Прошу уточнить второе: как настраивать и как отлаживать

Показать  

Вам слова из инструкции непонятны? Какие. Настраивать нужно по инструкции. Отлаживать по логам из журнала.

Опубликовано (изменено)
  В 20.12.2016 в 18:17, zyxmon сказал:

Настраивать нужно по инструкции. 

Показать  

Если имеете ввиду свой первый пост, то там описана установка.

После установки и перезапуска роутера в логах ничего нет похожего на nfs start.

Сервер на 2049 порту молчит.

Изменено пользователем Дмитрий
Опубликовано
  В 20.12.2016 в 18:43, Дмитрий сказал:

Если имеете ввиду свой первый пост, то там описана установка.

Показать  

К сожалению описание установки исчезло из первого сообщения. По крайней мере мне инструкция не видна. Желания восстанавливать инструкцию у меня нет. Может снова пропасть.

В третьем сообщении этого топика осталась инструкция об unfs - можете ее попробовать.

Наверное пора завязывать с публикацией пропадающих инструкций.

  • 3 месяца спустя...
Опубликовано
  В 19.05.2017 в 12:53, zyxmon сказал:

Листинг файла есть в теме.

Показать  

Спасибо нашел :)

Теперь такая проблема хочу расшарить по NFS диск с файловой системой HFS+ примонтирован автоматически в /tmp/mnt/KINO

для этого пишу в файле /opt/etc/exports

/tmp/mnt/KINO *(rw,no_subtree_check,all_squash,insecure,sync)

и после этого команда exportfs -arv

выдает 

exporting *:/tmp/mnt/KINO

exportfs: /tmp/mnt/KINO does not support NFS export

И я не могу смонтировать диск, хотя  showmount на компьютере показывает, а при подсоединении пишет что нет прав на подключение.

showmount -e  192.168.2.1

Exports list on 192.168.2.1:

/tmp/mnt/KINO                       *

 

  • 4 месяца спустя...
Опубликовано

Всем доброго времени суток!

Подскажите, это особенность NFS в целом, или конкретной сборки:

если я запускаю portmap с параметром -i 127.0.0.1 (тоже, что и -l) или -i 0.0.0.0/0, или не указываю этот параметр вовсе, то запуск остальных компонентов происходит нормально. Но, если я пытаюсь привязать portmap к ip-адресу vlan'а домашней сети, то rpc.nfsd при запуске вываливает в лог

  Цитата

rpc.nfsd: Created AF_INET TCP socket.
rpc.nfsd: writing fd to kernel failed: errno 146 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd

Показать  

rpc.mountd и rpc.statd выдают

  Цитата

Cannot register service: RPC: Unable to receive; errno = Connection refused

Показать  

А rpc.statd еще и sm-notify не в том месте ищет:

  Цитата

rpc.statd: failed to run /usr/sbin/sm-notify

Показать  

в то время как sm-notify лежит здесь: /opt/sbin/sm-notify. Симлинк создать нет возможности, по причине того, что /usr/sbin только для чтения.

Хотя, отсутствие sm-notify на запуск не влияет (при "правильно" запущенном portmap).

 

И сразу еще вопрос до кучи:

я правильно понимаю из вывода

  Цитата

cat /proc/fs/nfsd/versions
-2 +3

Показать  

что ядерный модуль не умеет четвертую версию NFS, и nfsd бесполезно запускать с поддержкой оной?

 

Keenetic Giga II, 2.09.C.1.0-0, Entware-3x

Опубликовано
  В 04.10.2017 в 05:29, Egor Staver сказал:

А rpc.statd еще и sm-notify не в том месте ищет:

Показать  

Скорее всего это баг Entware.

  В 04.10.2017 в 05:29, Egor Staver сказал:

что ядерный модуль не умеет четвертую версию NFS, и nfsd бесполезно запускать с поддержкой оной?

Показать  

Причина скорее не в модуле, а тут - https://github.com/Entware-for-kernel-3x/entware-packages-3x/blob/master/net/nfs-kernel-server/Makefile#L75

Опубликовано

Ну да, я неправильно выразился - модуль не "не умеет", а собран без поддержки.

Кстати, нет предположений, по каким причинам потребовалось отключать версии 4 и 4.1?

Опубликовано
  В 04.10.2017 в 06:18, Egor Staver сказал:

по каким причинам потребовалось отключать версии 4 и 4.1?

Показать  

С этим к openwrt. Взято у них - https://github.com/openwrt/packages/blob/master/net/nfs-kernel-server/Makefile#L78

@TheBB можно попросить собрать без этих опций и исправить баг (проверил, имеется) с путями. Но тогда с Вас тестирование.....

Опубликовано

На тестирование согласен =)

А ведь Entware берет исходники OpenWrt и собирает их в чистом виде (с учетом патчей, которые в репозитории Entware-for-kernel-3x на гитхабе)? Или я ошибаюсь?

То есть, если разбираться с биндингом portmap'a к конкретному адресу и невозможности запуска nfsd после этого, то смотреть надо эти исходники: https://github.com/openwrt/ ?

Опубликовано
  В 04.10.2017 в 06:42, Egor Staver сказал:

Или я ошибаюсь?

Показать  

Entware использует некую модификацию buildroot от openwrt (самое вахжное - изменение пути по умолчанию, добавления префикса /opt). Модифицирует аналогичным образом Makefile для пакетов, добавляет патчи для пакетов. Исходники пакетов - общие от авторов пакета.

Нужно смотреть Makefile пакета тут - https://github.com/openwrt/packages (для других фидов рядом) и исходники самого пакета.

Есть и свои фиды у Entware. См - https://github.com/Entware-for-kernel-3x

Опубликовано

К слову поддержка nfs v4 зависит и от ядра, того как собраны модули. В Openwrt/lede такой поддержки нет. Не факт, что есть в кинетиках. С этим к разработчикам прошивок.

Опубликовано
  В 04.10.2017 в 06:18, Egor Staver сказал:

Ну да, я неправильно выразился - модуль не "не умеет", а собран без поддержки.

Кстати, нет предположений, по каким причинам потребовалось отключать версии 4 и 4.1?

Показать  

Да, собрано без NFSv4 и 4.1.

Это сделано специально, потому что 3.4 ядро уже достаточно древнее и v4 там реализован очень криво.

В современных ядрах ситуация лучше, как будем переходить на них (рано или поздно) - тогда и включим v4.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.