Архив за месяц: Декабрь 2012

СССР

90 лет назад, 30 декабря 1922 года — образован Союз Советских Социалистических Республик.

Не лги, что павшая страна
Была обитель зла и фальши.
Я помню эти времена
Я помню всё, как было раньше.

Там волчьей не было грызни,
Там люди верили друг другу,
И вместо: «Слабого — толкни» (с)
Всегда протягивали руку.

Там секс не лез вперёд любви,
Там братство было просто братством,
И не учили по TV
Вседозволяемому бл*дству.

Там вор, бандит, подлец и мразь
Страшились сильного закона,
И не бывала отродясь
Фемида в рабстве у Мамоны.

Я помню эти времена
Я помню всё, и не забуду.
Не лги, что павшая страна
Была обитель зла… иуда.

marat-ahtjamov

Столыпин: Хотел как лучше….

Из Столыпина нынче лепят этакого либерального святого. За что? — За то, что он — не сам конечно, — по поручению товарищей, — пытался вывести Россию из аграрного состояния… специфическим способом. А это значило, параллельную с индустриализацией реформу сельского хозяйства. В свою очередь, реформа сельского хозяйства означала переход в города значительной доли крестьянства и урбанизацию страны.
Иными словами, Столыпин «хотел, как лучше». В аграрной форме Россия была действительно обречена на гибель, что и произошло вскоре: в 1918 году. 116 статья Версальского договора предписывала Германии признать все образовавшиеся на территории России новые государства… Объективно спасли Россию большевики. Но это уже иной вопрос.
Либералы поднимают Столыпина на щит из-за его подцепленной как грипп, во время службы в Прибалтике приверженности хуторскому, то есть фермерскому хозяйству. Из-за этой приверженности, собственно Столыпина и вытащили наверх, так как эта его приверженность соответствовала представлениям реальных хозяев страны о желаемом: обездоленные и без того бедные крестьяне были бы дешевой и неприхотливой рабочей скотинкой.
Между тем, фраза Столыпина, которую любят повторять: «Дайте государству 20 лет покоя внутреннего и внешнего, и вы не узнаете Россию!» , — говорит только об одном: Столыпин БЫЛ ЭЛЕМЕНТАРНО ГЛУП И НИЧЕГО НЕ ПОНИМАЛ НИ В ПОЛИТИКЕ, НИ В ЭКОНОМИКЕ. Ибо он просто бежал в мешке… тогда как в беге в мешках побеждает не тот, кто быстро бегает, а тот, кто быстро бегает в мешках.
А мешком, в котором надлежало бежать, было как раз то, что у России НЕ БЫЛО И НЕ МОГЛО БЫТЬ В 1907 ГОДУ 20 ЛЕТ МИРНОГО РАЗВИТИЯ В ПРИНЦИПЕ.
Уже прогремел танжерский кризис. Уже на пороге боснийский. На горизонте — агадирский инцедент… Уже Россия стала членом анти-германской Антанты. А премьер рассуждает о каких-то 20 годах покоя… Мир стоял на пороге мировой войны, смысл которой состоял в том, что поднимающаяся Германия бросила вызов Великобритании и намеревалась сокрушить британскую колониальную систему. И это никак не зависело от воли кого бы то ни было в России.
Это стало всем разумным людям ясно уже в 1898 года. А это значит, что Столыпин был просто недалеким провинциальным деятелем, не понимающим реальности, в которой ему надлежало работать и принимать решения.
Тем и отличается величие Сталина от ничтожества Столыпина, что Сталин решал задачу индустриализации страны, сообразуясь с реальными ограничениями, главное из которых ИСТОРИЧЕСКОЕ ВРЕМЯ, а Столыпин просто не понимал смысла отведенного ему исторического времени в принципе.
Он не понимал той задачи, которую он на самом деле должен решать: не просто реформировать страну, а реформировать страну в конкретных исторических условиях, в том числе, и даже прежде всего, с учетом объективно доступного для реформ времени и приближающейся мировой войны.
Именно об этом свидетельствует его безумная по бессмысленности фраза, которую любят цитировать. Кто мог дать «государству 20 лет покоя»? — Продолжительность времени покоя — тот фактор, над которым власть отдельной страны, как правило, не властна. А если у бабушки был бы фаллос, она была бы, как известно, не бабушкой, а дедушкой.
Прочитайте рядом две знаменитые фразы — Столыпина и Сталина:
Столыпин, 1907 год. Семь лет до войны: «Дайте государству 20 лет покоя внутреннего и внешнего, и вы не узнаете Россию!»
Сталин, 1931 год, 10 лет до войны: «Мы отстали от передовых стран на 50-100 лет. Мы должны пробежать это расстояние в десять лет. Либо мы сделаем это, либо нас сомнут.»
И вас сразу станет ясно интеллектуальная, скажем так, не солидность одного и реальное величие другого.
СТАЛИН — это тот человек, который решил задачу Столыпина в условиях приближающейся войны, победил в войне и сделал за 20 лет страну второй державой мира несмотря ни на что.
А Столыпин — НИЧТОЖЕН и как политик, и как экономист, и как руководитель. Он элементарно глуп. Он погубил своим недомыслием Россию. Вот уж про кого сказано: «Хотел, как лучше, а получилось как всегда».
Оригинал взят sl-lopatnikov.

