Он не оптимизирует выполняемые команды (и вы уже получили несколько хороших ответов, объясняющих, почему этого не следует делать), но он может оптимизировать вилки, пары труба / сокет, в некоторых случаях читает. Возможные варианты оптимизации:
ловушки
. Например, в sh -c ls
большинство реализаций sh
( bash
, mksh
, ksh
, ] zsh
, yash
, некоторые версии ash
) не будут форкнуть процесс для запуска ls
. ksh93
, подстановка команды не будет создавать канал или разветвлять процесс до тех пор, пока не будет вызвана внешняя команда ( $ (echo foo)
, например, будет расширяться до foo
без пары патрубок / патрубок или вилки). встроенная функция чтения
некоторых оболочек ( bash
, AT&T ksh
) не будет выполнять однобайтовые чтения, если они обнаруживают, что stdin доступен для поиска (в в этом случае они будут выполнять большие чтения и возвращаться к концу того, что они предназначены для чтения). Вы достигли максимального предела /dev/md*
массивов в одной системе Linux.
Это связано с традиционными старшими и второстепенными номерами устройств Unix. Первоначально драйверу MD RAID был присвоен номер старшего блочного устройства 9 (, определенный в /usr/include/linux/raid/md_u.h
как MD _MAJOR ), что позволяло использовать набор из 256 младших номеров устройств и, таким образом, 256 уникальных устройств массива RAID.(Канонический список распределения номеров устройств включен в документацию, поставляемую с исходным кодом ядра.)
В конечном итоге этого оказалось недостаточно, и был разработан механизм для использования одного дополнительного старшего номера (, известного в коде ядра как mdp_major
), если требуется более 256 RAID-массивов. Вы можете найти код для обработки этого в исходном файле ядра .../drivers/md/md.c
. Дополнительный основной номер устройства mdp_major
назначается динамически из диапазона динамических основных номеров устройств (234..254,начните сверху и распределите вниз ).
Чтобы использовать более 512 массивов MD RAID на одном хосте, этот механизм необходимо переписать, чтобы при необходимости использовать более одного динамического старшего номера.
Существует довольно грязный обходной путь (работает с последними ядрами из ветки 3.10.0-862.11.6
)
# echo md512 > /sys/module/md_mod/paramaters/new_array
# mdadm -C /dev/md512 -l raid0 -n 1 /dev/sdd128 --force