как пропустить каталоги, которые смонтированы дважды? - PullRequest
1 голос
/ 27 августа 2010

Мне нужно перечислить каталог рекурсивно, но я хочу пропустить подкаталоги, которые уже были смонтированы. Есть 2 случая:

a) файловая система была смонтирована дважды, как в этом примере:

  • "/ dev / sda2" был смонтирован на "/ mnt / mnt_point1"
  • "/ dev / sda2" был смонтирован на "/ mnt / mnt_point2" Я хочу перечислить "/ mnt", но спускаться только в "/ mnt / mnt_point1"

b) часть файловой иерархии была перемонтирована где-то еще, с помощью "mount --bind":

  • "mount --bind / home / user / tmp / test / home / user / tmp / mount_test"

Я хочу перечислить "/ home / user / tmp", но схожу только в "test"

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

Одним из решений было бы прочитать «/ etc / mtab» (как это делает команда «find») и выполнить некоторые проверки, но я думаю, что это довольно дорого (нужно читать / etc / mtab каждый раз, когда встречается dir; если этот файл читается только при запуске программы, между чтениями может произойти монтирование, так что программа будет неточной).

Другим решением будет фильтрация событий ядра (через libudev или Netlink) и выполнение этого чтения / etc / mtab только при возникновении события MOUNT.

У вас есть другие предложения? Заранее спасибо.

1 Ответ

1 голос
/ 27 августа 2010

Прежде всего чтение mtab не так дорого, как вы думаете, если оно не изменится, Linux, вероятно, сохранит его в памяти, если вы будете часто к нему обращаться.

Но для вашей цели mtab, вероятно, не будет содержать информацию, которую вы ищете. Разбор /proc/mounts вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...