PuTTY — увеличение количества строк терминала.

При использовании программы PuTTY — часто необходимо подглядеть что-то в терминале — ан нет — по умолчанию история терминала всего 200 строк. Увеличиваем до 20000.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings]
"ScrollbackLines"=dword:00004e20

FreeBSD — узнать размер каталога.

Как узнать размер каталога? Используем команду du.
Смотрим размер конкретного каталога.

# du -hs /usr
3.6G    /usr

Смотрим размер каталога и размер каждой папки если есть.

# du -hd 1 /usr
1.5k    /usr/games
 74M    /usr/bin
702M    /usr/src
 19M    /usr/include
1.1G    /usr/obj
 73M    /usr/lib
987M    /usr/ports
568M    /usr/local
 58M    /usr/lib32
 30M    /usr/sbin
 40M    /usr/share
 15M    /usr/libexec
123k    /usr/libdata
1.5k    /usr/home
3.6G    /usr

Не забываем пользоваться man.

man du

FreeBSD — использование ZFS в качестве корневой файловой системы.

Грузимся с загрузочного диска FreeBSD 9.0 RELEASE — выбираем shell.

Создаем разделы, записываем загрузчик.

gpart create -s gpt da0
gpart add -b 34 -s 94 -t freebsd-boot da0
gpart add -t freebsd-zfs -l disk0 da0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

Создаем ZFS пул игнорируя предупреждения.

zpool create zroot /dev/gpt/disk0

Устанавливаем дополнительные параметры, указываем временную точку монтирования.

zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 zroot
zfs set mountpoint=/mnt zroot

Экспортируем и импортируем пул.

zpool export zroot
zpool import -o cachefile=/var/tmp/zpool.cache zroot

Создаем файловые системы на свой вкус и цвет.

zfs create zroot/usr
zfs create zroot/usr/home
zfs create zroot/var
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp

Добавляем swap раздел.

zfs create -V 4G zroot/swap
zfs set org.freebsd:swap=on zroot/swap
zfs set checksum=off zroot/swap

Создаем линк, исправляем разрешения.

chmod 1777 /mnt/tmp
cd /mnt ; ln -s usr/home home
chmod 1777 /mnt/var/tmp

Установка FreeBSD.

sh
cd /usr/freebsd-dist
export DESTDIR=/mnt
for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done

Копирование zpool.cache.

cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache

Создание rc.conf, loader.conf и пустого fstab.

echo "zfs_enable=YES >> /mnt/etc/rc.conf
echo "zfs_load=YES; >> /mnt/boot/loader.conf
echo "vfs.root.mountfrom=zfs:zroot >> /mnt/boot/loader.conf
touch /mnt/etc/fstab

Установка точек монтирования.

zfs set readonly=on zroot/var/empty
zfs umount -af
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var

Перезагружаемся.

reboot

Дабы не ошибиться в наборе команд, можно сделать следующее — создать скрипт. Разместить его на любой машине куда имеется доступ оп ssh.
Настраиваем сетевой интерфейс.

ifconfig em0 inet 192.168.0.2 netmask 255.255.255.0 up

Выполняем скрипт:

ssh user@192.168.0.1 'cat zfs.sh' | sh

FreeBSD настройка ftpd.

Настраиваем штатный ftpd для FreeBSD 9.0 RELEASE.

Добавляем группу и пользователя ftp. Открываем файл /etc/group — добавляем группу ftp.

ftp:*:21:

