Назад | Перейти на главную страницу

Netatalk 3.0.1 отключается из-за плохого файлового дескриптора на FreeBSD

У меня проблемы с моим сервером netatalk 3.0.1 на FreeBSD-9.1 RELEASE. Netatalk был установлен из коллекции портов и использует некоторые каталоги по сети.

Обновить также netatalk версии 3.0.2 имеет те же проблемы на моей машине

afpd.conf

[Global]
; Global server settings

[Homes]
basedir regex = /home
home name = $f - $u 's Home

[testvolume]
path = /var/tmp

[Storage]
path = /tank

[Time Machine Backup]
path=/tank/TM_backup
vol size limit = 2000000
time machine = yes

/tank в моем случае является корнем пула ZFS с различными файловыми системами под ним. Я подключил к нему Mac под управлением Mac OS X 10.7.5, и он отлично работает как устройство Time Machine. Однако, если я хочу использовать общий ресурс хранилища для создания на нем новой библиотеки апертуры, Aperture просто останавливается и не может создать новую библиотеку на сервере. Глядя на журнал сервера, он выводит следующее:

журнал сервера

Feb 17 20:09:09 glacier afpd[3501]: afp_disconnect: primary reconnect failed
Feb 17 20:09:09 glacier afpd[3210]: Terminated disconnected child[3229], client rebooted.
Feb 17 20:09:09 glacier afpd[3505]: AFP3.3 Login by towe
Feb 17 20:09:09 glacier kernel: pid 3501 (afpd), uid 501: exited on signal 6
Feb 17 20:09:09 glacier afpd[3505]: afp_disconnect: trying primary reconnect
Feb 17 20:09:09 glacier afpd[3210]: Reconnect: transfering session to child[3501]
Feb 17 20:09:09 glacier afpd[3210]: read: Bad file descriptor
Feb 17 20:09:09 glacier afpd[3210]: Reconnect: error sending DSI id to child[3501]
Feb 17 20:09:14 glacier afpd[3505]: afp_disconnect: primary reconnect failed
Feb 17 20:09:14 glacier afpd[3210]: Terminated disconnected child[3229], client rebooted.
Feb 17 20:09:14 glacier kernel: pid 3505 (afpd), uid 501: exited on signal 6
Feb 17 20:09:14 glacier afpd[3506]: AFP3.3 Login by towe
Feb 17 20:09:14 glacier afpd[3506]: afp_disconnect: trying primary reconnect
Feb 17 20:09:14 glacier afpd[3210]: Reconnect: transfering session to child[3505]
Feb 17 20:09:14 glacier afpd[3210]: read: Bad file descriptor
Feb 17 20:09:14 glacier afpd[3210]: Reconnect: error sending DSI id to child[3505]

Таким образом, сервер застревает в 5-секундном повторяющемся цикле переподключения, который всегда терпит неудачу.

Это результат zfs list команда:

NAME                                    USED  AVAIL  REFER  MOUNTPOINT
tank                                    725G  4.62T   682K  /tank
tank/Downloads                         1.61G  4.62T  1.61G  /tank/Downloads
tank/TM_backup                          495G  4.62T   495G  /tank/TM_backup
tank/movies                             169G  4.62T   169G  /tank/movies
tank/music                             26.4G  4.62T  26.4G  /tank/music
tank/pictures                          24.3G  4.62T  24.3G  /tank/pictures

Мои вопросы

  1. Как я могу исправить эту петлю переподключения?
  2. Как я могу предотвратить отключение смонтированного общего ресурса AFP после некоторого времени бездействия?

ОБНОВИТЬ Теперь я обнаружил, что проблема возникает, только если я пишу в файловую систему RAIDZ. Обычный том ZFS работает.

Я не уверен, возникла ли у вас такая же проблема, но у меня была очень похожая проблема в недавнем прошлом (FreeBSD 8 + ZFS + Netatalk). При чтении файлов на томе клиенты отключались и истекал тайм-аут.

Для меня исправлением была перекомпиляция порта netatalk и отключение параметра SENDFILE в порту netatalk. Если у вас включена опция SENDFILE, возможно, стоит попробовать.