Install ZFS root with FAI?
Robert Markula
robert at markula.org
Sun Nov 4 12:35:12 CET 2018
Hi Remy,
how do you ensure the ZFS kernel module is present on the Debian
NFSroot? Adding
PACKAGES install
zfs-dkms
zfsutils-linux
to /etc/fai/NFSROOT does not seem to build the ZFS kernel module.
Robert
Am 05.10.18 um 10:33 schrieb Rémy Dernat:
> Hi,
>
> I am not doing this, but I think it should not be to difficult. I have
> a similar script running as a post-install step; maybe you can use
> something like this as a script :
>
> #!/bin/bash
>
> check_zpool()
> {
> zfs_value=`/sbin/zpool list|grep -ic "zfs_bigvol"`
> }
>
> check_zpool
> if [ $zfs_value -eq 0 ];then
> ## Create a zfs zpool raid0 for every disks locally except
> /dev/sda
> /sbin/modprobe zfs
> ls -l /dev/disk/by-id/|egrep -v "sr|sda|part" |awk '/scsi/
> {print $9}' > /tmp/disks-by-id.txt
> while read disk; do
> /sbin/parted -s /dev/disk/by-id/$disk mklabel GPT;
> done < /tmp/disks-by-id.txt
> all_disks_inline=`tr '\n' ' ' < /tmp/disks-by-id.txt`
> # sometimes it fails to create the zpool
> for i in {1..15}; do
> check_zpool
> if [ $zfs_value -eq 0 ];then
> /sbin/zpool create -o ashift=12 -m /media/bigvol
> zfs_bigvol $all_disks_inline
> sleep 5
> /sbin/zfs set compression=lz4 zfs_bigvol
> sleep 1
> /sbin/zfs mount -a
> else
> break
> fi
> done
> rm -f /tmp/disks-by-id.txt
> fi
>
>
> This scripts creates a RAID0 volume using parted and disks id. Note
> that if you have many many disks, RAID0 is obvisouly not recommanded
> (perhaps you would switch to radiz3) and you may want to use ZFS with
> disks by path.
>
> Another example using apt (this will create 3 zpool with 20 disks in
> each of zpool):
>
> apt-get install zfsutils-linux parted
> ls -l /dev/disk/by-id/|egrep -v "sr|sda|part" |awk '/scsi/ {print
> $9}' |head -20 > /root/pool1.txt
> ls -l /dev/disk/by-id/|egrep -v "sr|sda|part" |awk '/scsi/ {print
> $9}' | awk 'NR>20&&NR<=40' > pool2.txt
> ls -l /dev/disk/by-id/|egrep -v "sr|sda|part" |awk '/scsi/ {print
> $9}' | awk 'NR>40&&NR<=60' > pool3.txt
> mkdir -p /export/pool{1,2,3}
> pool1_disks=`tr '\n' ' ' <pool1.txt`
> pool2_disks=`tr '\n' ' ' <pool2.txt`
> pool3_disks=`tr '\n' ' ' <pool3.txt`
> apt-get install parted
> while read disk; do /sbin/parted -s /dev/disk/by-id/$disk mklabel
> GPT; done < pool1.txt
> while read disk; do /sbin/parted -s /dev/disk/by-id/$disk mklabel
> GPT; done < pool2.txt
> while read disk; do /sbin/parted -s /dev/disk/by-id/$disk mklabel
> GPT; done < pool3.txt
> zpool create pool1 -o ashift=12 -m /export/pool1 raidz3 $pool1_disks
> zpool create pool2 -o ashift=12 -m /export/pool2 raidz3 $pool2_disks
> zpool create pool3 -o ashift=12 -m /export/pool3 raidz3 $pool3_disks
>
>
> 4 kernel modules are necessary (generally, you will only see spl and
> zfs) : zfs.ko, spl.ko, znvpair.ko, zcommon.ko
>
> If you need to build ZFS from source, you will need git (or download
> the tar.gz version with wget) :
>
> apt-get install zlib1g-dev uuid-dev libattr1-dev libblkid-dev
> libselinux-dev libudev-dev libssl-dev parted lsscsi wget ksh gdebi
> apt-get install build-essential autoconf libtool gawk alien
> fakeroot linux-headers-$(uname -r)
> mkdir -p /opt/zfs-source
> cd $_
> git clone https://github.com/zfsonlinux/spl
> git clone https://github.com/zfsonlinux/zfs
> cd spl
> git checkout master
> sh autogen.sh
> ./configure
> make -s -j$(nproc)
> make install
> cd ../zfs
> git checkout master
> sh autogen.sh
> ./configure
> make -s -j$(nproc)
> make install
> echo "/lib64" > /etc/ld.so.conf.d/zfs.conf
> echo "/usr/local/lib" >> /etc/ld.so.conf.d/zfs.conf
> ldconfig
> updatedb
> locate spl.ko |xargs -I{} ls -l {}
> # overwritting old kernel modules with more recent ones
> cp /opt/zfs-source/spl/module/spl/spl.ko /lib/modules/$(uname
> -r)/extra/spl/spl/spl.ko
> cp /opt/zfs-source/spl/module/spl/spl.ko /lib/modules/$(uname
> -r)/kernel/zfs/spl/spl.ko
> locate zfs.ko |xargs -I{} ls -l {}
> cp /opt/zfs-source/zfs/module/zfs/zfs.ko /lib/modules/$(uname
> -r)/kernel/zfs/zfs/zfs.ko
> locate znvpair.ko |xargs -I{} ls -l {}
> cp /opt/zfs-source/zfs/module/nvpair/znvpair.ko
> /lib/modules/$(uname -r)/kernel/zfs/nvpair/znvpair.ko
> locate zcommon.ko |xargs -I{} ls -l {}
> cp /opt/zfs-source/zfs/module/zcommon/zcommon.ko
> /lib/modules/$(uname -r)/kernel/zfs/zcommon/zcommon.ko
> modprobe spl
> modprobe znvpair
> modprobe zcommon
> modprobe zfs
>
>
> So you can imagine in the `package_config` a class with all the
> necessary packages and in `scripts` the same class which is running
> other commands. I don't think there is anything specific in FAI to use
> ZFS with the FAI `disk_config`.
>
>
> Kind regards,
> Rémy
>
> Le ven. 5 oct. 2018 à 09:06, Steffen Grunewald
> <steffen.grunewald at aei.mpg.de <mailto:steffen.grunewald at aei.mpg.de>> a
> écrit :
>
> Good morning,
>
> once again I have browsed multiple years of the list archive,
> without finding
> anything useful, but it's Firday and I may have gone blind over
> the past week.
>
> What I'm looking for is FAI installation details to set up a root
> filesystem
> on ZFS (two mirrored disks, possibly one spare) on a number of new
> machines.
> (I know that FAI isn't mandatory for this, but never underestimate the
> documentation effect of having the proper classes.)
>
> - Which additions to the nfsroot are required / recommended?
> - Which packages must be added to the machine package configuration?
> - Which hooks should I use to create the root filesystem?
>
> There must be recipes already existing - I'm perhaps just unable
> to find them
> (I have found the zfsonlinux wiki pages, but they don't know about
> FAI; and
> the only place where ZFS is mentioned on fai-project.org
> <http://fai-project.org> is the roadmap.)
>
> Any pointer is appreciated.
>
> Thanks,
> Steffen
>
> --
> Steffen Grunewald, Cluster Administrator
> Max Planck Institute for Gravitational Physics (Albert Einstein
> Institute)
> Am Mühlenberg 1 * D-14476 Potsdam-Golm * Germany
> ~~~
> Fon: +49-331-567 7274
> Mail: steffen.grunewald(at)aei.mpg.de <http://aei.mpg.de>
> ~~~
>
More information about the linux-fai
mailing list