Файл /etc/master.passwd — добавляем пользователя ftp.

ftp:*:21:21::0:0:FTPD pseudo-user:/wwwroot/pub:/usr/sbin/nologin

Обновляем базу пользователей вручную.

pwd_mkdb -p /etc/master.passwd

Создаем домашний каталог пользователя для анонимного ftp доступа если необходимо.

mkdir /wwwroot
mkdir /wwwroot/ftp

Меняем владельца и права.

chown ftp:ftp /wwwroot/ftp
chmod 555 /wwwroot/ftp

Добавляем в /etc/rc.conf следующие строчки для запуска в режиме демона.

ftpd_enable="YES"
ftpd_flags="-l"

Запускаем.

/etc/rc.d/ftpd start

проверяем что получилось.

# ps -x | grep ftpd
22255  ??  Is      0:00.00 /usr/libexec/ftpd -D -l
22371   0  S+      0:00.00 grep ftpd

Второй способ — через inetd — по факту не используется. В /etc/rc.conf добавляем

inetd_enable="YES"

и раскоментируем строчку в файле /etc/inetd.conf

ftp    stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l

и даем команду

/etc/rc.d/inetd start

Результат — мы настроили анонимный FTP сервер, анонимный пользователь может только читать, логи подключений пишутся в файл по умолчанию /var/log/xferlog.
Дополнительные настройки.
/etc/ftpwelcome – приветственное сообщение выводимое сервером до ввода логина и пароля.
/etc/ftpmotd – приветственное сообщение, выводимое при удачном входе на сервер.
/etc/ftphosts – настройка виртуальных хостов.
/etc/ftpchroot — настройка chroot для пользователей. Например для пользователя test делать chroot в каталог /wwwroot/test/html, для всех пользователей группы ftptest — chroot в каталог /wwwroot/test, для пользователей группы www — chroot в свои домашние каталоги.

test /wwwroot/test/html
@ftptest /wwwroot/test
@www

Незабываем про настройку файервола если используется, дополнительно можно воспользоватся настройками в файле /etc/hosts.allow для разрешения/запрещения коннектов с тех или иных адресов.

ftpd : localhost : allow
ftpd : 192.168.4.23 : deny
ftpd : .nice.guy.example.com : allow
ftpd : .evil.cracker.example.com : deny
ftpd : ALL : allow

Но помним — проблемы с настройкой пассивного режима работы — актуально если необходимо обслуживать соединения из-за NAT.

Дополнительные ключи ftpd.

-4      Когда указана опция -D, принимать соединения через сокет AF_INET.

-6      Когда указана опция -D, принимать соединения через сокет AF_INET6.

-8      Разрешить прозрачный режим UTF-8. Клиенты, совместимые со стандартом RFC 2640 оповещаются об использовании сервером символов в кодировке UTF-8. Эта опция не включает любые перекодировки имен файлов сервера; это работает для имен файлов сервера, закодированных в UTF-8. При выкачке (upload) файлов на FTP включается для клиентов, совместимых с RFC 2640, перекодировка из локальной кодировки клиента в UTF-8. FTP команды и собственные сообщения ftpd в любом случае кодируются в ASCII, который является подмножеством UTF-8. Следовательно, здесь не нужна перекодировка на сервере.

-A      Разрешается только анонимный доступ к ftp.

-a      Когда указана опция -D, соединения принимаются только от указанного адреса.

-D      Когда указана эта опция, ftpd отсоединяется от консоли и становится демоном, принимающим соединения через порт FTP и порождающим (forking) дочерние процессы для поддержки запросов. Это обеспечивает меньшие траты ресурсов в сравнении с запуском ftpd через inetd(8) и полезно для применения на нагруженных серверах для уменьшения нагрузки.

-d      Отладочная информация будет записываться в лог с изпользованием LOG_FTP.

-E      Запретить команду EPSV. Это хорошо применять для серверов за файерволом.

-h      Запрет вывода в сообщениях сервера информации, специфичной для хоста, такой как версия ПО сервера или имя хоста.

-l      Каждая успешная и ошибочная ftp(1) сессия записывается через syslog LOG_FTP. Если эта опция указана дважды, то записыватся команды retrieve (get), store (put), append, delete, make directory, remove directory и операции rename вместе с именами файлов и аргументами. По умолчанию, syslogd(8) записывает эти сообщения в /var/log/xferlog.

-M      Предотвращает создание анонимными (anonymous) пользователями директорий.

