Ниже буде приведены однострочники для dtrace, которые можно использовать под Solaris/FreeBSD. Примеры взяты из книги по dtrace
Категорія: FreeBSD
Для работы и управления данными контролерами используем утилиту tw_cli. Вот пример с работающего сервера, где вышёл из строя 9-й диск (здесь нету RAID’a, каждый диск сам по себе; о замене диска в RAID-5 читайте ниже):
При заполнении пула почти на 90% (вообще-то у всех по-разному: у кого-то и в 70%, а у кого-то только при 98%) Zfs начинает сильно притормаживать, точнее искать свободное место в пуле, куда-бы записать. Связано это с тем, что по умолчанию установлено слишком большое значение параметра metaslab_min_alloc_size.
Если вам критичен простой и вы не хотите разбираться с дампом при kernel panic, то можно облегчить себе жизнь, выставив авторебут при kernel panic. Вот как это делается в каждой из ОС.
Внимание
Перезагрузка после Kernel panic имеет и очень серьёзный недостаток, особенно если это изменение не пропадает после первой перезагрузки. В случае, если перезагрузка не устраняет ту ошибку, которая вызывает Kernel panic, система будет останавливаться и перезапускаться вновь и вновь, что может привести к аппаратным ошибкам или потерям данных
Ниже будет приведён скрипт, который позволяет перехватить удаление файла и вывести сообщение на консоль. При этом, на место блока /* INSERT HERE */ можно вставить свои обработчики, которые будут выполняться каждый раз, когда кто-то захочет удалить файл.
Часто бывают такие ситуации, когда вы открыли через vi/vim файл, сделали очень много изменений и в конце понимаете, что забыли выполнить sudo. Что же делать? Заново править файл очень как не хочется. на помощь приходит такая команда:
:w !sudo tee %
а для Solaris можно ещё и такую
:w !pfexec tee %
После этого выдаётся запрос на ввода пароля и подтверждение, что вы хотите перезаписать файл и всё (с вариантом pfexec запрос пароля не происходит).
dirname: not found
Если при обновлении FreeBSD получаем такую ошибку:
===> include (install)
>> creating osreldate.h from newvers.sh
/usr/src/include/../sys/conf/newvers.sh: dirname: not found
то нужно найти в скрипте /usr/src/sys/conf/newver.sh найти dirname и прописать полный путь к нему
...
SYSDIR=$(/usr/bin/dirname $0)/..
...
У меня ещё ругалось на команду touch. Так же как и в случае с dirname решило проблему.
Допустим, вам необходимо создать несколько виртуальных интерфейсов, которые будут работать как обычные, не зависимые друг от друга. Это очень легко делается через netgraph. Приведу лишь скрипт, который создаст 3 виртуальных интерфейса, не трогая при этом физический:
Правильная пересборка ядра
Расскажу, как рекомендуется правильно пересобирать ядро, а именно включать, отключать опции и т.д.
1) Создание конфигурационного файла
Создаём пустой файл в /usr/src/sys/`uname -m`/conf , например, kern1 такого содержания:
include GENERIC
ident kern1
Этим мы определили, что использовать будем шаблон GENERIC, а имя нового ядра kern1.
Solaris
В Solaris есть удобный механизм для ограничения количества запускаемых процессов/потоков – это проэкт. Что бы пользователи не смогли положить сервер fork-бомбой, нужно им ограничить количество LWP. Создадим проект и поместим туда пользователя testuser:
#projadd -U testuser -K 'project.max-lwps=(privileged,2048,deny)' user.testuser
Теперь пользователь testuser не сможет запустить более 2048 потоков.
Для тестирования можно использовать такую бомбу:
#!/usr/bin/bash
:(){ :|:& };:
Больше for bomb на разных языках можно взять здесь