воскресенье, 31 января 2010 г.

ZFS на Linux: она жива!

Если вы любите Linux за большое количество поддерживаемых устройств, а Solaris за продвинутую файловую систему ZFS, то новый, разрабатываемый проект, может преподнести вам сюрприз.


ZFS от Sun, опускает сложность администрирования хранилищ данных на новый, более легкий уровень. В то время, как Linux использует набор технологий, которые включат в себя RAID, управление томами и разделами файловой системы, ZFS комбинирует все эти технологии в себе, что значительно упрощает администрирование.

Но существует препятствие. ZFS, как и остальная часть OpenSolaris доступна под лицензией CDDL (Sun's Common Development and Distribution License), на протяжении двух лет, в то время, как Linux доступен под второй версией лицензии GNU с тех пор, как он появился, в 1991 году. Эти лицензии – несовместимы.

Один программист, Ricardo Correia, знает, как разрешить эту проблему. Технология, которая называется FUSE (Файловая система в пространстве пользователя), введенная в ядро Linux в версии 2.6.14, выпущенном в октябре 2005 года, позволяет Linux использовать файловую систему, как обычный процесс. Сейчас FUSE является базой, для реализации файловой системы NTFS, которая называется NTFS-3g и работает с весьма приличными характеристиками.

В проекте, начало которого было приурочено к Google's 2006 Summer of Code, Correia конвертировал реализацию ZFS из OpenSolaris в демона (сервис), который запускается в Linux.

Проект рабочий, и некоторые даже умудрялись загрузиться с ZFS. Стоит предупредить, что Correia еще не занимался никакими настройками и усовершенствованием производительности. В то же время, некий сисадмин представил тест производительности, в котором можно увидеть, что сейчас ZFS показывает всего лишь половину производительности другой файловой системы Linux – XFS.

Заметим, что NTFS-3g сейчас показывает приблизительно сходные результаты производительности с «нативными» файловыми системами Linux, что говорит о возможности достижения хорошей производительности FUSE.

Correia, в своем интервью по электропочте заявил, что сейчас он работает над проблемой с памятью. Когда множество потоков ZFS, одновременно пытаются получить память, система начинает глючить и демон ZFS потребляет более 500 Mib памяти. Есть много альтернатив стандартной функции malloc, для управления паматью и сейчас Correia ищет одну из них. «Я пытаюсь выяснить, сможет ли tcmalloc (разработка инженеров Google), работать лучше», – заявил он.

Преимуществом реализации файловой системы, как отдельного демона будет, то о чем так долго твердили поборники микроядра: вы сможете завершать и запускать файловую систему, без перезагрузки самой операционной системы. «Сейчас есть несколько вещей, которые ZFS еще не может обрабатывать, такие как ошибки записи на незеркалированных хранилищах. Это вызывает системный сбой на Solaris, MacOS X, FreeBSD, а в ZFS-FUSE это будет лишь проблемой перезапуска демона», – сказал Correia.

Correia говорит, что сейчас он использует ZFS-FUSE для резервирования своей домашней директории, потому как возможности снимков файловой системы превосходно справляются с множественными резервными копиями одних и тех же данных. А как только производительность ZFS-FUSE достигнет показателей сравнимых с XFS, он пообещал перенести свой домашний каталог на нее и посмотреть, что же из этого выйдет. 

пятница, 29 января 2010 г.

Заметки по Sun Solaris


OpenSolaris

   Первое с чем пришлось столкнуться, при попытке настроить сеть через GUI, выскочило сообщение, мол пока активна nwam (NetWork Auto Magic) конфигуратор не будет работать. Как я понял, особо эту службу настраивать возможности нет. При наличии одного сетевого адаптера, она сама автоматически его цепляет, и настраивает через DHCP. Поэтому конфигуратор сети и требует чтобы она была отключена.
svcs - позволяет посмотреть состояние активных служб
svcadm - понятно из названия

переключение с nwam на стандартный режим:

# svcs network/physical
STATE STIME FMRI
disabled 23:58:32 svc:/network/physical:default
online 23:58:36 svc:/network/physical:nwam
# svcadm disable network/physical:nwam
# svcadm enable network/physical:default
Теперь можно конфигурировать сеть через System->Administration->Network

Solaris 10

Заметил интересное отличие в организации домашних папок пользователей. Локальные пользователи создаются в /export/home/ Тогда как /home сконфигурирован как точка автомонтирования, в которую будут отображаться каталоги удаленных пользователей. Несколько странно что для команды useradd по умолчанию пользователю назначается именно /home/. Хотя для управления пользователями гораздо удобнее пользоваться smc (Solaris Management Console). Примечательно также что локальные пользователи из /export/home будут автоматически отображаться в /home


Монтирование ISO образа
   Сначала необходимо создать блочное устройство на которое отображается файл образа с помощью lofiadm(1M), затем достаточно просто смонтировать это устройство

$ pfexec bash
# lofiadm -a /opt/ISO/sol-10-u8-companion-ga.iso /dev/lofi/1
# ls -l /dev/lofi
total 1
lrwxrwxrwx 1 root root 29 февр. 1 18:31 1 -> ../../devices/pseudo/lofi@0:1
# mount -F hsfs /dev/lofi/1 /mnt/cd1
# ls /mnt/cd1
Legal_Notice LICENSE_NOTICE README Solaris_Software_Companion
Для освобождения псевдо-устройства


# umount /mnt/cd1
# lofiadm -d /dev/lofi/1
В общем-то и все. можно конечно выполнить подключение образа и одной командой, например так
mount -F hsfs `lofiadm -a /abs_path_to_imgfile/image.iso` /desired_mountpoint
Без второго параметра lofiadm сама выберает название для устройства и возвращает его в stdout.


Добавление драйвера сетевой карты
   Как ни странно, но в Solaris не оказалось штатного драйвера для сетевой карты IntelPRO 100. Для опеределения того какие устройства поддерживаются Sun предлагает Java утилиту Sun Device Detection Tool. Данная утилита показала, что существует драйвер стороннего производителя. Он то и был установлен. Итак для установки драйвера достаточно выполнить следующее

# mkdir /var/tmp/ife
# cd /var/tmp/ife
# wget http://homepage2.nifty.com/mrym3/taiyodo/ife-2.6.1.tar.gz
# gunzip -cd ife-2.6.1.tar.gz|tar xf -
# cd ife-2.6.1
# rm -f obj Makefile
# ln -s Makefile.i386_gcc Makefile
# ln -s i386 obj                      (или выбрать необходимую платформу)
# /usr/ccs/bin/make install
# ./adddrv.sh
# devfsadm -i ife
# echo "YourHostname" >/etc/hostname.ife0
# ifconfig ife0 plumb
# init 6
Все оказалось довольно просто и быстро.



Где настраивать сеть?

начнем с того чем можно диагностировать сеть.
tcpdumpа нет. (в дефолтной 10-й спарковой солярке точно нет)
есть snoop

можно man snoop
но вот некоторые его опции

snoop - всё всё
snoop -V полный подробный вывод
snoop -v детальный вывод
snoop -o filename запись в файл
snoop -i filename чтение из файла
snoop -d device всё что касается конкретного девайса

За сеть отвечают:
1. Сервис svc:/netvork/physical:default
2. файл /etc/hostname.xxn
3. файл /etc/inet/hosts
4. файл /etc/inet/ipnodes

Сервис svc:/netvork/physical:default вызывает скрипт /lib/svc/method/net-physical. Этот скрипт использует утилиту ifconfig, которая конфигурирует все интерфейсы, их айпи, маски и проч. Так же этот скрипт просматривает файлы /etc/hostname.xxn (xx - это тип интерфейса и n - его номер). Скрипт запускает ifconfig для каждого /etc/hostname.xxn с опцией plump для того чтобы ядро начало "общаться" с интерфейсом.
(в 9-й солярке за это дело отвечает /etc/rcS.d/S30network.sh.

Файл /etc/hostname.xxn

Файл /etc/hostname.xxn содержит имя хоста или его IP адрес. Имя хоста, содержащиеся в этом файле должно присутствовать в /etc/inet/hosts, чтобы система могла резолвить его во время загрузки.


cat /etc/hostname.[i]xxn[/i]
sysname


или

cat /etc/hostname.[i]xxn[/i]
10.1.1.1


Файл /etc/inet/hosts

формат: IP-address official-host-name [alises]

cat /etc/inet/hosts
127.0.0.1 localhost
10.1.1.1 sysname loghost


(/etc/inet/hosts - официальное имя файла по SVr4 (System V release 4) )


Файл /etc/inet/ipnodes

Файл ipnodes -- локальная база данных которая ассоциирует имя нодов с IP адресами. Этот файл моет использоваться в сочетании (или вместо) другими базами ipnodes, включая DNS, карту NIS и LDAP.

Файл ipnodes

IP-address official-node-name nicknames...

cat /etc/inet/ipnodes

#Internet host table

::1 localhost
127.0.0.1 localhost
10.1.1.1 systemname loghost


IP-адрес могут быть определены в ipnodes или в файле hosts. Файл ipnodes просматривается раньше чем hosts.


Так же следует сказать пару слов о Solaris в "состоянии" router

В случае включенного роутинга (в Solaris , в этом случае, включается протокол RIP ) существует вероятность испортить таблицы маршрутизации других роутеров...

В Solaris 9 он будет включен если:

будет существовать файл /etc/gateways

будут существовать два файла настроек сетевых интерфейсов
(например /etc/hostname.eri0 и /etc/hostname.eri1)
но приоритет отдаётся существованию файла /etc/gateways

для отключения роутинга нужно чтобы был:
/etc/defaultrouter
или создать (даже необходимо сосздать, чтобы как-то оно случайно не врубилось) файл /etc/notrouter


В Solaris 10 роутинг управляется или как в Solaris 9 или на новый лад -- командой routeadm (man routeadm ) которой можно посмотреть текущее состояние и отключить роутинг

по умолчанию в 10-я солярка работает как роутер...
(возможно при секурной установке он будет отключен)


Изменение имени хоста

Имя хоста содержится в четырех системных файлах. Для изменения имеи вы должны отредактировать ВСЕ эти файлы и перезагрузить систему для полного изменения имени хоста.

Вот эти файлы:

/etc/nodename
/etc/hostname.xxn
/etc/inet/ipnodes
/etc/inet/hosts

а). Редактирование файла /etc/nodename

Каждая OS Solaris имеет каноническое имя, которое используется для обращения к системе. По соглашению , системное имя соответствует имени, которое ассоциировано IP-адресу главного интерфейса.

cat /etc/nodename
systemname

Вы можете изменить каноническое имя редактированием /etc/nodename и перезагрузкой системы.

Если сетевая конфигурация машины управляется удаленно и определяется с помощью DHCP, то /etc/nodename не используется так как удаленный сервис выдает каноническое имя.

б). Редактирование файла /etc/hostname.xxn

