Итак, мне приходится работать в рамках пользовательских квот в системе Linux, и мне нужно узнать имя устройства (например, - /dev/md2
) для заданного пути, чтобы я мог найти правильную квоту для этого пути.
Теперь я могу достаточно легко получить точку монтирования, используя:
df -k "/volume1/foo/bar" | tail -1 | awk '{ print $6 }'
Однако я не уверен, как лучше всего взять эту точку монтирования и преобразовать ее в имя устройства?
Чтобы еще больше усложнить ситуацию, точка монтирования, которую я получаю от приведенной выше команды, на самом деле может быть зашифрованной папкой, и в этом случае у меня может быть что-то вроде:
/dev/md2 -> /volume1
/volume1/@Foo@ -> /volume1/Foo
Это означает, что приведенная выше команда df
идентифицирует точку монтирования /volume1/Foo. Однако мне нужен надежный, независимый от платформы способ работать с точками монтирования и находить фактическое имя устройства, которое мне нужно для использования с quota
.
Конкретно; Я не могу просто полагаться на то, что первая часть пути является точкой монтирования устройства, поскольку я могу работать со средами, которые монтируют тома в более конкретных местах, например, OS X, которая помещает монтирование в /Volumes/ например.
stat -c%d /volume1/foo/bar
. Затем вам нужно найти специальный узел в/dev
с этим номером устройства. Я не могу найти хороших универсальных инструментов для сценариев, которые сделают эту последнюю часть за вас, но если у вас установлен grub, вы всегда можете использоватьgrub-probe
для решения всего вопроса с помощью одной командной строки, поэтому:/usr/sbin/grub-probe --target=device /volume1/foo/bar
- person Celada   schedule 02.05.2013stat
- не на всех платформах он есть OOTB (например, Solaris), а BSD (OSX)stat
использует-f
вместо-c
. - person Adrian Frühwirth   schedule 04.05.2013