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

Windows 2008 NFS, команда find не работает рекурсивно на клиенте unix

У меня есть сервер хранения Windows 2008, настроенный для службы NFS. Я использую клиент FreeBSD для монтирования общего ресурса с сервера хранения. Все работает нормально, например, копирование, удаление файлов и т. Д. Однако, когда я запускаю find на моем клиенте FreeBSD для некоторого каталога внутри смонтированной файловой системы, команда не может вывести список файлов рекурсивно. В нем перечислены непосредственные дочерние файлы и каталоги. Файлы внутри подкаталога не отображаются.

Кто-нибудь может помочь, в чем может быть проблема?

Я видел почти то же самое в Linux и покопался в исходном коде Findutils. Похоже, что в Windows Server 2008 может быть ошибка, когда d_type поле (struct dirent*) вернулся readdir() на клиенте NFS - 8 (DT_REG, неверно) вместо 4 (DT_DIR, ожидалось). Неудивительно, что find не выполняет рекурсию в поддереве таких каталогов.

Если вы хотите проверить это самостоятельно, вы можете скачать исходники findutils-4.4.2. Измените строку gnulib / lib / fts.c ​​1136

if (sp->fts_compar == NULL || ISSET(FTS_DEFER_STAT)) {

к

if (0 && sp->fts_compar == NULL || ISSET(FTS_DEFER_STAT)) {

и восстановить найти. После этого изменения find вернул все ожидаемые каталоги, по крайней мере, для тех случаев, которые я пробовал. Я не знаю, будет ли это полное исправление, которое гарантированно будет работать во всех случаях.

Я еще не знаю, знает ли Microsoft об этом и есть ли исправление, и было ли оно исправлено в Windows Server 2008 R2.

IIUC NFS-сервер Windows, по крайней мере, раньше был скорее «функцией флажка», чем чем-то полезным для реальной работы. Однако не знаю, изменилось ли что-нибудь в w2k8.

Возможно, вам повезет с монтированием через CIFS, если у FreeBSD есть клиент CIFS?