Предположим, ну очень хочется чтобы и корневой раздел у нас был zfs. Тогда - придется повозиться. Итак, Solaris установлен и диск разбит следующим образом:
c0d0s0 /grub 150MB (UFS раздел для grub)
c0d0s1 swap 1GB (Стандартный Swap)
c0d0s3 / 4GB (UFS раздел с установленным Solaris, его и будем клонировать)
c0d0s7 ZFS all the rest (Все остальное пространство, далее конфигурирумое как "intdisk" , содержит ZFS root и клоны плюс домашние директории и т.д.)
Система установлена на c0d0s3, необходимые пакеты поставлены, тогда приступаем.
Создадим zfs пул, без монтирования по умолчанию:
zpool create -f -m none intdisk c0d0s7
Теперь создадим zfs раздел для корневого раздела. Для имени раздела используем символическое имя.
zfs create intdisk/snv46_root
zfs set mountpoint=legacy intdisk/snv46_root
zfs set compression=on intdisk/snv46_root
Создадим точку монтирования для zfs корня и используя ufsdump/ufsrestore, скопируем туда все с UFS корня. Можно было бы использовать cpio или tar, но нам нужны данные и из /devices.
mkdir -m 0755 /zfsroot
echo "intdisk/snv46_root - /zfsroot zfs - yes -" >> /etc/vfstab
mount /zfsroot
cd /zfsroot
ufsdump 0f - / | ufsrestore -rf -
Теперь начинается шаманство с загрузочным архивом. Изменим /etc/system на zfs корне для использования собственно zfs файловой системы. Эта конфигурация извлекается ядром из boot-архива, и копируется каждый раз при его обновлении. Убедимся что конфигурация zpool также добавлена в boot-архив.
echo "rootfs:zfs" >> /zfsroot/etc/system
echo "zfsroot:intdisk/snv46_root" >> /zfsroot/etc/system
echo "etc/zfs/zpool.cache" >> /zfsroot/boot/solaris/filelist.ramdisk
grep -v 'intdisk/snv46_root' /etc/vfstab | awk '$3 == "/" { printf "intdisk/snv46_root\t-\t/\tzfs\t-\tno\t-\n" } ; $3 != "/" { print $0 }' > /zfsroot/etc/vfstab
Создадим специальный hack для bootadm.
mv /zfsroot/sbin/bootadm /zfsroot/sbin/bootadm.real
cat - > /zfsroot/sbin/bootadm << EOM
#!/usr/bin/sh
/sbin/bootadm.real "\$@"
if [ "\$1" = "update-archive" -a -d /grub/boot/grub ]; then
/usr/bin/cp /platform/i86pc/boot_archive /boot/boot_archive
fi
exit 0
EOM
chmod +x /zfsroot/sbin/bootadm
Теперь мы готовы для обновления boot-архива и конфигурирования grub. Корень "root (hd0,0,a)" должен указывать на раздел grub.
/usr/sbin/bootadm update-archive -R /zfsroot
cp -pr /zfsroot/boot /grub
cp /zfsroot/platform/i86pc/boot_archive /grub/boot/boot_archive
(
echo "title Solaris ZFS"
echo "root (hd0,0,a)"
echo "kernel /boot/multiboot"
echo "module /boot/boot_archive"
) >> /grub/boot/grub/menu.lst
cd /grub/boot/grub
installgrub stage1 stage2 /dev/rdsk/c0d0s0
Теперь после перезагрузки мы получили новый раздел в grub-меню для загрузки в zfs. Если загрузка проходит успешно, склонируем корневой раздел zfs. Для этого сделаем снимок существующего zfs корня. Назовем его "snv46_second".
zfs snapshot intdisk/snv46_root@initial
zfs clone intdisk/snv46_root@initial intdisk/snv46_second
zfs set mountpoint=legacy intdisk/snv46_second
zfs set compression=on intdisk/snv46_second
echo "intdisk/snv46_second - /zfsroot zfs - yes -" >> /etc/vfstab
mount /zfsroot
Проделаем те же шаги что и ранее. Снова внесем изменения для boot-архива.
sed -e "s/snv46_root/snv46_second/" /etc/system > /zfsroot/etc/system
grep -v 'intdisk/snv46_second' /etc/vfstab | awk '$3 == "/" { printf "intdisk/snv46_second\t-\t/\tzfs\t-\tno\t-\n" } ; $3 != "/" { print $0 }' > /zfsroot/etc/vfstab
cat - > /zfsroot/sbin/bootadm << EOM
#!/usr/bin/sh
/sbin/bootadm.real "\$@"
if [ "\$1" = "update-archive" -a -d /grub/boot/grub ]; then
/usr/bin/cp /platform/i86pc/boot_archive /boot/boot_archive.test
fi
exit 0
EOM
chmod +x /zfsroot/sbin/bootadm
/usr/sbin/bootadm update-archive -R /zfsroot
cp /zfsroot/platform/i86pc/boot_archive /grub/boot/boot_archive.test
(
echo "#"
echo "title Solaris ZFS test"
echo "root (hd0,0,a)"
echo "kernel /boot/multiboot"
echo "module /boot/boot_archive.test"
) >> /grub/boot/grub/menu.lst
Теперь после перезагрузки мы имеем тестовый клон корневого раздела. Число клонов, которые можно создать, ограничено числом boot-архивов, которые помещаются в /grub раздел, и в меньшей степени свободным местом в пуле ZFS.
Если у кого-то возникнут сложности с созданием boot-архива, используйте последний SXCR образ.
(Вольный перевод с solaristhings.blogspot.com)