Скрипт установки Freebsd9 на zfs.

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1808
Зарегистрирован: 2008-10-03 14:56:40

Скрипт установки Freebsd9 на zfs.

Непрочитанное сообщение kharkov_max » 2012-05-17 12:43:39

Собственно нашел в инете скрипт и собрал (немного переписал) новый под себя, для 6 дисков по 2Тб. в raidz
Собственно сам скрипт.

Код: Выделить всё

dev1=ada0
dev2=ada1
dev3=ada2
dev4=ada3
dev5=ada4
dev6=ada5
pool_name=rpool
swap_size="16G"
start_boot="40"
end_boot="1024"
start_fs="4096"
# ----- Start script -----
# TMP
mount_dir=/var/tmp
umount /dev/md1
mdmfs -s 512M md1 /tmp
sysctl kern.geom.debugflags=17
# Gpart create
zpool destroy -f $pool_name
gpart destroy -F $dev1
gpart destroy -F $dev2
gpart destroy -F $dev3
gpart destroy -F $dev4
gpart destroy -F $dev5
gpart destroy -F $dev6
gpart create -s GPT $dev1
gpart add -b $start_boot -s $end_boot -t freebsd-boot $dev1
gpart add -t freebsd-zfs -l disk1 $dev1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev1
gpart create -s GPT $dev2
gpart add -b $start_boot -s $end_boot -t freebsd-boot $dev2
gpart add -t freebsd-zfs -l disk2 $dev2
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev2
gpart create -s GPT $dev3
gpart add -b $start_boot -s $end_boot -t freebsd-boot $dev3
gpart add -t freebsd-zfs -l disk3 $dev3
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev3
gpart create -s GPT $dev4
gpart add -b $start_boot -s $end_boot -t freebsd-boot $dev4
gpart add -t freebsd-zfs -l disk4 $dev4
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev4
gpart create -s GPT $dev5
gpart add -b $start_boot -s $end_boot -t freebsd-boot $dev5
gpart add -t freebsd-zfs -l disk5 $dev5
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev5
gpart create -s GPT $dev6
gpart add -b $start_boot -s $end_boot -t freebsd-boot $dev6
gpart add -t freebsd-zfs -l disk6 $dev6
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev6
# Create pool zfs for a non gnop, comment "4kb sector" section/
# zpool create -f $pool_name raidz /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk3 /dev/gpt/disk4 /dev/gpt/disk5 /dev/gpt/disk6
# ----- 4kb sector ------
gnop create -S $start_fs /dev/gpt/disk1
gnop create -S $start_fs /dev/gpt/disk2
gnop create -S $start_fs /dev/gpt/disk3
gnop create -S $start_fs /dev/gpt/disk4
gnop create -S $start_fs /dev/gpt/disk5
gnop create -S $start_fs /dev/gpt/disk6
zpool create -f -o altroot=$mount_dir -o cachefile=/var/tmp/zpool.cache $pool_name raidz /dev/gpt/disk1.nop /dev/gpt/disk2.nop /dev/gpt/disk3.nop /dev/gpt/disk4.nop /dev/gpt/disk5.nop /dev/gpt/disk6.nop
zpool export $pool_name
gnop destroy -f /dev/gpt/disk1.nop
gnop destroy -f /dev/gpt/disk2.nop
gnop destroy -f /dev/gpt/disk3.nop
gnop destroy -f /dev/gpt/disk4.nop
gnop destroy -f /dev/gpt/disk5.nop
gnop destroy -f /dev/gpt/disk6.nop
zpool import -o altroot=$mount_dir -o cachefile=/var/tmp/zpool.cache $pool_name
# ----- 4kb sector ------
#Set bootfs
zpool set bootfs=$pool_name $pool_name
zfs set checksum=fletcher4 $pool_name
zfs set mountpoint=$mount_dir $pool_name
zpool export $pool_name
zpool import -o cachefile=/tmp/zpool.cache $pool_name
# zfs sets
zfs create $pool_name/usr
zfs create $pool_name/usr/home
zfs create $pool_name/var
## zfs create $pool_name/tmp
zfs create -o compression=on -o exec=on -o setuid=off $pool_name/tmp
zfs create -o compression=lzjb -o setuid=off $pool_name/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off $pool_name/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off $pool_name/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off $pool_name/usr/src
zfs create -o compression=lzjb -o exec=off -o setuid=off $pool_name/var/crash
zfs create -o exec=off -o setuid=off $pool_name/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off $pool_name/var/db/pkg
zfs create -o exec=off -o setuid=off $pool_name/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off $pool_name/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off $pool_name/var/mail
zfs create -o exec=off -o setuid=off $pool_name/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off $pool_name/var/tmp
# Create swap
zfs create -V $swap_size $pool_name/swap
zfs set org.freebsd:swap=on $pool_name/swap
zfs set checksum=off $pool_name/swap
# Chmod tmp
chmod 1777 $mount_dir/tmp
cd /var/tmp ; ln -s /usr/home home
chmod 1777 $mount_dir/var/tmp
# Install freebsd
cd /usr/freebsd-dist
export DESTDIR=$mount_dir
for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
# Copy cache
cp /tmp/zpool.cache $mount_dir/boot/zfs/zpool.cache
# Create config
echo 'zfs_enable="YES"' >> $mount_dir/etc/rc.conf
chmod 1777 $mount_dir/boot
echo 'zfs_load="YES"' >> $mount_dir/boot/loader.conf
echo "vfs.root.mountfrom=\"zfs:$pool_name\"" >> $mount_dir/boot/loader.conf
mkdir $mount_dir/cdrom
touch $mount_dir/etc/fstab
# cat << EOF > $mount_dir/etc/fstab
##Device	Mountpoint	FStype	Options		Dump	Pass#
# /dev/gtp/swap0	none	swap	sw		0	0
# /dev/cd0	/cdrom	cd9660	ro,noauto	0	0
# EOF
# Change mountpoint
zfs set readonly=on $pool_name/var/empty
zfs umount -af
zfs set mountpoint=legacy $pool_name
zfs set mountpoint=/tmp $pool_name/tmp
zfs set mountpoint=/usr $pool_name/usr
zfs set mountpoint=/var $pool_name/var
echo "Finished"
sleep 5
reboot
Внимание скрипт полностью рабочий !!!
Скрипт используя gnop выравнивает диск под 4кб
проверить можно zdb | grep ashift, должно быть 12 а не 9.