в). Редактирование файла /etc/inet/hosts

г). Редактирование файла/etc/inet/ipnodes

Если вы пытаетесь изменить IP адрес редактированием /etc/inet/hosts и перезагрузите систему, то он не изменится...



и после этого нужно запомнить, что изменение имени хоста вручную не оч желательноsmile.gif

лучше использовать команду sys-unconfig которая откатывает системные конфигурации и конфигурирует их заново.

эта комманда делает следующее:

1. Сохраняет текущий /etc/inet/hosts в /etc/inet/hosts.saved
2. Если текущий файл /etc/vfstab содержит записи о маунтах NFS, он сохраняется в /etc/vfstab.orig
3. Восстанавливает дефолтный /etc/inet/hosts
4. Удаляет дефолтный хостнэйм в /etc/hostname.xxn для всех сконфигурированных интерфейсов
5. Удаляет дефолтное доменное имя из /etc/defaultdomain
6. Восстанавливает временную зону на PST8PDT в /etc/TIMEZONE
7. Сбрасывает нейм сервисы на локальные файлы
8. удаляет файл /etc/netmasks (кстати если у вас нестандартная маска для вашего айпи , то нужно в нём сделать запись при конфигурации сетевого интерфейса)
9. удаляет /etc/defaultrouter
10. Удаляет пароль рута из /etc/shadow
11. Удаляет /etc/.rootkey для NIS+
12. Выполняет все системные конфигурационные утилиты, которые определены командой sysidconfig -a
13. Удаляет запись в /etc/resolv.conf
14. Одключает LDAP удалением файлов:
/var/ldap/ldap_client_cache
/var/ldap/ldap_client_file
/var/ldap/ldap_client_cred
/var/ldap/cachemrg.log
15. Регенерирует ключи для sshd

После окончания работы команды sys-unconfig система перезагружается.

После перезагрузки, конфигурационный скрипт( и вы) сконфигурирует систему.
(sys-unconfig недоступен на бездисковых станциях)