-m      Разрешает анонимным пользователям перезаписывать или модифицировать существующие файлы, если это разрешено правами файловой системы. По умолчанию anonymous не может модифицировать существующие файлы; в частности, файлы для выгрузки на сервер (upload) должны создаваться с уникальными именами.

-O      Переводит сервер а режим write-only только для anonymous. Команда RETR запрещена для anonymous, что предотвращает анонимные загрузки (downloads) с сервера. Не дает эффекта, если также указана опция -o.

-o      Переводит сервер а режим write-only. Команда RETR запрещена для всех, что предотвращает загрузку информации с сервера.

-P      Когда указана опция -D, принимает соединения на указанном порту, указанном как числовая величина или имя сервиса, вместо порта «ftp» по умолчанию.

-p      Когда указана опция -D, записывает файл process ID в указанный файл вместо pid-файла по умолчанию /var/run/ftpd.pid.

-R      Когда указана эта опция, ftpd возвращается к историческому поведению по отношения к проверкам безопасности операций пользователей и ограничениям по запросам PORT. В настоящий момент ftpd поддерживает только команды PORT, направленные на непривилегированные порты для удаленных пользователей хоста (которые нарушают спецификацию протокола FTP, однако закрывают некоторые дыры в безопасности).

-r      Переводит сервер с режим read-only (только для чтения). Все команды, которые могут модифицировать файловую систему, запрещены.

-S      Когда указана эта опция, ftpd пишет в лог /var/log/ftpd все загрузки файлов anonymous, если этот файл лога существует.

-T      Клиент может также запрашивать отличеющийся период таймаута; максимально разрешенный период таймаута, который может быть установлен, задается опцией -T в секундах. Лимит по умолчанию 2 часа.

-t      Таймаут неактивности в секундах (по умолчанию 15 минут).

-U      Эта опция инструктирует ftpd использовать порты данных в диапазоне IP_PORTRANGE_DEFAULT вместо IP_PORTRANGE_HIGH. Это изменение полезно для некоторых специфичных конфигураций файерволла; см. ip(4) для дополнительной информации.

Примите к сведению, что эта опция является виртуальной и не работает на FreeBSD 5.0 выше; оба диапазона портов на них по умолчанию идентичны.

-u      Маска создания режима файла по умолчанию (file creation mode mask) устанавливается в umask, которая ожидается в восьмеричной числовой величине. См. umask(2) для деталей. Эта опция может быть переустановлена (запрещена) через login.conf(5).

-v      Синоним -d.

-W      Не записывать в лог /var/log/wtmp сессии FTP.

Как определить размер памяти во FreeBSD

Внезапно оказалось, что во FreeBSD нет способа быстро и наглядно посмотреть размер физической, свободной и занятой памяти. Вроде команды ‘free’ в линуксе. Интернет полон вопросами на этот счет и в ответ предлагается либо грепать дмесг:

# dmesg | grep memory
real memory  = 2147483648 (2048 MB)
avail memory = 2045009920 (1950 MB)
real memory  = 2147483648 (2048 MB)
avail memory = 2045009920 (1950 MB)

Либо ставить из портов ‘freecolor’:

# uname -omr
FreeBSD 9.0-RELEASE amd64
# cd /usr/ports/sysutils/freecolor/
freebsd# make install clean
===>  freecolor-0.8.8 is marked as broken: Does not function correctly on !i386.
*** Error code 1
Stop in /usr/ports/sysutils/freecolor.

Пичалька. Либо скачать и использовать вот этот перловый скрипт.

Ад и ненависть наполняет автора оригинального поста найденного мной тут, так как использовать пёрл для такой простой задачи — это нарушать KISS-принцип, ломать бритву Оккама лишней сущностью, а также просто фэйл. Плюс скрипт не обрабатывает ситуацию запуска из jail-а, что в наше время адской виртуализации всего — неприемлемо. Всяческие ‘top’ и ‘vmstat’ не велят использовать пауки, так как тоже лишняя сущность и в minimal install их нет.

Вобщем автор, портировал этот скрипт на язык, присутствующий в любой unix-системе (/bin/sh) и добавил обработку jail-a. Сохраните код ниже в какой-нибудь ‘/usr/bin/free’, сделайте ему ‘chmod a+x’ и наслаждайтесь.

#!/bin/sh