Но ...
Мне не нравится следующее.
Когда я создаю GPT, дискам даю метки

Код: Выделить всё

gpart add -t freebsd-zfs -l disk2 $dev2
Но после установки системы zpool status мне показывает диски не по меткам, которые я указывал.
Как то так:

Код: Выделить всё

zpool status
  pool: rpool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            ada0p2  ONLINE       0     0     0
            ada1p2  ONLINE       0     0     0
а должен как то так:

Код: Выделить всё

zpool status
  pool: rpool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            disk1  ONLINE       0     0     0
            disk2  ONLINE       0     0     0
Каталог /dev/gpt отсутствует, система грузится и работает.
Как поправить положение, хочется видить диски в пуле по меткам.

Спасибо.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
NoResponse
мл. сержант
Сообщения: 76
Зарегистрирован: 2007-07-30 1:39:02
Контактная информация:

Re: Скрипт установки Freebsd9 на zfs.

Непрочитанное сообщение NoResponse » 2012-05-18 23:43:26

gnop destroy -f /dev/gpt/disk6.nop
zpool import -o altroot=$mount_dir -o cachefile=/var/tmp/zpool.cache $pool_name -d /dev/gpt
Я сам по себе скопище энтропии. А по законам термодинамики, если не принимать никаких действий энтропия стремится к бесконечности. Похоже, так оно и есть.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1808
Зарегистрирован: 2008-10-03 14:56:40

Re: Скрипт установки Freebsd9 на zfs.

Непрочитанное сообщение kharkov_max » 2012-05-19 20:24:53

NoResponse писал(а):gnop destroy -f /dev/gpt/disk6.nop
zpool import -o altroot=$mount_dir -o cachefile=/var/tmp/zpool.cache $pool_name -d /dev/gpt
Спасибо - попробую.
Может буду заново пул пересобирать ...

Продолжу вопросы дальше.
Решил обновить мир и исходники. Все замечательно пересобралось и проинсталилось.
Делаю zpool status и вижу ужасную картину

Код: Выделить всё

        NAME                                            STATE     READ WRITE CKSUM
        rpool                                           ONLINE       0     0     0
          raidz1-0                                      ONLINE       0     0     0
            gptid/55сс1cae-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/57bb1cae-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/57fa5324-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/5839c3c6-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/587dc66e-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/58c589fe-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
Появились каталоги /dev/gpt в нем нормальные метки дисков disk1,disk2 и т.д
и /dev/gptid в нем метки дисков по UID 55сс1cae-a01b-11e1-a109-00151785091e

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

