zyxmon Posted June 18, 2016 Share Posted June 18, 2016 Репозиторий entware включает в себя два nfs сервера - userspace сервер unfs3 и ядерный. В связи с возможностью установки дополнительных модулей ядра - viewtopic.php?f=3&t=471 расширились и возможности кинетика. В этом сообщении я покажу как поднять ядерный nfs сервер. Первое, что нужно сделать, это установить нужные модули. См. скриншот: В момент написания данной заметки все установленные модули автоматически загружаются. Делать 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 Quote Link to comment Share on other sites More sharing options...
zyxmon Posted June 18, 2016 Author Share Posted June 18, 2016 Проверка быстродействия. Сразу отмазка - в качестве носителя использовалась далеко не самая быстрая флешка с 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 Quote Link to comment Share on other sites More sharing options...
zyxmon Posted June 18, 2016 Author Share Posted June 18, 2016 (edited) Несколько слов о 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 вполне подойдет. Edited June 19, 2016 by Guest Quote Link to comment Share on other sites More sharing options...
Дмитрий Posted June 19, 2016 Share Posted June 19, 2016 Для 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. Quote Link to comment Share on other sites More sharing options...
zyxmon Posted June 19, 2016 Author Share Posted June 19, 2016 Для nfs-kernel-server, сыпит А у меня не сыпЕт. Для начала спросите тут - http://obninsk.name/tele/ Главное в п.3. Какое устройство, прошивка, клиент, с какими опциями монтируется на клиенте? Чему равно cat /proc/fs/nfsd/max_block_size А что если у клиента при монтировании уменьшить wsize до этого значения? Учитесь искать решение самостоятельно. Потом делиться найденным! Много лет назад я слышал такое сравнение - Windows - это пельмени в пачке из магазина. Linux - это мука, мясо, соль, специи, мясорубка и поваренная книга. Если постараться, выйдет вкусно, если нет - хуже чем из магазина. Но поваренную книгу читать нужно и поработать придется, чтобы было вкусно. Quote Link to comment Share on other sites More sharing options...
Дмитрий Posted June 19, 2016 Share Posted June 19, 2016 На клиенте невозможно ничего сделать, китайцы защитились от ковыряния девайса. Документации на сервер все равно что нет, все что есть очень скудно. cat /proc/fs/nfsd/max_block_size возвращает 8192 Видел что кто-то пробовал менять, но как делал не пишет Соответственно вопрос, параметр может быть изменен на сервере или нет? омни v2.07(AAKU.10)B0 клиент - ip камера, трогать можно, но опасно, могу только методом тыка попробовать подобрать настройки сервера Quote Link to comment Share on other sites More sharing options...
zyxmon Posted June 19, 2016 Author Share Posted June 19, 2016 ...Соответственно вопрос, параметр может быть изменен на сервере или нет? ... Клиент позволяет запустить команду 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 ..... Может поможет, но не уверен. Quote Link to comment Share on other sites More sharing options...
Дмитрий Posted June 19, 2016 Share Posted June 19, 2016 Помогло, хоть я цели не достиг, но удалось увеличить буфер до 32к, более не поднимается Quote Link to comment Share on other sites More sharing options...
Дмитрий Posted June 19, 2016 Share Posted June 19, 2016 Еще чуть помучил, максимально поднял до 1048576 (1024к), но пришлось править строчку rpc.statd -p 1048576 -o 1048577 ну вот, сгустились тучи над камерой... Quote Link to comment Share on other sites More sharing options...
zyxmon Posted June 19, 2016 Author Share Posted June 19, 2016 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. Quote Link to comment Share on other sites More sharing options...
zyxmon Posted June 19, 2016 Author Share Posted June 19, 2016 На клиенте невозможно ничего сделать, китайцы защитились от ковыряния девайса..... Первое, что стоит сделать - проверить сервер с нормального клиента. Может и не китайцы виноваты. Дополнение 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 - работает. Может нужна особая ситуация, когда ошибка возникает? Quote Link to comment Share on other sites More sharing options...
TheBB Posted June 20, 2016 Share Posted June 20, 2016 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 Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted June 21, 2016 Share Posted June 21, 2016 Если что нужно подкрутить в дефолтах - агрментировано пишите в тему про модули, сделаем. Quote Link to comment Share on other sites More sharing options...
Дмитрий Posted December 20, 2016 Share Posted December 20, 2016 В 18.06.2016 в 12:22, zyxmon сказал: Первое, что нужно сделать, это установить нужные модули. См. скриншот: Прошу уточнить второе: как настраивать и как отлаживать, логи в журнале кинетика молчат, сам сервер молчит, никому не отвечает. Появился файл exports-opkg... Quote Link to comment Share on other sites More sharing options...
zyxmon Posted December 20, 2016 Author Share Posted December 20, 2016 24 минуты назад, Дмитрий сказал: Прошу уточнить второе: как настраивать и как отлаживать Вам слова из инструкции непонятны? Какие. Настраивать нужно по инструкции. Отлаживать по логам из журнала. Quote Link to comment Share on other sites More sharing options...
Дмитрий Posted December 20, 2016 Share Posted December 20, 2016 (edited) 28 минут назад, zyxmon сказал: Настраивать нужно по инструкции. Если имеете ввиду свой первый пост, то там описана установка. После установки и перезапуска роутера в логах ничего нет похожего на nfs start. Сервер на 2049 порту молчит. Edited December 20, 2016 by Дмитрий Quote Link to comment Share on other sites More sharing options...
zyxmon Posted December 20, 2016 Author Share Posted December 20, 2016 27 минут назад, Дмитрий сказал: Если имеете ввиду свой первый пост, то там описана установка. К сожалению описание установки исчезло из первого сообщения. По крайней мере мне инструкция не видна. Желания восстанавливать инструкцию у меня нет. Может снова пропасть. В третьем сообщении этого топика осталась инструкция об unfs - можете ее попробовать. Наверное пора завязывать с публикацией пропадающих инструкций. Quote Link to comment Share on other sites More sharing options...
jino Posted May 19, 2017 Share Posted May 19, 2017 В 2016-6-18 в 12:22, zyxmon сказал: wget http://pkg.entware-keenetic.ru/binaries/S20nfsd -O /opt/etc/init.d/S20nfsd Нету этого файла, подскажите где взять? Quote Link to comment Share on other sites More sharing options...
zyxmon Posted May 19, 2017 Author Share Posted May 19, 2017 1 минуту назад, jino сказал: Нету этого файла, подскажите где взять? Листинг файла есть в теме. Quote Link to comment Share on other sites More sharing options...
jino Posted May 22, 2017 Share Posted May 22, 2017 В 2017-5-19 в 15: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 * Quote Link to comment Share on other sites More sharing options...
jino Posted May 24, 2017 Share Posted May 24, 2017 А у кого-то получилось расшарить HFS+ по NFS? Quote Link to comment Share on other sites More sharing options...
Egor Staver Posted October 4, 2017 Share Posted October 4, 2017 Всем доброго времени суток! Подскажите, это особенность 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 Quote Link to comment Share on other sites More sharing options...
zyxmon Posted October 4, 2017 Author Share Posted October 4, 2017 23 минуты назад, Egor Staver сказал: А rpc.statd еще и sm-notify не в том месте ищет: Скорее всего это баг Entware. 23 минуты назад, Egor Staver сказал: что ядерный модуль не умеет четвертую версию NFS, и nfsd бесполезно запускать с поддержкой оной? Причина скорее не в модуле, а тут - https://github.com/Entware-for-kernel-3x/entware-packages-3x/blob/master/net/nfs-kernel-server/Makefile#L75 Quote Link to comment Share on other sites More sharing options...
Egor Staver Posted October 4, 2017 Share Posted October 4, 2017 Ну да, я неправильно выразился - модуль не "не умеет", а собран без поддержки. Кстати, нет предположений, по каким причинам потребовалось отключать версии 4 и 4.1? Quote Link to comment Share on other sites More sharing options...
zyxmon Posted October 4, 2017 Author Share Posted October 4, 2017 3 минуты назад, Egor Staver сказал: по каким причинам потребовалось отключать версии 4 и 4.1? С этим к openwrt. Взято у них - https://github.com/openwrt/packages/blob/master/net/nfs-kernel-server/Makefile#L78 @TheBB можно попросить собрать без этих опций и исправить баг (проверил, имеется) с путями. Но тогда с Вас тестирование..... Quote Link to comment Share on other sites More sharing options...
Egor Staver Posted October 4, 2017 Share Posted October 4, 2017 На тестирование согласен =) А ведь Entware берет исходники OpenWrt и собирает их в чистом виде (с учетом патчей, которые в репозитории Entware-for-kernel-3x на гитхабе)? Или я ошибаюсь? То есть, если разбираться с биндингом portmap'a к конкретному адресу и невозможности запуска nfsd после этого, то смотреть надо эти исходники: https://github.com/openwrt/ ? Quote Link to comment Share on other sites More sharing options...
zyxmon Posted October 4, 2017 Author Share Posted October 4, 2017 17 минут назад, Egor Staver сказал: Или я ошибаюсь? Entware использует некую модификацию buildroot от openwrt (самое вахжное - изменение пути по умолчанию, добавления префикса /opt). Модифицирует аналогичным образом Makefile для пакетов, добавляет патчи для пакетов. Исходники пакетов - общие от авторов пакета. Нужно смотреть Makefile пакета тут - https://github.com/openwrt/packages (для других фидов рядом) и исходники самого пакета. Есть и свои фиды у Entware. См - https://github.com/Entware-for-kernel-3x Quote Link to comment Share on other sites More sharing options...
zyxmon Posted October 4, 2017 Author Share Posted October 4, 2017 К слову поддержка nfs v4 зависит и от ядра, того как собраны модули. В Openwrt/lede такой поддержки нет. Не факт, что есть в кинетиках. С этим к разработчикам прошивок. Quote Link to comment Share on other sites More sharing options...
TheBB Posted October 4, 2017 Share Posted October 4, 2017 (edited) @Egor Staver , здесь с подправленными(?) путями. upd в репах (Е-3х) Edited October 4, 2017 by TheBB upd Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted October 4, 2017 Share Posted October 4, 2017 9 часов назад, Egor Staver сказал: Ну да, я неправильно выразился - модуль не "не умеет", а собран без поддержки. Кстати, нет предположений, по каким причинам потребовалось отключать версии 4 и 4.1? Да, собрано без NFSv4 и 4.1. Это сделано специально, потому что 3.4 ядро уже достаточно древнее и v4 там реализован очень криво. В современных ядрах ситуация лучше, как будем переходить на них (рано или поздно) - тогда и включим v4. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.