Как определить, находятся ли два NFS-монтирования в одной удаленной файловой системе? - PullRequest
3 голосов
/ 25 февраля 2011

Моя система на основе Linux отображает статистику для файловых систем, смонтированных на NFS, что-то вроде этого:

   Remote Path              Mounted-on  Stats
   server1:/some/path/name  /path1      100 GB free
   server2:/other/path/name /path2      100 GB free
   Total:                               200 GB free

Это прекрасно работает. Проблема в том, что одна и та же файловая система на сервере NFS была дважды смонтирована на моем клиенте:

   Remote Path              Mounted-on  Stats
   server1:/some/path/name  /path1      100 GB free
   server1:/some/path/name2 /path2      100 GB free
   Total:                               200 GB free

server1 * /some/path/name и /some/path/name2 на самом деле находятся в одной файловой системе, в которой 100 ГБ свободно, но я ошибочно добавляю их и сообщаю о 200 ГБ бесплатно.

Есть ли способ обнаружить, что они находятся в одном разделе?

Подходы, которые не будут работать:

  • «Использовать statfs()»: statfs() возвращает struct statfs, в котором имеется поле «ID файловой системы», f_fsid. К сожалению, он не определен и обнуляется по NFS.
  • «Не монтируйте один и тот же раздел несколько раз». Это вне моего контроля.
  • "Использовать эвристику на основе доступного пространства." Метод должен окончательно работать. Кроме того, statfs() кэширует свои выходные данные, поэтому было бы трудно сделать это правильно перед лицом большого перемещения данных.

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Вы, вероятно, хотите прочитать общие файловые системы удаленной системы, используя:

showmount -e server

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

Это не поможет вам в этом случаечто файловые системы разделяются отдельно от одной и той же базовой файловой системы.

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

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

Это не поможет вам в случае сервера, который может быть адресован под разными именами и адресами.

0 голосов
/ 25 марта 2011

Полагаю, что "stat -c% d / mountpoint" делает то, что вы хотите (я не могу сейчас это проверить)?

...