Код: Выделить всё

pool: rpool
 state: ONLINE
 scan: resilvered 212K in 0h0m with 0 errors on Fri May 18 15:47:05 2012
config:

        NAME                                            STATE     READ WRITE CKSUM
        rpool                                           ONLINE       0     0     0
          raidz1-0                                      ONLINE       0     0     0
            ada0p2                                      ONLINE       0     0     0
            gptid/57bb1cae-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/57fa5324-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/5839c3c6-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/587dc66e-a01b-11e1-a109-00151785091e  ONLINE       0     0     0
            gptid/58c589fe-a01b-11e1-a109-00151785091e  ONLINE       0     0     0

errors: No known data errors
И мне начинает это все казаться очень странным ...

Может я скриптом как то не правильно пул собрал ?
У кого какие идеи на этот счет ?

Сервер пока в тестовом варианте, но скоро нужно будет запускать его по настоящему, собственно хочется раскурить этот неприятный момент, что бы потом не было худо ...
Спасибо.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1808
Зарегистрирован: 2008-10-03 14:56:40

Re: Скрипт установки Freebsd9 на zfs.

Непрочитанное сообщение kharkov_max » 2012-05-19 20:41:24

Вот нагуглил

Код: Выделить всё

Тазик сетапился с нуля с мемстика 9-ки. 
Соответственно разбивка делалась gpart'ом 9-ки. 

/dev/gpt нет, есть /dev/gptid 
Собственно с gptid немного понятно, в 9ке теперь так.
А вот зачем после пересборки мира появился каталог /dev/gtp с нормальными метками - не понятно.

Аватара пользователя
sadchok
сержант
Сообщения: 271
Зарегистрирован: 2011-10-13 10:40:54
Откуда: Алтайский край

Re: Скрипт установки Freebsd9 на zfs.

Непрочитанное сообщение sadchok » 2013-01-21 10:44:49

У меня тоже самое.
После обновления 9 > 9.1

Код: Выделить всё

# zpool status zroot
  pool: zroot
 state: ONLINE
  scan: resilvered 2,54G in 0h6m with 0 errors on Mon Jan 21 13:39:38 2013
config:

	NAME                                            STATE     READ WRITE CKSUM
	zroot                                           ONLINE       0     0     0
	  raidz1-0                                      ONLINE       0     0     0
	    ada0p2                                      ONLINE       0     0     0
	    gptid/0c8cee62-5262-11e1-a2dc-0030842c1ee2  ONLINE       0     0     0
	    gptid/104bebae-5262-11e1-a2dc-0030842c1ee2  ONLINE       0     0     0

errors: No known data errors

Код: Выделить всё

# gpart show
=>       34  312581741  ada0  GPT  (149G)
         34        512     1  freebsd-boot  (256k)
        546  312581229     2  freebsd-zfs  (149G)

=>       34  312581741  ada1  GPT  (149G)
         34        512     1  freebsd-boot  (256k)
        546  312581229     2  freebsd-zfs  (149G)

=>       34  312581741  ada2  GPT  (149G)
         34        512     1  freebsd-boot  (256k)
        546  312581229     2  freebsd-zfs  (149G)
И для него нет id

Код: Выделить всё

# ll /dev/gptid
total 0
crw-r-----  1 root  operator    0, 119 21 янв 13:33 0c8cee62-5262-11e1-a2dc-0030842c1ee2
crw-r-----  1 root  operator    0, 116 21 янв 13:33 104bebae-5262-11e1-a2dc-0030842c1ee2
crw-r-----  1 root  operator    0, 103 21 янв 13:33 c6fb7ea0-5261-11e1-a2dc-0030842c1ee2
crw-r-----  1 root  operator    0, 117 21 янв 13:33 c89970f9-5261-11e1-a2dc-0030842c1ee2
crw-r-----  1 root  operator    0, 114 21 янв 13:33 ca1b4ad5-5261-11e1-a2dc-0030842c1ee2
В чем причина?
И что с этим делать?
The brain can not be found. Runs the software emulation

Аватара пользователя
kharkov_max
капитан
Сообщения: 1808
Зарегистрирован: 2008-10-03 14:56:40

Re: Скрипт установки Freebsd9 на zfs.

Непрочитанное сообщение kharkov_max » 2013-01-21 11:10:21

Я пока забил на это, пул работает и бог сним, но заняться этим нужно ...
Если найдете что либо, отпишитесь пожалуйста ...