Я не уверен, что это точно - или даже близко - то, что вы хотите, но вы можете использовать DRBD на экспортированной iscsi ZFS zvol. На самом деле, вам даже не нужно DRBD для этого, вы можете просто экспортировать два zvol с двух разных серверов ZFS с помощью iscsi и сделать linux mdadm raid устройство с ними в целевой системе.
Существует дополнительный модуль для системы управления виртуальными машинами компании Google ganeti , предназначенный для этого с DRBD и ZFS zvols по адресу https://github.com/ffzg/ganeti-extstorage-zfs , который может служить полезным примером того, как это сделать. Ganeti уже делает что-то подобное с LVM и DRBD, поэтому это просто расширяет возможности для включения ZFS.
btrfs не имеет zvols или что-либо эквивалентное, поэтому AFAIK не может делать с btrfs.
-121--116192-
Используйте find :
Когда вы говорите не рекурсивно, вы имеете в виду, что вы хотите только количество файлов/каталогов в/home, но не подкаталоги? В этом случае можно ограничить результаты до верхнего уровня с помощью опции maxdepth
.
find /home -maxdepth 1 | wc -l
Использование для:
i=0; for home in ~/*; do (( i++ )); done; echo $i
Запишите места между двойными скобками и заключенными i++.
-121--105130-
Команды в каждой группе выполняются параллельно, а группы выполняются последовательно, каждая группа параллельных команд ожидает завершения предыдущей группы перед началом выполнения.
Ниже приведен рабочий пример:
Используйте 3 группы команд, как в приведенном ниже коде. В каждой группе три команды запускаются в фоновом режиме с помощью и
.
Команды 3 запускаются почти одновременно и выполняются параллельно, в то время как сценарий ожидает завершения
.
После завершения всех трех команд в третьей группе будет выполнена команда 10
.
$ cat command_groups.sh
#!/bin/sh
command() {
echo $1 start
sleep $(( $1 & 03 )) # keep the seconds value within 0-3
echo $1 complete
}
echo First Group:
command 1 &
command 2 &
command 3 &
wait
echo Second Group:
command 4 &
command 5 &
command 6 &
wait
echo Third Group:
command 7 &
command 8 &
command 9 &
wait
echo Not really a group, no need for background/wait:
command 10
$ sh command_groups.sh
First Group:
1 start
2 start
3 start
1 complete
2 complete
3 complete
Second Group:
4 start
5 start
6 start
4 complete
5 complete
6 complete
Third Group:
7 start
8 start
9 start
8 complete
9 complete
7 complete
Not really a group, no need for background/wait:
10 start
10 complete
$
Вы можете использовать аргумент end of options (--
), чтобы printf
интерпретировать тире буквально:
printf -v var -- '-x=%s' "$x"
Выход:
$ x=xxx && printf -v var -- '-x=%s' "$x" && echo $var
-x=xxx
printf
поддерживает обычный аргумент end -of -options--
:
$ printf -- '-x\n'
-x
Поскольку ваш printf
, похоже, принимает параметры, используйте строку формата для вывода как -x
, так и значения переменной:
printf '%s=%s' '-x' "$x"
Чтобы вызвать инструмент с предварительно -сгенерированной командной строкой, не помещайте аргументы командной строки в строку. Используйте set
для установки значений $@
вместо :
set -- -x="$x" -y="$y" -z="$z"
Затем вызовите инструмент:
tool "$@"
Это гарантирует, что инструмент получит правильное количество аргументов, правильно заключенных в кавычки, даже если одно или несколько значений $x
, $y
или $z
содержат пробелы.
Или, используя массив bash
:
args=( -x="$x" -y="$y" -z="$z" )
tool "${args[@]}"