mem_phys=`sysctl -n hw.physmem`
mem_pgs=`sysctl -n hw.pagesize`
sys_jail=`sysctl -n security.jail.jailed`

# guess hardware memory size
chip_size=1
chip_guess=`expr $mem_phys / 8 - 1`
while [ $chip_guess -ne 0 ]; do
        chip_guess=`expr $chip_guess / 2`
        chip_size=`expr $chip_size \* 2`
done
mem_hw=`expr \( $mem_phys - 1 \) / $chip_size`
mem_hw=`expr $mem_hw \* $chip_size + $chip_size`

# determine the individual known information
mem_all=`sysctl -n vm.stats.vm.v_page_count`
mem_all=`expr $mem_all \* $mem_pgs`
mem_wire=`sysctl -n vm.stats.vm.v_wire_count`
mem_wire=`expr $mem_wire \* $mem_pgs`
mem_active=`sysctl -n vm.stats.vm.v_active_count`
mem_active=`expr $mem_active \* $mem_pgs`
mem_inactive=`sysctl -n vm.stats.vm.v_inactive_count`
mem_inactive=`expr $mem_inactive \* $mem_pgs`
mem_cache=`sysctl -n vm.stats.vm.v_cache_count`
mem_cache=`expr $mem_cache \* $mem_pgs`
mem_free=`sysctl -n vm.stats.vm.v_free_count`
mem_free=`expr $mem_free \* $mem_pgs`

# determine the individual unknown information
mem_gap_vm=`expr -- $mem_all - \( $mem_wire + $mem_active + $mem_inactive + $mem_cache + $mem_free \)`
mem_gap_sys=`expr -- $mem_phys - $mem_all`
mem_gap_hw=`expr -- $mem_hw - $mem_phys`

# determine logical summary information
mem_total=$mem_hw
mem_avail=`expr -- $mem_inactive + $mem_cache + $mem_free`
mem_used=`expr -- $mem_total - $mem_avail`

# print system results
printf "System memory information (page size is %d bytes)\n" $mem_pgs
if [ $sys_jail -eq 1 ]; then
        printf "WE ARE IN THE JAIL\n"
        printf "mem_wire:      %12d (%7dMB) %s\n" $mem_wire `expr -- $mem_wire / 1048576` 'Wired: disabled for paging out'
        printf "mem_active:    %12d (%7dMB) %s\n" $mem_active `expr -- $mem_active / 1048576` 'Active: recently referenced'
        printf "mem_inactive:  %12d (%7dMB) %s\n" $mem_inactive `expr -- $mem_inactive / 1048576` 'Inactive: recently not referenced'
        printf "mem_cache:     %12d (%7dMB) %s\n" $mem_cache `expr -- $mem_cache / 1048576` 'Cached: almost avail. for allocation'
        printf "mem_free:      %12d (%7dMB) %s\n" $mem_free `expr -- $mem_free / 1048576` 'Free: fully available for allocation'
        printf -- "-------------- ------------ -----------\n"
        printf "mem_phys:      %12d (%7dMB) %s\n" $mem_phys `expr -- $mem_phys  / 1048576` 'Total real memory available'
else
        printf "mem_wire:      %12d (%7dMB) [%3d%%] %s\n" $mem_wire `expr -- $mem_wire / 1048576` `expr -- $mem_wire \* 100 / $mem_all` 'Wired: disabled for paging out'
        printf "mem_active:  + %12d (%7dMB) [%3d%%] %s\n" $mem_active `expr -- $mem_active / 1048576` `expr -- $mem_active \* 100 / $mem_all` 'Active: recently referenced'
        printf "mem_inactive:+ %12d (%7dMB) [%3d%%] %s\n" $mem_inactive `expr -- $mem_inactive / 1048576` `expr -- $mem_inactive \* 100 / $mem_all` 'Inactive: recently not referenced'
        printf "mem_cache:   + %12d (%7dMB) [%3d%%] %s\n" $mem_cache `expr -- $mem_cache / 1048576` `expr -- $mem_cache \* 100 / $mem_all` 'Cached: almost avail. for allocation'
        printf "mem_free:    + %12d (%7dMB) [%3d%%] %s\n" $mem_free `expr -- $mem_free / 1048576` `expr -- $mem_free \* 100 / $mem_all` 'Free: fully available for allocation'
        printf "mem_gap_vm:  + %12d (%7dMB) [%3d%%] %s\n" $mem_gap_vm `expr -- $mem_gap_vm / 1048576` `expr -- $mem_gap_vm  \* 100 / $mem_all` 'Memory gap: UNKNOWN'
        printf -- "-------------- ------------ ----------- ------\n"
        printf "mem_all:     = %12d (%7dMB) [100%%] %s\n" $mem_all `expr -- $mem_all / 1048576` 'Total real memory managed'
        printf "mem_gap_sys: + %12d (%7dMB)        %s\n" $mem_gap_sys `expr -- $mem_gap_sys / 1048576` 'Memory gap: Kernel?!'
        printf -- "-------------- ------------ -----------\n"
        printf "mem_phys:    = %12d (%7dMB)        %s\n" $mem_phys `expr -- $mem_phys / 1048576` 'Total real memory available'
        printf "mem_gap_hw:  + %12d (%7dMB)        %s\n" $mem_gap_hw `expr -- $mem_gap_hw / 1048576` 'Memory gap: Segment Mappings?!'
        printf -- "-------------- ------------ -----------\n"
        printf "mem_hw:      = %12d (%7dMB)        %s\n" $mem_hw `expr -- $mem_hw / 1048576` 'Total real memory installed'
