- 論壇徽章:
- 0
|
本帖最后由 ulovko 于 2012-08-29 11:17 編輯
我的FreeBSD和Funtoo Linux裝在同一個硬盤上(GPT)。為了和Grub2兼容(Funtoo Linux的Grub2不包含ZFS模塊,因此無法直接用Grub2來引導純ZFS的FreeBSD),于是決定把FreeBSD的/boot或者/單獨分出來,使用ufs文件系統(tǒng)。但是考慮到如果把/作為ufs,那么其他掛載點不太好處理,會喪失很多靈活性,因此最終決定把/boot作為ufs,用Grub2引導來引導FreeBSD的loader,達到兼容的目的。網上找到的都是基于MBR分區(qū)表的教程,經過一番摸索,終于順利達成目標。
本文整理自以下兩個網頁:
FreeBSD的官方wiki:http://wiki.freebsd.org/RootOnZFS/UFSBoot
以及網友zeissoctopus的貢獻:http://72891.cn/thread-3579216-1-1.html
我的硬盤分區(qū)情況如下:
/dev/sdc1——BIOS兼容分區(qū)
/dev/sdc2——Linux的/boot
/dev/sdc3——Linux的swap
/dev/sdc4——Linux的/
/dev/sdc5——FreeBSD的swap
/dev/sdc6——FreeBSD的/boot(UFS)
/dev/sdc7——FreeBSD的/(ZFS)
我所要做的就是把剩余的400GB空間劃分給FreeBSD,并且把/boot和swap也分出來,獨立于ZFS之外。
話不多說,步驟如下:
安裝介質準備
下載FreeBSD-9.0-RELEASE-amd64-memstick.img,把它寫入U盤。
U盤啟動FreeBSD 9.0
進入LiveCD模式
不要選install選LiveCD
輸入root 按 ENTER 進入Live系統(tǒng)(不用密碼)
找出硬盤的名稱,第一個AHCI硬盤通常是 /dev/ada0(FreeBSD-9.0內核內建AHCI支持)。劃分出12GB空間作為swap,注意,如果是物理扇區(qū)為4KB的高級格式硬盤,要加入-a 4K參數以保證扇區(qū)對齊。- gpart add -s 12G -t freebsd-swap ada2
復制代碼 給FreeBSD分出一個分區(qū)用于掛載/boot,注意,如果是物理扇區(qū)為4KB的高級格式硬盤,要加入-a 4K參數以保證扇區(qū)對齊。- gpart add -s 1G -t freebsd-ufs ada2
復制代碼 剩下的容量都給ZFS,注意,如果是物理扇區(qū)為4KB的高級格式硬盤,要加入-a 4K參數以保證扇區(qū)對齊。- gpart add -t freebsd-zfs ada2
復制代碼 把FreeBSD gpt的boot loader寫入第一分區(qū)。(如果是我這樣的Linux+FreeBSD,并且用Linux的Grub2引導的情況,這步不需要)- gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada2
復制代碼 在ZFS分區(qū)中,創(chuàng)建Single Pool模式的ZFS,把它命令為tank。- zpool create tank /dev/ada2p7
- zpool set bootfs=tank tank
- zfs set checksum=fletcher4 tank
復制代碼 用UFS文件系統(tǒng)格式化以后要用做/boot的分區(qū)。使用zfs create命令,創(chuàng)建系統(tǒng)目錄結構。- zfs set mountpoint=/mnt tank
- zfs create tank/usr
- zfs create tank/usr/home
- zfs create tank/var
- zfs create -o compression=on -o exec=on -o setuid=off tank/tmp
- zfs create -o compression=lzjb -o setuid=off tank/usr/ports
- zfs create -o compression=off -o exec=off -o setuid=off tank/usr/ports/distfiles
- zfs create -o compression=off -o exec=off -o setuid=off tank/usr/ports/packages
- zfs create -o compression=lzjb -o exec=off -o setuid=off tank/usr/src
- zfs create -o compression=lzjb -o exec=off -o setuid=off tank/var/crash
- zfs create -o exec=off -o setuid=off tank/var/db
- zfs create -o compression=lzjb -o exec=on -o setuid=off tank/var/db/pkg
- zfs create -o exec=off -o setuid=off tank/var/empty
- zfs create -o compression=lzjb -o exec=off -o setuid=off tank/var/log
- zfs create -o compression=gzip -o exec=off -o setuid=off tank/var/mail
- zfs create -o exec=off -o setuid=off tank/var/run
- zfs create -o compression=lzjb -o exec=on -o setuid=off tank/var/tmp
復制代碼 使用zpool export和zpool import把剛才規(guī)劃的ZFS掛載到/mnt,以便下一步安裝系統(tǒng)。- zpool export tank
- zpool import -o cachefile=/tmp/zpool.cache tank
復制代碼 現(xiàn)在,你所規(guī)劃的ZFS已掛載到 /mnt,接著執(zhí)行以下命令- chmod 1777 /mnt/tmp
- chmod 1777 /mnt/var/tmp
復制代碼 把剛才創(chuàng)建的UFS分區(qū)掛載到/mnt/bootdir- mount /dev/ada2p6 /mnt/bootdir
復制代碼 正式把FreeBSD 9.0安裝進/mnt 中的ZFS,采用sh作為shell- sh
- cd /usr/freebsd-dist
- export DESTDIR=/mnt
- for file in base.txz lib32.txz kernel.txz doc.txz games.txz ports.txz src.txz; \ do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
復制代碼 這樣一來,F(xiàn)reeBSD的基本系統(tǒng)就安裝進/mnt中了,以下一步必需要做,否則你重啟電腦會失敗,把zpool.cache拷貝到指定位置。- cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
復制代碼 最后,為新系統(tǒng)編寫相關的/etc/rc.conf /etc/fstab /boot/loader.conf,指示新系統(tǒng)由ZFS啟動。注意,未重新啟動之前,有關文件是放在/mnt下。
編寫 rc.conf- echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
復制代碼 編寫 loader.conf- echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
- echo 'vfs.root.mountfrom="zfs:tank"' >> /mnt/boot/loader.conf
復制代碼 編寫fstab- cat << EOF > /zroot/etc/fstab
- #Device Mountpoint FStype Options Dump Pass#
- /dev/ad2p6 /bootdir ufs rw 0 0
- /dev/ad2p5 none swap sw 0 0
- EOF
復制代碼 進入/mnt,把boot整個文件夾移動到bootdir下面,并且把原來的boot鏈接到bootdir- mv boot bootdir/
- ln -s bootdir/boot /mnt/boot
- chflags -h sunlink /mnt/boot
復制代碼 接著把UFS分區(qū)卸載掉。然后,把ZFS的掛載點指定為/。- zfs set readonly=on tank/var/empty
- zfs unmount -a
- zfs set mountpoint=legacy tank
- zfs set mountpoint=/tmp tank/tmp
- zfs set mountpoint=/usr tank/usr
- zfs set mountpoint=/var tank/var
復制代碼 然后進行重啟,設置下Grub2,添加FreeBSD的啟動項。- menuentry "FreeBSD" {
- insmod part_gpt
- insmod ufs2
- set root=(hd2,6)
- kfreebsd /boot/loader
- }
復制代碼 之后就可以順利進入新裝好的FreeBSD-9.0 based on UFS+ZFS了,當然,為了方便起見,可以把/usr/home連接到/。除此以外,記得設置root密碼和時區(qū)。這樣,你的基于GPT的UFS+ZFS FreeBSD就全部安裝完成了。
2.png (257.71 KB, 下載次數: 127)
下載附件
2012-07-30 12:47 上傳
|
評分
-
查看全部評分
|