пятница, 2 марта 2012 г.

Статистика FreeBSD

  1. Информация о дисках
    1. mount — показывает смонтированные подразделы и флаги из монтирования
    2. df — показывает смонтированные подразделы, их размер и свободное место на них
    3. fdisk /dev/ad0 — показывает информацию о диске ad0 и разделах на нем
    4. disklabel /dev/ad0s1 — показывает список подразделов в первом разделе диска ad0
    5. swapinfo — показывает список подразделов свопинга на дисках и их использование
    6. fstat — показывает список открытых файлов (имена файлов не выводятся)
    7. pstat -f — выводит список открытых файлов (имена файлов не выводятся)
    8. systat -vmstat n — каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой.
    9. iostat — выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.
    10. vmstat — выводит количество операций на диске в секунду
    11. /stand/sysinstall — можно посмотреть и изменить разметку диска и монтирование
    12. less /etc/fstab — таблица монтирования при загрузке
  2. Информация о процессоре и памяти
    1. systat -vmstat n — вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)
    2. top — аналогичная информация в сокращенном виде + использование памяти и свопа в мегабайтах, список процессов, отсортированных по использованию процессора.
    3. ps afx — список запущенных процессов и время процессора на каждый
  3. Информация о сети
    1. ifconfig — список сетевых интерфейсов с ip-адресами, масками, mac-адресами, типами карт и их статусами (названия карточек можно посмотреть в файле конфигурации ядра)
    2. systat -ifstat n — объем трафика за n секунд на всех сетевых интерфейсах
    3. netstat — вывод активных сетевых соединений (сокетов)
    4. systat -netstat n — аналог netstat в реальном времени
    5. systat -ip n — таблица IP-пакетов и ошибок по типам за n секунд
    6. systat -tcp n — таблица TCP-пакетов и ошибок по типам за n секунд
    7. systat -icmp n — таблица ICMP-пакетов и ошибок по типам за n секунд
    8. netstat -ibt — список интерфейсов, разбитых по ip-адресам (!) с объемом трафика на каждом, количеством ошибок, коллизий, значением watchdog-таймера
    9. netstat -inb По умолчанию “netstat -i” во FreeBSD показывает число пакетов и байт по каждому интерфейсу
    10. netstat -inbh Для наглядного просмотра, можно использовать опцию “-h”, которая сокращает байтовый вывод до Кб, Мб или Гб.
    11. systat -ifstat (или systat -if) Интенсивность передачи трафика
    12. netstat -iw1другой вариант
    13. netstat -r — таблица маршрутизации
    14. arp -a — таблица ARP
    15. tcpdump -i rl0 host 192.168.61.20 and port 80 — сниффер пакетов на интерфейсе rl0, фильтрующий пакеты, содержащие адрес 192.168.61.20 и порт 80
    16. trafshow -i rl0 — программа для сортировки и вывода сетевых потоков (устанавливается дополнительно пакетом или из портов)
    17. sockstat
  4. Службы времени
    1. date — выводит текущее время и дату
    2. w — выводит, сколько времени назад система загрузилась и залогиненных пользователей
    3. last — выводит историю перезагрузок и входов пользователей

суббота, 14 января 2012 г.

FreeBSD монтирование USB HDD с NTFS

Подключаем USB HDD, смотрим как определился:
$ dmesg
da0 at umass-sim1 bus 1 scbus3 target 0 lun 0
da0: <Toshiba External USB HDD > Fixed Direct Access SCSI-4 device
da0: 40.000MB/s transfers
da0: 610480MB (1250263728 512 byte sectors: 255H 63S/T 77825C)
Теперь монтируем его содержимое в папку с перекодировкой через стандартный драйвер ntfs (только чтение, не поддерживает запись):
# mount_ntfs -C koi8-r -m 755 -u hawk -g hawk /dev/da0s1 /mnt/usb
Можно монтировать через ntfs-3g, будет и чтение и запись, единственное проблемы с кодировками. Сначала собираем fusefs-ntfs:
# cd /usr/ports/sysutils/fusefs-ntfs
# make install clean
Добавляем в rc.conf
fusefs_enable="YES"
Запускаем:
# /usr/local/etc/rc.d/fusefs start
Можно удостовериться, что модуль ядра fuse.ko подгружен:
$ kldstat | grep fuse.ko
12    1 0xffffffff82031000 a8ea     fuse.ko
Модуль можно подгрузить так: 
# kldload /usr/local/modules/fuse.ko
Ну и монтируем:
# ntfs-3g -o rw,uid=1001,gid=1001,locale=ru_RU.UTF-8 /dev/da0s1 /mnt/usb

Изменение размера слайса FreeBSD

Для этого потребуется временное хранилище.
Для начала создаем бекапы каждого раздела:
# df
/dev/ad6s1a  10154158    892000   8449826    10%    /
devfs               1         1         0   100%    /dev
/dev/ad6s1e  10154158     45344   9296482     0%    /tmp
/dev/ad6s1f 903370842 155157450 675943726    19%    /usr
/dev/ad6s1d  10154158    304838   9036988     3%    /var
# dump  -auLf ~/ad6s1f.dump /dev/ad6s1f
# dump  -auLf ~/ad6s1a.dump /dev/ad6s1a
# dump  -auLf ~/ad6s1e.dump /dev/ad6s1e
# dump  -auLf ~/ad6s1d.dump /dev/ad6s1d
a - нужен чтоб он не мучился с поиском конца ленты.
u - обновить историю дампов
L - делать дамп со снимка системы
f - делать дамп в файл

