неділя, 16 травня 2010 р.

zfs only system & geom_eli

Непосредственно с geom_eli грузиться нельзя: ни loader, ни никакой из boot-ов его не умеют и загрузить ядро оттуда не смогут. Поэтому делается схема с /boot на отдельном разделе, без geli.
Вообще для этого можно практически дословно вспользоваться инструкцией http://wiki.freebsd.org/RootOnZFS/UFSBoot , но наличие дополнительного ufs раздела мне не нравится: это fsck после unclean shutdown, отсутствие дешевых снапшотов (к хорошему привыкаешь быстро). Поэтому была взята за основу эта статья, http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot и вместе творчески доработаны до получения конфигурации с двумя zfs pool.
# gpart show ada0
=>       34  976773101  ada0  GPT  (466G)
         34         30        - free -  (15K)
         64        128     1  freebsd-boot  (64K)
        192       1856        - free -  (928K)
       2048   16777216     2  freebsd-swap  (8.0G)
   16779264    2097152     3  freebsd-zfs  (1.0G)
   18876416  957896719     4  freebsd-zfs  (457G)
Тут опять напоминаю владельцам дисков WesternDigital о желательности выравнивания начала разделов по 4K границе (gpart сам этого не делает).
swap в принципе может размещаться на zpool, но при этом не будет возможности получить crash dump ядра.
Понятно что на ada0 надо накатить pmbr и gptzfsboot
На 3-й раздел я повесил gpt label zboot для удобства. Использовать метку на 4-м разделе не получится: он должен быть размечен через geli с -b , а при этом ядро как только увидит geli label на ada0p4 , так сразу и запросит для него пароль, не зависимо от наличия gpt label
# geli list
Geom name: ada0p4.eli
EncryptionAlgorithm: AES-CBC
KeyLength: 128
Crypto: software
UsedKey: 0
Flags: BOOT
Providers:
1. Name: ada0p4.eli
   Mediasize: 490443119616 (457G)
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: ada0p4
   Mediasize: 490443120128 (457G)
   Sectorsize: 512
   Mode: r1w1e1
Кстати geli label содержит определенные метаданные, без которых получить данные с раздела не возможно. Поэтому не забывайте о необходимости сохранить их с помощью чего-нибудь типа
# geli backup ada0p4 /boot/geli.meta
Ну а дальше можно создавать два пула:
# zpool status
  pool: zboot
 state: ONLINE
 scrub: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        zboot        ONLINE       0     0     0
          gpt/zboot  ONLINE       0     0     0

errors: No known data errors

  pool: zdata
 state: ONLINE
 scrub: none requested
config:

        NAME          STATE     READ WRITE CKSUM
        zdata         ONLINE       0     0     0
          ada0p4.eli  ONLINE       0     0     0

errors: No known data errors
# zpool get bootfs zboot
NAME   PROPERTY  VALUE   SOURCE
zboot  bootfs    zboot   local
# zpool get bootfs zdata
NAME   PROPERTY  VALUE   SOURCE
zdata  bootfs    -       default
# zfs list -o name,mountpoint zboot
NAME   MOUNTPOINT
zboot  /zboot
# zfs list -o name,mountpoint,exec,compression -r zdata
NAME                       MOUNTPOINT            EXEC  COMPRESS
zdata                      legacy                  on       off
zdata/usr                  /usr                    on       off
zdata/usr/home             /usr/home               on       off
zdata/usr/local            /usr/local              on       off
zdata/usr/local/arch       /usr/local/arch         on      lzjb
zdata/usr/local/jails      /usr/local/jails        on       off
zdata/usr/local/tinderbox  /usr/local/tinderbox    on       off
zdata/usr/ports            /usr/ports              on      lzjb
zdata/usr/ports/distfiles  /usr/ports/distfiles   off       off
zdata/usr/ports/packages   /usr/ports/packages    off       off
zdata/usr/src              /usr/src               off      lzjb
zdata/var                  /var                    on       off
zdata/var/crash            /var/crash             off      lzjb
zdata/var/db               /var/db                off       off
zdata/var/db/pkg           /var/db/pkg             on      lzjb
zdata/var/empty            /var/empty             off       off
zdata/var/log              /var/log               off      lzjb
zdata/var/mail             /var/mail              off      gzip
zdata/var/run              /var/run               off       off
zdata/var/tmp              /var/tmp                on      lzjb
# ls -l /boot
lrwxr-xr-x  1 root  wheel  11 12 кві 18:30 /boot -> /zboot/boot
# fgrep zfs /boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:zdata"
vfs.zfs.debug=1
#
# cat /etc/fstab
# Device   Mountpoint      FStype  Options         Dump    Pass#
/dev/gpt/swap   none            swap    sw      0       0       0
tmpfs   /tmp    tmpfs   rw,size=3221225472      0       0
proc    /proc   procfs  rw      0       0
fdescfs /dev/fd fdescfs rw 0 0
linproc /usr/compat/linux/proc  linprocfs       rw,late 0       0
/dev/cd0                /cdrom          cd9660  ro,noauto,-CKOI8-U      0       0
Вот так оно и живет на моем ноутбуке. Уже больше месяца как.

Немає коментарів: