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

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