5

Я хотел бы выяснить, является ли произвольный путь корнем точки монтирования ZFS для оценки в скрипте (Python) (поэтому код возврата команды предпочтительнее синтаксического анализа вывода). Эквивалентом btrfs является btrfs subvolume show [path] который возвращает 0 или 1, если путь является корнем подобъема btrfs или нет.

Afaik Я бы использовал zfs list и проанализировал бы его, но, возможно, есть более элегантный способ.

Я использую ZFS 0.6.5.8 на Ubuntu 16.10 с Linux 4.8.0.

2 ответа2

3

Только в настоящее время смонтированные файловые системы

Если вы хотите ограничить себя монтируемыми в настоящее время файловыми системами ZFS, вы можете анализировать /proc/mounts и вам не требуются какие-либо особые знания ZFS (если вы специально не хотите ограничивать себя файловыми системами ZFS).

Это может работать или не работать в системах, отличных от Linux.

/proc/mounts - это, по сути, /etc /mtab, но поддерживается ядром. Он содержит список устройств поддержки файловой системы, пути монтирования, типы файловой системы и флаги файловой системы.

Например, чтобы получить список точек монтирования всех смонтированных файловых систем ZFS, вы можете сделать что-то вроде

$ awk '$3 == "zfs" { print $2 }' < /proc/mounts

Чтобы проверить, соответствует ли данный каталог точке монтирования для смонтированной файловой системы ZFS,

$ awk '$3 == "zfs" && $2 == "/some/particular/absolute/path" { print "yes" }' < /proc/mounts

Чтобы учесть все файловые системы (не только ZFS), просто удалите проверку $3 == "zfs" .

Подключенные или отключенные файловые системы ZFS

Если вам нужно включить несмонтированные файловые системы в импортируемые в настоящее время пулы, вам нужно использовать zfs get чтобы получить список всех точек монтирования ZFS в импортируемых в настоящее время пулах:

$ sudo zfs list -pH -o mountpoint | grep -q '^/some/particular/absolute/path$' && echo yes

выведет yes если файловая система с точкой монтирования /some/particular/absolute/path существует в пуле, который импортируется в данный момент, независимо от того, смонтирована ли эта файловая система в данный момент.

Файловые системы в экспортируемых пулах

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

Завершающие заметки

Всегда учитывайте, существует ли утилита, которая делает то, что вы хотите. Например, df , в качестве побочного эффекта, печатает список монтируемых в настоящее время файловых систем и их вспомогательных устройств, и можно ожидать, что он не будет участвовать в какой-либо магии ядра (только с использованием интерфейсов, предназначенных для общего пользования). strace df 2>&1 | less этом случае лучше начать с less , чтобы узнать, как можно найти нужную вам информацию.

2

Вы можете использовать zfs get для отображения выбранных свойств, таких как mountpoint .

# zfs get -pH -o value mountpoint rpool/swap

Объяснение:

  • -p производит вывод с анализом с вкладками в качестве разделителей
  • -H опускает заголовки
  • -o name,property,value,source отображает четыре столбца или любой их вариант

Вы получите либо путь, заданный в качестве точки монтирования (в большинстве случаев это будет / + имя набора данных (1), но оно может отличаться (2)), - если точка монтирования не установлена (3), либо устаревшее (4)). Затем вы можете использовать grep для дифференциации:

# zfs get -pH -o value mountpoint rpool
/rpool
# zfs get -pH -o value mountpoint rpool/export/home
/export/home
# zfs get -pH -o value mountpoint rpool/swap
-
# zfs get -pH -o value mountpoint rpool/ROOT
legacy

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