Переписываем бекапы на временное хранилище и переразбиваем диск, после чего:
Грузимся с Fixit и для каждого раздела(здесь только для f) выполняем:
# newfs /dev/ad6s1f
# mount /dev/ad6s1f /mnt
# cd /mnt
# restore -xf /path2backup/ad6s1f.dump
x - восстановить все
f - из файла
Если будет жаловаться на недостаток места в /tmp, нужно создать в /tmp симлинк. Не забудьте удалить его когда закончите

Обновление ядра, мира и портов в FreeBSD

Бинарное обновление
Для бинарного обновления, если используется ядро GENERIC:
# freebsd-update upgrade -r 8.2-RELEASE
# freebsd-update install
# shutdown -r now
# freebsd-update install
# freebsd-update install
# shutdown -r now
Обновление через csup
 Обновление исходных текстов:
# cp /usr/share/examples/cvsup/standard-supfile /etc/supfile 
Приводим супфайл к виду
*default host=cvsup6.ru.FreeBSD.org 
# Список зеркал можно найти тут http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_2
# Список тегов http://www.freebsd.org/doc/handbook/cvs-tags.html
*default delete use-rel-suffix
*default compress
src-all
 Запускаем:
# csup -g -L 2 /etc/supfile
Компиляция и установка
Чистим /usr/obj/:

# cd /usr/obj
# chflags -R noschg *
# rm -rf *
# cd /usr/src
# make cleandir  # хендбук рекомендует выполнять эту команду дважды (!)
# make cleandir
 Строим:
# cd /usr/src 
# make -s -j4 buildworld
# make -j4 -s buildkernel KERNCONF=Имяядра
 Ставим:
# make -s installkernel KERNCONF=Имяядра
Перезагружаемся в single user mode  или с помощью команды
# make -s installkernel KERNCONF=GARROTTE
При перезагрузке нужно смонтированы будут не все разделы, монтируем:
# mount -u
# mount -a 
 Перед установкой разбираемся с конфигами:
# mergemaster -p
  • d - оставить старый вариант файла, удалив новый;
  • i - установить новый, удалив старый;
  • m - построчное сравнение старого и нового файла;
  • v - сравнить файлы еще раз.
При выборе построчного сравнения. на экран быдут выведены обе версии файла, слева — содержимое старого файла, справа — нового. Возможные варианты действий:
  • l - использовать вариант слева, то есть старый;
  • r - использовать вариант справа, то есть новый;
Ставим мир:
# make installworld
Чистим старые библиотеки:
# cd /usr/src && make check-old
# yes | make delete-old
# yes | make delete-old-libs
 И /usr/obj/:
# cd /usr/obj && chflags -R noschg * && rm -rf *  
Обновление портов
Если дерево портов ещё не развернуто:
# portsnap fetch extract
Если уже:
# portsnap fetch update
Теперь обновляем утановленные порты утилитой portupgrade:

# portupgrade -arR 
Также потребуется указать флаг для конфигурации:
  • -c - Если вы хотите пропустить задание опций для портов, у которых уже были заданы требуемые опции.
  • -C - если  нужно заново задаь конфигурацию всем портам(Это долго)
  Так же можно использовать portmaster, но я не вижу особой разницы.

среда, 4 января 2012 г.

Модули ядра FreeBSD

В этой статье будет рассмотрен обычный модуль, который выводит сообщение при его загрузке и выгрузке. Для этого ядро должно быть собрано с опцией SCHED_ULE. Также частота генерации прерываний должна быть снижена до 100, если ваша система запущена на виртуальной машине.
echo kern.hz=100 >> /boot/loader.conf

вторник, 13 декабря 2011 г.

Потоки в C

Многопоточность очень важна при высокой нагрузке на машину, когда важно быстро обрабатывать поступающую информацию. В этой статье я хочу рассказать о потоках на конкретном примере. Будут рассмотрены основные функции для работы с потоками. Более полная информация доступна на man странице pthread.

Взаимодействие процессов: pipe()

Есть ещё один вид взаимодействия процессов в unix, каналы.
Рассмотрим на примере как это работает.

воскресенье, 4 декабря 2011 г.

NVidia drivers под FreeBSD x64

http://www.nvidia.ru/object/freebsd-x64-290.10-driver-ru.html
Инструкции по установке: после загрузки драйвера перейдите в каталог, содержащий пакет драйвера и установите его, запустив командой tar xzf NVIDIA-FreeBSD-x86_64-290.10.tar.gz && cd NVIDIA-FreeBSD-x86_64-290.10 && make install Затем измените конфигурационный файл с учётом использования драйвера NVIDIA X; это обычно осуществляется запуском nvidia-xconfig

Перевод логов с первого терминала

По умолчанию логи выводятся на первый терминал, что не всегда удобно. Можно легко сменить терминал, в который будут писаться логи.