Я был немного обеспокоен NFS4 на Linux. Некоторая информация «там», кажется, вступает в противоречие с другой информацией, а другую информацию трудно найти. Итак, вот несколько вещей, которые привлекли мое внимание, надеюсь, кто-то там может пролить свет на это.
Этот вопрос посвящен исключительно NFS4 без Kerberos и т. Д.
1. Экспорт
На exports
странице руководства содержится неоднозначная информация о структуре / etc / exports.
Цитировать из exports(5)
:
Кроме того, каждая строка может иметь одну или несколько спецификаций для параметров по умолчанию после имени пути в виде тире ("-"), за которым следует список параметров.
Список опций используется только для всех последующих экспортов в этой строке.
Что означает «только последующий экспорт в этой строке»?
1.2 fsid=0
больше не требуется?
Я искал fsid, когда нашел комментарий в списке linux-nfs о том, что fsid = 0 больше не требуется. Теперь я просто запутался, нужно ли это с nfs4 или нет ?!
2. Неэкспортированный каталог все еще может быть установлен
Скажем, у меня есть следующее дерево:
/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian
И у меня есть следующие записи в этой записи fstab:
/dev/disk/by-label/users /mnt/users ext4 defaults 0 0
/dev/disk/by-label/distr /mnt/distr ext4 defaults 0 0
/mnt/users /exp/users none bind 0 0
/mnt/distr /exp/distr none bind 0 0
И мой экспорт именно такой:
/exp 192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
И exportfs -arv
показывает:
exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp
Тогда почему я могу сделать это и не получить ошибку на клиенте:
mount -t nfs4 server:/exp/users /tmp/test
Даже если /exp/users
не экспортируется? Я не экспортировал этот каталог, и, хотя я не вижу его содержимого, /dev/disk/by-label/users
пока я не укажу crossmnt
, я все еще могу писать в каталог. Все, что я пишу там, идет в основной каталог, /exp/users
который можно увидеть, когда я umount /exp/users; ls /exp/users
..
3. Странный случай showmount -d server
Как указано rpc.mountd(8)
, эта команда должна отображать каталоги, которые в настоящий момент подключены клиентами, или устаревшие записи в них /var/lib/nfs/rmtab
, как можно прочитать:
Демон rpc.mountd регистрирует каждый успешный запрос MNT, добавляя запись в файл / var / lib / nfs / rmtab. При получении запроса UMNT от клиента NFS rpc.mountd просто удаляет соответствующую запись из / var / lib / nfs / rmtab, если список управления доступом для этого экспорта позволяет этому отправителю получить доступ к экспорту.
(...)
Обратите внимание, однако, что мало что гарантировать, что содержимое / var / lib / nfs / rmtab является точным. Клиент может продолжить доступ к экспорту даже после вызова UMNT. Если клиент перезагружается без отправки запроса UMNT, устаревшие записи остаются для этого клиента в / var / lib / nfs / rmtab.
Прочитав это, я, несомненно, задаюсь вопросом:
- Разве не ужасно небезопасно просто выставлять этот тип клиентской информации;
- Не знают, что администраторы сервера должны иметь rmtab с большим количеством устаревших клиентов;
- Является ли это причиной того, что клиенты, которые монтируют каталоги nfs4,
mount -v
получают вывод «вроде ничего не было смонтировано», даже если что-то было смонтировано?
У меня есть много других вопросов, касающихся nfs4, но я буду держать это в данный момент .. :)