10

Я немного напряжен с файлом экспорта NFS.

В частности, я не могу найти способ экспортировать каталог, содержащий «-» в имени пути.

Руководство (экспорт (5)) гласит:

Also, each line may have one or more specifications for default options 
after the path name, in the form of a dash ("-") followed by an option 
list. The option list is used for all subsequent exports on that line 
only.

Затем говорится:

If an export name contains spaces it should be quoted using double quotes. 
You can also specify spaces or other unusual character in the export name 
using a backslash followed by the character code as three octal digits.

К сожалению, это не так. В частности, если путь содержит "-", дословно, либо с \055, либо заключен в двойные кавычки, он все равно ссылается на имя без "-"

Есть идеи? У меня есть большое количество каталогов, все формы

  • / Об / buildsystem-S3C2440
  • / Об / buildsystem-tao3530

и я бы предпочел, чтобы все они были доступны в качестве экспорта NFS. Если не считать замены "-" на "_" везде в сценариях, можно ли это сделать с помощью "-"?

5 ответов5

3

Основываясь на этом тексте, я предполагаю, что вы работаете в Linux?

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

В системах Linux есть две разные реализации NFS-сервера:

  • пользователь NFS
  • ядро NFS

Пожалуйста, попробуйте запустить ps -ef | grep nfsd чтобы увидеть, какой у вас есть.

Я думаю, что пользовательская NFS будет отображаться как nfsd или unfsd , а ядро NFS будет отображаться как [nfsd] .
(Обратите внимание, что у одного квадратные скобки, а у другого нет.)

С ядром NFS вы должны использовать двойные кавычки или восьмеричные экранированные символы, например

"/path/to/mount-point" <options>

или же

/path/to/mount\055point <options>

(Ссылка: nfs-utils-1.1.2, xgettok в support/nfs/xio.c)

В пользовательской NFS пробелы не допускаются в именах экспорта, но знак минус (-) не должен требовать экранирования, например

/path/to/mount-point <options>

(Ссылка: nfs-user-server-2.2beta47, filt_getc в auth_init.c)

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

В Debian и Ubuntu:

  • apt-get install kernel-nfs-server

На Red Hat и Fedora:

  • yum install nfs-utils
1

Вы пытались просто сбежать с \- . Я не эксперт по NFS, но стоит попробовать. Это работает во многих других ситуациях ...

1

Работает ли экранирование с обратной косой чертой?

  • / Об / buildsystem\-s3c2440
  • / Об / buildsystem\-tao3530
1

Хорошо, возможно, еще один обходной путь. Это немного хлопотно, но почему бы не создать каталог, содержащий символические ссылки на все предыдущие каталоги (для этого можно использовать скрипт или цикл while). Если имена символических ссылок не содержат тире, вы сможете экспортировать их. Таким образом, как вы и хотели, вам не нужно изменять имена ваших настоящих каталогов.

Я не уверен, что это сработает, но, наверное, стоит попробовать, не так ли?

1

Это немного взломано, но вы можете создать bind mounts для каждого из каталогов и экспортировать места назначения bind mounts. Что-то вроде:

mount -o bind /vol/buildsystem-s3c2440 /vol/buildsystems3c2440
mount -o bind /vol/buildsystem-tao3530 /vol/buildsystemtao3530

Я не уверен, что наличие множества монтировок замедлит доступ к файлам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .