Архив рубрики: FreeBSD

Как определить размер памяти во 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%    /

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

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

Имеем FreeBSD 9.0 RELEASE установленную в качестве гостевой ОС в VMWare vSphere 5.0. Корневой раздел в ZFS (swap тоже на ZFS). Ситуация — пожалели место — места стало нехватать.

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

Увеличиваем размер корневого радела. Для этого в свойствах виртуальной машины просто вводим новый размер диска. Не мелочимся — добавим еще 100 Гб. Смотрим.

# camcontrol readcap da0 -h
Device Size: 200 G, Block Length: 512 bytes
# gpart show
=>       34  209715133  da0  GPT  (100G)
         34         94    1  freebsd-boot  (47k)
        128  209715039    2  freebsd-zfs  (100G)

Не нашел способа заставить на горячую gpart увидеть измененный размер диска.
Перезагружаемся. Смотрим.

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

Наш диск по мнению gpart поврежден. Исправляем. Смотрим что получилось.

# gpart recover da0
da0 recovered
# gpart show
=>       34  419430333  da0  GPT  (200G)
         34         94    1  freebsd-boot  (47k)
        128  209715039    2  freebsd-zfs  (100G)
  209715167  209715200       - free -  (100G)

Все отлично — система добавленные 100 Гб видит. Смотрим статус ZFS.

freebsd# 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
# zfs list zroot
NAME    USED  AVAIL  REFER  MOUNTPOINT
zroot  7.26G  90.7G   350M  /

Делаем resize раздела с помощью gpart.

# gpart show
=>       34  419430333  da0  GPT  (200G)
         34         94    1  freebsd-boot  (47k)
        128  209715039    2  freebsd-zfs  (100G)
  209715167  209715200       - free -  (100G)

# gpart resize -i 2 da0
gpart: Device busy
freebsd# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
freebsd# gpart resize -i 2 da0
da0p2 resized
# gpart show
=>       34  419430333  da0  GPT  (200G)
         34         94    1  freebsd-boot  (47k)
        128  419430239    2  freebsd-zfs  (200G)

# sysctl kern.geom.debugflags=0
kern.geom.debugflags: 16 -> 0

Разрешаем авторасширение ZFS, по умолчанию выключено.

# zpool set autoexpand=on zroot

Смотрим состояние ZFS.

# zfs list zroot
NAME    USED  AVAIL  REFER  MOUNTPOINT
zroot  7.26G   93G    350M  /
# 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

Отдаем команду ZFS использовать все доступное пространство — ключик -e.

# zpool online -e zroot da0p2

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

# zfs list zroot
NAME    USED  AVAIL  REFER  MOUNTPOINT
zroot  7.26G   189G   350M  /
# 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

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

Задача установить FreeBSD 9.0 RELEASE используя в качестве корневой файловой системы ZFS.
Грузимся с загрузочного CD или DVD — в программе установки выбираем выход в 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

Создаем пул с оптимизацией под размер сектора 4К.

gnop create -S 4096 /dev/gpt/disk0
zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot /dev/gpt/disk0.nop
zpool export zroot
gnop destroy /dev/gpt/disk0.nop
zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot

Установка дополнительных параметров.

zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 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 раздел в 4 Гб.

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

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

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

Устанавливаем дополнительные параметры в файл 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
echo '#vm.kmem_size="512M"' >> /mnt/boot/loader.conf
touch /mnt/etc/fstab

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

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 

Установка VMWare Tools в FreeBSD 9

Имеем FreeBSD 9.0 RELEASE amd64 установленную в качестве гостевой операционной системы в VMWare vShere 5.0. Задача — установить VMWare Tools.
Обновляем дерево портов.

portsnap fetch extract

Устанавливаем зависимости

cd /usr/ports/lang/perl5.14/
make install clean
cd /usr/ports/misc/compat6x/
make install clean

В VMWare vShere Client выбираем Inventory — Virtual Machine — Guest — Install/Upgrade VMWare Tools.

mount -t cd9660 /dev/cd0 /mnt

Копируем файл vmware-freebsd-tools.tar.gz в свой домашний каталог и распаковываем.

cp /mnt/vmware-freebsd-tools.tar.gz /root
cd /root
tar -xzf vmware-freebsd-tools.tar.gz

Необходимо пересобрать модули Guest memory manager и Blocking file system из состава VMWare Tools. Для этого необходимы исходники системы.

cd /root/vmware-tools-distrib/lib/modules/source/ 
tar -xf vmmemctl.tar 
cd vmmemctl-only 
make 
make install
cd ..
tar -xf vmblock.tar 
cd vmblock-only 
make 
make install

Устанавливаем VMWare Tools.

cd /root/vmware-tools-distrib/ 
./vmware-install.pl

На все вопросы установочного скрипта отвечаем нажатием клавиши Enter (выбор значения по умолчанию).
Распакованный каталог с VMWare Tools не удаляем — в случае пересборки ядра будет необходимо переустановить модули Guest memory manager и Blocking file system из состава VMWare Tools.

cd /root/vmware-tools-distrib/lib/modules/source/vmmemctl-only 
make install
cd ..
cd vmblock-only 
make install
cd /root/vmware-tools-distrib/ 
./vmware-install.pl

locate: database too small: /var/db/locate.database

Имеем FreeBSD 9.0 RELEASE. Ошибка:

locate: database too small: /var/db/locate.database

Решение запустить от имени root

/usr/libexec/locate.updatedb

некрасиво, ибо ругается

WARNING
Executing updatedb as root.  This WILL reveal all filenames
on your machine to all login users, which is a security risk.

поэтому запускаем

/etc/periodic/weekly/310.locate

или ждем до конца недели.

managed-keys-zone ./IN: loading from master file managed-keys.bind failed: file not found

Имеем FreeBSD 9.0 RELEASE. В логах ошибка:

managed-keys-zone ./IN: loading from master file managed-keys.bind failed: file not found

решение

touch /etc/namedb/working/managed-keys.bind

путь до файла смотрим в /etc/namedb/named.conf

directory       /etc/namedb/working