<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>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 :</div><div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>#!/bin/bash</div><div><br></div><div>check_zpool()</div><div>{</div><div>    zfs_value=`/sbin/zpool list|grep -ic "zfs_bigvol"`</div><div>}</div><div><br></div><div>check_zpool</div><div>if [ $zfs_value -eq 0 ];then</div><div>    ## Create a zfs zpool raid0 for every disks locally except /dev/sda</div><div>    /sbin/modprobe zfs</div><div>    ls -l /dev/disk/by-id/|egrep -v "sr|sda|part" |awk '/scsi/ {print $9}' > /tmp/disks-by-id.txt</div><div>    while read disk; do</div><div>        /sbin/parted -s /dev/disk/by-id/$disk mklabel GPT;</div><div>    done < /tmp/disks-by-id.txt</div><div>    all_disks_inline=`tr '\n' ' ' < /tmp/disks-by-id.txt`</div><div>    # sometimes it fails to create the zpool</div><div>    for i in {1..15}; do</div><div>        check_zpool</div><div>        if [ $zfs_value -eq 0 ];then</div><div>            /sbin/zpool create -o ashift=12 -m /media/bigvol zfs_bigvol $all_disks_inline</div><div>            sleep 5</div><div>            /sbin/zfs set compression=lz4 zfs_bigvol</div><div>            sleep 1</div><div>            /sbin/zfs mount -a</div><div>        else</div><div>            break</div><div>        fi</div><div>    done</div><div>    rm -f /tmp/disks-by-id.txt</div><div>fi</div></div></blockquote><div><br></div><div>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.<br></div></div><div><br></div><div>Another example using apt (this will create 3 zpool with 20 disks in each of zpool):</div><div><br></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-size:14px;line-height:19px;white-space:pre-wrap"><div>apt-get install zfsutils-linux parted</div><br><div>ls -l /dev/disk/by-id/|egrep -v <span style="color:rgb(206,145,120)">"sr|sda|part"</span> |awk <span style="color:rgb(206,145,120)">'/scsi/ {print $9}'</span> |head -20 > /root/pool1.txt</div><div>ls -l /dev/disk/by-id/|egrep -v <span style="color:rgb(206,145,120)">"sr|sda|part"</span> |awk <span style="color:rgb(206,145,120)">'/scsi/ {print $9}'</span> | awk <span style="color:rgb(206,145,120)">'NR>20&&NR<=40'</span> > pool2.txt</div><div>ls -l /dev/disk/by-id/|egrep -v <span style="color:rgb(206,145,120)">"sr|sda|part"</span> |awk <span style="color:rgb(206,145,120)">'/scsi/ {print $9}'</span> | awk <span style="color:rgb(206,145,120)">'NR>40&&NR<=60'</span> > pool3.txt</div><br><br><div>mkdir -p /export/pool{1,2,3}</div><div>pool1_disks=<span style="color:rgb(206,145,120)">`tr '\n' ' ' </span><<span style="color:rgb(206,145,120)"> pool1.txt`</span></div><div>pool2_disks=<span style="color:rgb(206,145,120)">`tr '\n' ' ' </span><<span style="color:rgb(206,145,120)"> pool2.txt`</span></div><div>pool3_disks=<span style="color:rgb(206,145,120)">`tr '\n' ' ' </span><<span style="color:rgb(206,145,120)"> pool3.txt`</span></div><div>apt-get install parted</div><div><span style="color:rgb(197,134,192)">while</span> <span style="color:rgb(220,220,170)">read</span> disk; <span style="color:rgb(197,134,192)">do</span> /sbin/parted -s /dev/disk/by-id/<span style="color:rgb(156,220,254)">$disk</span> mklabel GPT; <span style="color:rgb(197,134,192)">done</span> < pool1.txt</div><div><span style="color:rgb(197,134,192)">while</span> <span style="color:rgb(220,220,170)">read</span> disk; <span style="color:rgb(197,134,192)">do</span> /sbin/parted -s /dev/disk/by-id/<span style="color:rgb(156,220,254)">$disk</span> mklabel GPT; <span style="color:rgb(197,134,192)">done</span> < pool2.txt</div><div><span style="color:rgb(197,134,192)">while</span> <span style="color:rgb(220,220,170)">read</span> disk; <span style="color:rgb(197,134,192)">do</span> /sbin/parted -s /dev/disk/by-id/<span style="color:rgb(156,220,254)">$disk</span> mklabel GPT; <span style="color:rgb(197,134,192)">done</span> < pool3.txt</div><br><div>zpool create pool1 -o ashift=12 -m /export/pool1 raidz3 <span style="color:rgb(156,220,254)">$pool1_disks</span></div><div>zpool create pool2 -o ashift=12 -m /export/pool2 raidz3 <span style="color:rgb(156,220,254)">$pool2_disks</span></div><div>zpool create pool3 -o ashift=12 -m /export/pool3 raidz3 <span style="color:rgb(156,220,254)">$pool3_disks</span></div></div></div></div></blockquote><div dir="ltr"><div><br></div><div>4 kernel modules are necessary (generally, you will only see spl and zfs) : zfs.ko, spl.ko, znvpair.ko, zcommon.ko</div><div><br></div><div>If you need to build ZFS from source, you will need git (or download the tar.gz version with wget) :</div><div><br></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-size:14px;line-height:19px;white-space:pre-wrap"><div>apt-get install zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libssl-dev parted lsscsi wget ksh gdebi</div><div>apt-get install build-essential autoconf libtool gawk alien fakeroot linux-headers-<span style="color:rgb(206,145,120)">$(uname -r)</span></div><br><div>mkdir -p /opt/zfs-source</div><div><span style="color:rgb(220,220,170)">cd</span> <span style="color:rgb(156,220,254)">$_</span></div><div>git clone <a href="https://github.com/zfsonlinux/spl" target="_blank">https://github.com/zfsonlinux/spl</a></div><div>git clone <a href="https://github.com/zfsonlinux/zfs" target="_blank">https://github.com/zfsonlinux/zfs</a></div><br><div><span style="color:rgb(220,220,170)">cd</span> spl</div><div>git checkout master</div><div>sh autogen.sh</div><div>./configure</div><div>make -s -j<span style="color:rgb(206,145,120)">$(nproc)</span></div><div>make install</div><br><div><span style="color:rgb(220,220,170)">cd</span> ../zfs</div><div>git checkout master</div><div>sh autogen.sh</div><div>./configure</div><div>make -s -j<span style="color:rgb(206,145,120)">$(nproc)</span></div><div>make install</div><br><div><span style="color:rgb(220,220,170)">echo</span> <span style="color:rgb(206,145,120)">"/lib64"</span> > /etc/ld.so.conf.d/zfs.conf</div><div><span style="color:rgb(220,220,170)">echo</span> <span style="color:rgb(206,145,120)">"/usr/local/lib"</span> >> /etc/ld.so.conf.d/zfs.conf</div><div>ldconfig</div><div>updatedb<br></div><div>locate spl.ko |xargs -I{} ls -l {}</div><div><span style="color:rgb(106,153,85)"># overwritting old kernel modules with more recent ones</span></div><div>cp /opt/zfs-source/spl/module/spl/spl.ko /lib/modules/<span style="color:rgb(206,145,120)">$(uname -r)</span>/extra/spl/spl/spl.ko</div><div>cp /opt/zfs-source/spl/module/spl/spl.ko /lib/modules/<span style="color:rgb(206,145,120)">$(uname -r)</span>/kernel/zfs/spl/spl.ko</div><div>locate zfs.ko |xargs -I{} ls -l {}</div><div>cp /opt/zfs-source/zfs/module/zfs/zfs.ko /lib/modules/<span style="color:rgb(206,145,120)">$(uname -r)</span>/kernel/zfs/zfs/zfs.ko</div><div>locate znvpair.ko |xargs -I{} ls -l {}</div><div>cp /opt/zfs-source/zfs/module/nvpair/znvpair.ko /lib/modules/<span style="color:rgb(206,145,120)">$(uname -r)</span>/kernel/zfs/nvpair/znvpair.ko</div><div>locate zcommon.ko |xargs -I{} ls -l {}</div><div>cp /opt/zfs-source/zfs/module/zcommon/zcommon.ko /lib/modules/<span style="color:rgb(206,145,120)">$(uname -r)</span>/kernel/zfs/zcommon/zcommon.ko</div><br><div>modprobe spl</div><div>modprobe znvpair</div><div>modprobe zcommon</div><div>modprobe zfs</div></div></div></div></blockquote></div><br><div class="gmail_quote"><div>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`.</div><div dir="ltr"><br></div><div dir="ltr"><br></div><div>Kind regards,</div><div>Rémy</div><div dir="ltr"><br></div><div dir="ltr">Le ven. 5 oct. 2018 à 09:06, Steffen Grunewald <<a href="mailto:steffen.grunewald@aei.mpg.de" target="_blank">steffen.grunewald@aei.mpg.de</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Good morning,<br>
<br>
once again I have browsed multiple years of the list archive, without finding<br>
anything useful, but it's Firday and I may have gone blind over the past week.<br>
<br>
What I'm looking for is FAI installation details to set up a root filesystem<br>
on ZFS (two mirrored disks, possibly one spare) on a number of new machines.<br>
(I know that FAI isn't mandatory for this, but never underestimate the<br>
documentation effect of having the proper classes.)<br>
<br>
- Which additions to the nfsroot are required / recommended?<br>
- Which packages must be added to the machine package configuration?<br>
- Which hooks should I use to create the root filesystem?<br>
<br>
There must be recipes already existing - I'm perhaps just unable to find them<br>
(I have found the zfsonlinux wiki pages, but they don't know about FAI; and<br>
the only place where ZFS is mentioned on <a href="http://fai-project.org" rel="noreferrer" target="_blank">fai-project.org</a> is the roadmap.)<br>
<br>
Any pointer is appreciated.<br>
<br>
Thanks,<br>
 Steffen<br>
<br>
-- <br>
Steffen Grunewald, Cluster Administrator<br>
Max Planck Institute for Gravitational Physics (Albert Einstein Institute)<br>
Am Mühlenberg 1 * D-14476 Potsdam-Golm * Germany<br>
~~~<br>
Fon: +49-331-567 7274<br>
Mail: steffen.grunewald(at)<a href="http://aei.mpg.de" rel="noreferrer" target="_blank">aei.mpg.de</a><br>
~~~<br>
</blockquote></div></div>