Я хотел бы получить вывод из двух команд -
zpool list
zfs list
и для каждого найденного пула:
zpool get all nameofpool
и для каждой найденной файловой системы:
zfs get all nameoffilesystem
Фон и окружающая среда
Я делаю локальные изменения в сценарии, который является неотъемлемой частью OS X,
/usr/bin/sysdiagnose
#!/bin/sh
для начинающих- всегда работать с привилегиями суперпользователя
- иногда фактически безголовый (вызванный аккордом клавиш), поэтому на выходе должен быть файл.
Первый эксперимент
На основе примера в № 65 Удалите все снимки ZFS:
#!/bin/sh
for dataset in `zfs list -H | cut -f 1`
do
zfs get all $dataset
done
Это работает, но не там, где в имени набора данных есть пробел. Например, если файловая система является zhandy/Pocket Time Machine
выходные данные включают в себя:
cannot open 'zhandy/Pocket': dataset does not exist
cannot open 'Time': dataset does not exist
cannot open 'Machine': dataset does not exist
Второй эксперимент
... был основан на первом ответе на этот вопрос - с использованием IFS
- и сделал сценарий более похожим на Apple. Смотрите редакцию 4.
Третий эксперимент
На основании принятого ответа на этот вопрос - с использованием IFS
и кавычек для "$dataset"
:
#!/bin/sh
data_directory_path=~/Desktop
ECHO=/bin/echo
ZFS=/usr/sbin/zfs
ZPOOL=/usr/sbin/zpool
# If there exists a zfs binary, get some ZFS information
if [ -f "${ZFS}" ]
then
"${ECHO}" "Recording ZFS pool version information ..."
"${ZPOOL}" upgrade &> ${data_directory_path}/zpool\ upgrade.txt
"${ECHO}" " listing all ZFS pools ..."
"${ZPOOL}" list &> ${data_directory_path}/zpool\ list.txt
"${ECHO}" " detailed health status and verbose data error information ..."
"${ZPOOL}" status -v &> ${data_directory_path}/zpool\ status.txt
"${ECHO}" " pools that are available but not currently imported"
"${ZPOOL}" import &> ${data_directory_path}/zpool\ import.txt
"${ECHO}" "Recording ZFS file system version information ..."
"${ZFS}" upgrade &> ${data_directory_path}/zfs\ upgrade.txt
"${ECHO}" " listing all ZFS file systems ..."
"${ZFS}" list &> ${data_directory_path}/zfs\ list.txt
"${ECHO}" " all properties of each file system"
OLD_IFS=$IFS
IFS=$'\n'
for dataset in `zfs list -H | cut -f 1`
do
"${ZFS}" get all "$dataset" &> ${data_directory_path}/ZFS\ file\ system\ properties.txt
done
IFS=$OLD_IFS
"${ECHO}" "Listing the contents of /dev/dsk"
"${LS}" -@adel /Volumes &> ${data_directory_path}/ls-dev-dsk.txt
"${ECHO}" "Listing the contents of /var/zfs/dsk"
"${LS}" -@adel /Volumes &> ${data_directory_path}/ls-var-zfs-dsk.txt
fi
Среди полученных файлов в ZFS file system properties.txt
перечислены свойства только для одной файловой системы ZFS… набора данных с пробелом в имени.
Наиболее желательный конечный результат - это свойства:
- для всех файловых систем ZFS
- в файле.
Удаление следующей строки -
&> ${data_directory_path}/ZFS\ file\ system\ properties.txt
- получает свойства для всех файловых систем ZFS, в окне терминала, но не в файле. Этого достаточно для меня, чтобы принять ответ.
Критерий вывода в файл , которого не было в моем первом издании вопроса, можно легко найти в другом месте.