fi

# print logical results
if [ $sys_jail -ne 1 ]; then
        printf "\nSystem memory summary\n"
        printf "mem_used:      %12d (%7dMB) [%3d%%] %s\n" $mem_used `expr -- $mem_used / 1048576` `expr -- $mem_used \* 100 / $mem_total` 'Logically used memory'
        printf "mem_avail:   + %12d (%7dMB) [%3d%%] %s\n" $mem_avail `expr -- $mem_avail / 1048576` `expr -- $mem_avail \* 100 / $mem_total` 'Logically available memory'
        printf -- "-------------- ------------ ----------- ------\n"
        printf "mem_total:   = %12d (%7dMB) [100%%] %s\n" $mem_total `expr -- $mem_total / 1048576` 'Logically total memory'
fi

Пример вывода:

System memory information (page size is 4096 bytes)
mem_wire:        1384239104 (   1320MB) [ 67%] Wired: disabled for paging out
mem_active:  +     19644416 (     18MB) [  0%] Active: recently referenced
mem_inactive:+      4112384 (      3MB) [  0%] Inactive: recently not referenced
mem_cache:   +        36864 (      0MB) [  0%] Cached: almost avail. for allocation
mem_free:    +    654012416 (    623MB) [ 31%] Free: fully available for allocation
mem_gap_vm:  +       512000 (      0MB) [  0%] Memory gap: UNKNOWN
-------------- ------------ ----------- ------
mem_all:     =   2062557184 (   1967MB) [100%] Total real memory managed
mem_gap_sys: +     63373312 (     60MB)        Memory gap: Kernel?!
-------------- ------------ -----------
mem_phys:    =   2125930496 (   2027MB)        Total real memory available
mem_gap_hw:  +     21553152 (     20MB)        Memory gap: Segment Mappings?!
-------------- ------------ -----------
mem_hw:      =   2147483648 (   2048MB)        Total real memory installed

System memory summary
mem_used:        1489321984 (   1420MB) [ 69%] Logically used memory
mem_avail:   +    658161664 (    627MB) [ 30%] Logically available memory
-------------- ------------ ----------- ------
mem_total:   =   2147483648 (   2048MB) [100%] Logically total memory

FreeBSD — увеличение размера ZFS корневого раздела. Способ второй.

Имеем FreeBSD 9.0 RELEASE установленную в в качестве гостевой операционной системы с VMWare vSphere 5.0. Файловая система ZFS. Основной диск 100 Гб — маловат — задача перехать на диск большего объема — 200 Гб.
Мы уже рассматривали такой вариант — там мы просто средствами платформы виртуализации увеличивали объем диска. А если реальное железо? Пробуем тоже самое — но с заменой дисков.
Имеем:

# dmesg | grep da0
da0 at mpt0 bus 0 scbus2 target 0 lun 0
da0: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
da0: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
da0: Command Queueing enabled
da0: 102400MB (209715200 512 byte sectors: 255H 63S/T 13054C)
# gpart show
=>    34  209715133  da0  GPT   (100G)
      34         94    1  freebsd-boot   (47k)
     128  209715039    2  freebsd-zfs   (100G)
# zpool status -v
pool: zroot
state: ONLINE
scan: none requested
config:

