сценарий оболочки: слишком много аргументов

Я нашел по крайней мере одно отличие:

Вы можете смонтировать свой деградированный raid1 rw только один раз. Вероятность сбоя раздела, в то время как другой раздел вашего устройства исправен, может быть небольшим, тем не менее, это разница.

Источник: https://btrfs.wiki.kernel.org/index.php/Gotchas#raid1_volumes_only_mountable_once_RW_if_degraded

Тома raid1 можно монтировать только один раз RW, если они деградировали

Даже если нет отдельных фрагментов профиля, тома raid1, если они становятся degraded может быть смонтирован только один раз для чтения и записи с опциями -o degraded,rw.

Примечания:

  • Этого не происходит (как сообщается), когда имеется более 2 устройств.

  • Этого не происходит с томами профилей raid10.

  • Это часто происходит из-за проблемы «Неполное преобразование фрагментов», когда остаются отдельные фрагменты.

Возможное восстановление:

  • Если он по-прежнему доступен для чтения и записи, вы можете преобразовать фрагменты из профиля raid1 в профиль одиночный (или дублированный профиль), если у вас достаточно места).

  • Если оно по-прежнему доступно для чтения и записи, вы можете заменить отсутствующее устройство btrfs.

  • Когда том raid1 зависает в режиме только для чтения по какой-либо причине, его можно восстановить только путем сброса его содержимого, его повторного создания и восстановления содержимого.

0
09.03.2017, 16:07
2 ответа

Весь ваш сценарий намерен сделать именно это: seq -f 'fla% 03.0f' 1 128

Что касается программирования оболочки:

i = 0 $ 1 , вероятно, должно стать i = "0 $ i"

'expr $ i + 1' должно стать $ (expr "$ i" + 1)

Обратите внимание на пробелы, необходимые для expr . Это не сработает $ (expr "$ i" +1)

1
28.01.2020, 02:25

i = 'expr $ i + 1' не увеличивает i , он присваивает i значение 'expr $ i + 1 '.

На следующей итерации цикла вы запускаете [$ i -lt 100] . Поскольку i не заключено в двойные кавычки, это расширяется до [expr '$ i + 1' -lt 100] . [ на самом деле является командой, и вы дали ей слишком много аргументов по указанной выше причине.

Если вы замените i = 'expr $ i + 1' на i = $ (($ i + 1)) , ваш код должен работать.

Редактировать:

Кажется, что по крайней мере у Bash будут проблемы с числом 008, он интерпретирует его как восьмеричное. Вам необходимо присвоить 00 $ i , 0 $ i и $ i другой переменной (или echo "fla00 $ i" и т. Д. ), если вы получите ошибку после 008.

В этом случае вам нужно что-то сделать, когда i> = 100.

Вот что я бы сделал:

i=1
while [ $i -lt 121 ]; do
    if [ $i -ge 100 ]; then
        echo fla$i
    elif [ $i -ge 10 ]; then
        echo fla0$i
    else
        echo fla00$i
    fi
    i=$(($i + 1))
done
2
28.01.2020, 02:25

Теги

Похожие вопросы