суббота, 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