NAME      STATE READ WRITE CKSUM
zroot    ONLINE    0     0     0
  da0p2  ONLINE    0     0     0

errors: No known data errors

Идем VMWare vShere Client выбираем Inventory — Virtual Machine — Edit Settings. Закладка Hardware — кнопка Add. Добавляем еще один жесткий диск объемом 200 Гб. Тут же получаем:

# tail /var/log/messages | grep da1
kernel: da1 at mpt0 bus 0 scbus2 target 1 lun 0
kernel: da1: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
kernel: da1: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
kernel: da1: Command Queueing enabled
kernel: da1: 204800MB (419430400 512 byte sectors: 255H 63S/T 26108C)

Размечаем новый диск с помощью gpart.

# gpart create -s gpt da1
da1 created
# gpart add -b 34 -s 94 -t freebsd-boot da1
da1p1 added
# gpart add -t freebsd-zfs -l disk0 da1
da1p2 added
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
bootcode written to da1

Смотрим что получилось.

# gpart show
=> 34 209715133 da0 GPT (100G)
      34 94 1 freebsd-boot (47k)
     128 209715039 2 freebsd-zfs (100G)

=> 34 419430333 da1 GPT (200G)
      34 94 1 freebsd-boot (47k)
     128 419430239 2 freebsd-zfs (200G)

Смотрим состояние переменной autoexpand нашего пула zroot.

# zpool get autoexpand zroot
NAME PROPERTY VALUE SOURCE
zroot autoexpand off default

Разрешаем автоувеличение пула.

# zpool set autoexpand=on zroot
# zpool get autoexpand zroot
NAME PROPERTY VALUE SOURCE
zroot autoexpand on local

Присоединяем новый диск в массив.

# zpool attach zroot da0p2 da1p2
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk 'da1p2'.

Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

Смотрим что получилось.

# zpool status -v
pool: zroot
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Mon Dec 3 10:08:52 2012
1.40G scanned out of 3.14G at 23.4M/s, 0h1m to go
1.40G resilvered, 44.48% done
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
da0p2 ONLINE 0 0 0
da1p2 ONLINE 0 0 0 (resilvering)

errors: No known data errors

Идет перенос данных (ресилвер). Хоть мы и записывали загрузчик на новый диск в самом начале — но раз просит — обновим его везде, эту операцию можно производить прямо во время переноса данных.

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
bootcode written to da0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
bootcode written to da1

Перенос данных проходит быстро. На моем оборудовании 3 Гб данных было перенесено за 1 минуту.

# zpool status -v
pool: zroot
state: ONLINE
scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec 3 10:10:47 2012
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
da0p2 ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: No known data errors

Удаляем старый диск из пула.

# zpool detach zroot da0p2

Смотрим что получилось.

# zpool status -v
pool: zroot
state: ONLINE
scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec 3 10:10:47 2012
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: No known data errors

# df -h zroot
Filesystem    Size    Used   Avail Capacity  Mounted on
zroot         189G    350M    189G     0%    /

Возвращаем значения по умолчанию.

# zpool set autoexpand=off zroot
# zpool get autoexpand zroot
NAME PROPERTY VALUE SOURCE
zroot autoexpand off default

Удаляем старый диск.

# tail /var/log/messages
kernel: mpt0: Rescan Port: 0
kernel: (da0:mpt0:0:0:0): lost device - 0 outstanding
kernel: (da0:mpt0:0:0:0): removing device entry
# gpart show
=> 34 419430333 da1 GPT (200G)
34 94 1 freebsd-boot (47k)
128 419430239 2 freebsd-zfs (200G)

# zpool status -v
pool: zroot
state: ONLINE
scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec 3 10:10:47 2012
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: No known data errors

Ну и для очистки совести контрольная перезагрузка.

# gpart show
=>       34  419430333  da0  GPT  (200G)
         34         94    1  freebsd-boot  (47k)
        128  419430239    2  freebsd-zfs  (200G)

# zpool status -v
  pool: zroot
 state: ONLINE
 scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec  3 10:10:47 2012
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          da0p2     ONLINE       0     0     0

errors: No known data errors
# df -h zroot
Filesystem    Size    Used   Avail Capacity  Mounted on
zroot         189G    350M    189G     0%    /

Данный способ подходит для любого типа реального железа — более того, если у вас оборудование позволяет менять жесткие диски на горячую — мы можем произвести данную операцию без остановки обслуживания.