Разделенный от новой строки xargs

С RAID-5 четность обычно только читается на массиве, восстанавливают, не на общем чтении. Это - так чтения, может быть более случайным и быстрее (так как Вы не должны считать и вычислить четность для всей дорожки каждый раз, когда Вы хотите 1K данных из массива).

С RAID-1 обычно чтения ступаются через диски, когда это возможно, для предоставления увеличенного выполнения чтения. Как Вы отметили, если подсистема RAID пытается считать оба диска, и они отличаются, подсистема не имеет никакого способа знать, какой диск был неправильным.

Большинство подсистем RAID зависит от диска сообщить контроллеру или компьютеру, когда он разлагается.

Так "более устойчив RAID-5"? Ответ, он зависит. RAID-5 позволяет Вам получить более эффективное устройство хранения данных для данного количества дисков, чем RAID-1; хотя дать эффективное устройство хранения данных вне одного диска, RAID-1 должен быть объединен с RAID 0, или поскольку дорожка RAID-1 выстраивает, или RAID-1 через два RAID 0 дорожек.

(Я предпочитаю первого, так как единственный сбой диска вынет единственный элемент RAID-1, означая, что только единственный диск потребует восстановления. С последним единственный сбой диска уничтожает RAID 0 элементов, означая, что ПОЛОВИНА дисков будет вовлечена в восстанавливание, когда диск будет заменен.)

Это также приводит к обсуждениям "фантомных записей", где о записи сообщает как успешной электроника диска, но по любой причине запись никогда не добирается до диска. Это действительно происходит. Полагайте, что для массива RAID-5, когда у Вас есть сбой диска, массив ДОЛЖЕН считать ВСЕ секторы на ВСЕХ выживающих дисках ОТЛИЧНО для восстановления. NetApp утверждает, что большой размер дисков плюс большой размер групп набега означает, что в некоторых случаях Ваши возможности сбоя во время восстанавливания могут быть настолько же плохими как каждое десятое. Таким образом они рекомендуют, чтобы большие диски в многочисленных группах RAID использовали двойную четность (который я думаю, связан с RAID-6).

Я изучил это в NetApp техническое обсуждение, данное несколькими их инженерами.

41
задан 30 April 2015 в 00:56
7 ответов

Что-то вроде

alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command

должен работать.

17
ответ дан 28 November 2019 в 19:43

GNU xargs (значение по умолчанию на Linux; установка findutils от MacPorts на OS X для получения его) поддержки -d который позволяет Вам указать пользовательский разделитель для входа, таким образом, можно сделать

ls *foo | xargs -d '\n' -P4 foo 
55
ответ дан 28 November 2019 в 19:43

С Bash я обычно предпочитаю избегать xargs для чего-либо наименее разрядное хитрое, в пользу того, в то время как - считал циклы. Для Вашего вопроса, while read -ar LINE; do ...; done делает задание (не забудьте использовать синтаксис массива со СТРОКОЙ, например, ${LINE[@]} для целой строки). Этому не нужен никакой обман: чтением по умолчанию использует просто \n как символ разделителя строки.

Я должен отправить вопрос на ТАК о профессионалах и недостатках xargs по сравнению с тем, в то время как - считал циклы... готово!

5
ответ дан 28 November 2019 в 19:43

Не со стандартной версией. У меня есть взломанная версия, которая делает это - я использовал ее, прежде чем я знал о'find ... -print0 | xargs -0 ...'. Свяжитесь со мной, если Вы хотите копию - посмотрите мой профиль. (Никакие аэрокосмические исследования - это примерно делает задание, все же. Это не полная xargs копия.)

0
ответ дан 28 November 2019 в 19:43

А как насчет кошачьего файла | xargs | sed 's / / \ n / ig' это преобразует пробелы в символы новой строки, используя стандартные инструменты Linux bash.

-1
ответ дан 28 November 2019 в 19:43
$ echo "1\n2 3\n4 5 6" | xargs -L1 echo  "#"
# 1
# 2 3
# 4 5 6
3
ответ дан 4 June 2020 в 22:02

пожалуйста, используйте опцию -d xargs

  --delimiter=delim, -d delim

Элементы ввода заканчиваются указанным символом. Указанный разделитель может быть одиночным символом, управляющим символом в стиле C, таким как \n, или восьмеричным или шестнадцатеричным управляющим кодом. Восьмеричный и шестнадцатеричные escape-коды понимаются как для команды printf. Многобайтовые символы не поддерживаются. При обработке ввода кавычки и обратная косая черта не являются особыми; каждый персонаж в ввод воспринимается буквально. Опция -d отключает любую строку конца файла, которая обрабатывается как любой другой аргумент. Вы можете использовать эту опцию, когда ввод состоит просто из разделённых символами новой строки элементы, хотя почти всегда лучше проектировать свою программу для использования --null там, где это возможно.

Пример:

$ echo 'for arg in "$@"; do echo "arg: <$arg>"; done' > show_args
$ printf "a a\nb b\nc c\n"
a a
b b
c c
$ printf "a a\nb b\nc c\n" | xargs -d '\n' bash show_args
arg: <a a>
arg: <b b>
arg: <c c>
1
ответ дан 16 October 2020 в 18:08

Теги

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