#!/bin/bash #https://www.tomica.net/blog/2019/02/moving-ubuntu-to-root-on-zfs/ #https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html#ubuntu-installer sudo su setxkbmap de apt-get update apt-get install --yes zfsutils-linux debootstrap gdisk zfs-initramfs systemctl stop zed blkdiscard /dev/sda blkdiscard /dev/sdb blkdiscard /dev/sdc sgdisk --zap-all /dev/sda sgdisk --zap-all /dev/sdb sgdisk --zap-all /dev/sdc #boot loader sgdisk -n1:1M:+512M -t1:EF00 /dev/sda sgdisk -n1:1M:+512M -t1:EF00 /dev/sdb sgdisk -n1:1M:+512M -t1:EF00 /dev/sdc #boot pool sgdisk -n2:0:+2G -t2:BE00 /dev/sda sgdisk -n2:0:+2G -t2:BE00 /dev/sdb sgdisk -n2:0:+2G -t2:BE00 /dev/sdc #swap sgdisk -n3:0:+6G -t3:8200 /dev/sda sgdisk -n3:0:+6G -t3:8200 /dev/sdb sgdisk -n3:0:+6G -t3:8200 /dev/sdc #root sgdisk -n4:0:0 -t4:BF00 /dev/sda sgdisk -n4:0:0 -t4:BF00 /dev/sdb sgdisk -n4:0:0 -t4:BF00 /dev/sdc zpool create \ -o cachefile=/etc/zfs/zpool.cache \ -o ashift=12 -o autotrim=on -d \ -o feature@async_destroy=enabled \ -o feature@bookmarks=enabled \ -o feature@embedded_data=enabled \ -o feature@empty_bpobj=enabled \ -o feature@enabled_txg=enabled \ -o feature@extensible_dataset=enabled \ -o feature@filesystem_limits=enabled \ -o feature@hole_birth=enabled \ -o feature@large_blocks=enabled \ -o feature@lz4_compress=enabled \ -o feature@spacemap_histogram=enabled \ -O acltype=posixacl -O canmount=off -O compression=lz4 \ -O devices=off -O normalization=formD -O relatime=on -O xattr=sa \ -O mountpoint=/boot -R /mnt -f bpool \ raidz /dev/sda2 /dev/sdb2 /dev/sdc2 zpool create \ -o ashift=12 -o autotrim=on \ -O acltype=posixacl -O canmount=off -O compression=lz4 \ -O dnodesize=auto -O normalization=formD -O relatime=on \ -O xattr=sa -O mountpoint=/ -R /mnt -f rpool \ raidz /dev/sda4 /dev/sdb4 /dev/sdc4 zfs create -o canmount=off -o mountpoint=none rpool/ROOT zfs create -o canmount=off -o mountpoint=none bpool/BOOT UUID=$(dd if=/dev/urandom bs=1 count=100 2>/dev/null | tr -dc 'a-z0-9' | cut -c-6) zfs create -o mountpoint=/ \ -o com.ubuntu.zsys:bootfs=yes \ -o com.ubuntu.zsys:last-used=$(date +%s) rpool/ROOT/ubuntu_$UUID zfs create -o mountpoint=/boot bpool/BOOT/ubuntu_$UUID zfs create -o com.ubuntu.zsys:bootfs=no \ rpool/ROOT/ubuntu_$UUID/srv zfs create -o com.ubuntu.zsys:bootfs=no -o canmount=off \ rpool/ROOT/ubuntu_$UUID/usr zfs create rpool/ROOT/ubuntu_$UUID/usr/local zfs create -o com.ubuntu.zsys:bootfs=no -o canmount=off \ rpool/ROOT/ubuntu_$UUID/var zfs create rpool/ROOT/ubuntu_$UUID/var/games zfs create rpool/ROOT/ubuntu_$UUID/var/lib zfs create rpool/ROOT/ubuntu_$UUID/var/lib/AccountsService zfs create rpool/ROOT/ubuntu_$UUID/var/lib/apt zfs create rpool/ROOT/ubuntu_$UUID/var/lib/dpkg zfs create rpool/ROOT/ubuntu_$UUID/var/lib/NetworkManager zfs create rpool/ROOT/ubuntu_$UUID/var/log zfs create rpool/ROOT/ubuntu_$UUID/var/mail zfs create rpool/ROOT/ubuntu_$UUID/var/snap zfs create rpool/ROOT/ubuntu_$UUID/var/spool zfs create rpool/ROOT/ubuntu_$UUID/var/www zfs create -o canmount=off -o mountpoint=/ \ rpool/USERDATA zfs create -o com.ubuntu.zsys:bootfs-datasets=rpool/ROOT/ubuntu_$UUID \ -o canmount=on -o mountpoint=/root \ rpool/USERDATA/root_$UUID chmod 700 /mnt/root zfs create -o com.ubuntu.zsys:bootfs=no bpool/grub mkdir /mnt/run mount -t tmpfs tmpfs /mnt/run mkdir /mnt/run/lock zfs create -o com.ubuntu.zsys:bootfs=no \ rpool/ROOT/ubuntu_$UUID/tmp chmod 1777 /mnt/tmp debootstrap focal /mnt mkdir /mnt/etc/zfs cp /etc/zfs/zpool.cache /mnt/etc/zfs/ echo fileserver > /mnt/etc/hostname cat >> /mnt/etc/hosts << EOF 127.0.1.1 fileserver localhost EOF cat >> /mnt/etc/netplan/01-netcfg.yaml << EOF network: version: 2 ethernets: enp1s0: dhcp4: true EOF cat > /mnt/etc/apt/sources.list << EOF deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse EOF mount --rbind /dev /mnt/dev mount --rbind /proc /mnt/proc mount --rbind /sys /mnt/sys chroot /mnt /usr/bin/env UUID=$UUID bash --login apt-get update dpkg-reconfigure locales tzdata keyboard-configuration console-setup apt-get install --yes nano vim dosfstools mdadm gdisk zfsutils-linux mkdosfs -F 32 -s 1 -n EFI /dev/sda1 mkdosfs -F 32 -s 1 -n EFI /dev/sdb1 mkdosfs -F 32 -s 1 -n EFI /dev/sdc1 mkdir /boot/efi1 mkdir /boot/efi2 mkdir /boot/efi3 echo /dev/disk/by-uuid/$(blkid -s UUID -o value /dev/sda1) \ /boot/efi1 vfat defaults 0 0 >> /etc/fstab echo /dev/disk/by-uuid/$(blkid -s UUID -o value /dev/sdb1) \ /boot/efi2 vfat defaults 0 0 >> /etc/fstab echo /dev/disk/by-uuid/$(blkid -s UUID -o value /dev/sdc1) \ /boot/efi3 vfat defaults 0 0 >> /etc/fstab mount /boot/efi1 mount /boot/efi2 mount /boot/efi3 mkdir /boot/efi1/grub mkdir /boot/efi2/grub mkdir /boot/efi3/grub mkdir /boot/grub1 mkdir /boot/grub2 mkdir /boot/grub3 echo /boot/efi1/grub /boot/grub1 none defaults,bind 0 0 >> /etc/fstab echo /boot/efi2/grub /boot/grub2 none defaults,bind 0 0 >> /etc/fstab echo /boot/efi3/grub /boot/grub3 none defaults,bind 0 0 >> /etc/fstab mount /boot/grub1 mount /boot/grub2 mount /boot/grub3 apt install --yes \ grub-efi-amd64 grub-efi-amd64-signed linux-image-generic \ shim-signed zfs-initramfs zsys apt-get remove --yes --purge os-prober sudo passwd mdadm --create /dev/md0 --metadata=1.2 --level=mirror \ --raid-devices=3 /dev/sda3 /dev/sdb3 /dev/sdc3 mkswap -f /dev/md0 echo /dev/disk/by-uuid/$(blkid -s UUID -o value /dev/md0) \ none swap discard 0 0 >> /etc/fstab cp /usr/share/systemd/tmp.mount /etc/systemd/system/ systemctl enable tmp.mount addgroup --system lpadmin addgroup --system lxd addgroup --system sambashare grub-probe /boot update-initramfs -c -k all cat > /etc/default/grub << EOF GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_RECORDFAIL_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="init_on_alloc=0" GRUB_CMDLINE_LINUX="" GRUB_TERMINAL=console EOF update-grub grub-install --target=x86_64-efi --efi-directory=/boot/efi1 \ --bootloader-id=ubuntu --recheck --no-floppy grub-install --target=x86_64-efi --efi-directory=/boot/efi2 \ --bootloader-id=ubuntu --recheck --no-floppy grub-install --target=x86_64-efi --efi-directory=/boot/efi3 \ --bootloader-id=ubuntu --recheck --no-floppy systemctl mask grub-initrd-fallback.service mkdir /etc/zfs/zfs-list.cache touch /etc/zfs/zfs-list.cache/bpool touch /etc/zfs/zfs-list.cache/rpool ln -s /usr/lib/zfs-linux/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d zed -F & cat /etc/zfs/zfs-list.cache/bpool cat /etc/zfs/zfs-list.cache/rpool fg #Press Ctrl-C. sed -Ei "s|/mnt/?|/|" /etc/zfs/zfs-list.cache/* apt install --yes openssh-server mlocate nano /etc/ssh/sshd_config #PermitRootLogin yes exit mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | \ xargs -i{} umount -lf {} zpool export -a reboot dpkg-reconfigure grub-efi-amd64 UUID=$(dd if=/dev/urandom bs=1 count=100 2>/dev/null | tr -dc 'a-z0-9' | cut -c-6) ROOT_DS=$(zfs list -o name | awk '/ROOT\/ubuntu_/{print $1;exit}') zfs create -o com.ubuntu.zsys:bootfs-datasets=$ROOT_DS \ -o canmount=on -o mountpoint=/home/serveradmin \ rpool/USERDATA/serveradmin_$UUID adduser serveradmin cp -a /etc/skel/. /home/serveradmin chown -R serveradmin:serveradmin /home/serveradmin chmod -R o-rwx /home/serveradmin usermod -a -G adm,cdrom,dip,lpadmin,lxd,plugdev,sambashare serveradmin apt-get autoremove --purge sudo snapd for file in /etc/logrotate.d/* ; do if grep -Eq "(^|[^#y])compress" "$file" ; then sed -i -r "s/(^|[^#y])(compress)/\1#\2/" "$file" fi done nano /etc/ssh/sshd_config #PermitRootLogin no systemctl reload sshd #allow reboot/halt for all users. #chmod u+s /usr/sbin/reboot #chmod u+s /usr/sbin/halt ############################################################################################## ####################################################### ####################terminal server#################### ####################################################### apt-get update apt install mate-core mate-desktop-environment mate-notification-daemon apt-get install x2goserver x2goserver-xsession apt-get install mate-tweak #disable composit #or install apt-get install ubuntu-mate-core ####################################################### ##################zfs storage + iscsi################## ####################################################### ls /dev/sd*|sort sgdisk --zap-all /dev/sdX sgdisk --zap-all /dev/sdY sgdisk --zap-all /dev/sdZ #already created on install zpool add rpool raidz /dev/sdX /dev/sdY /dev/sdZ zpool status apt-get install tgt -y zfs create -s -V 30G rpool/vol1 zfs set dedup=verify rpool/vol1 cat >> /etc/tgt/conf.d/target01.conf << EOF backing-store /dev/zvol/rpool/vol1 EOF systemctl reload tgt #extend disk zfs set volsize=20G rpool/vol1 systemctl restart tgt get infos zfs get all rpool/vol1 zfs list rpool/vol1 zdb -b rpool zfs get compressratio,refcompressratio zpool status ####################################################### #####################recover disks##################### ####################################################### zpool import -a zpool status ls /dev/sd*|sort sgdisk -n1:1M:+512M -t1:EF00 /dev/sdc sgdisk -n2:0:+2G -t2:BE00 /dev/sdc sgdisk -n3:0:+6G -t3:8200 /dev/sdc sgdisk -n4:0:0 -t4:BF00 /dev/sdc zpool status #old ID (status) #/dev/sdc* new disk zpool replace bpool 3362238763736904232 /dev/sdc2 zpool replace rpool 4417555474297722148 /dev/sdc4 cat /proc/mdstat mdadm --stop /dev/md0 rm /etc/mdadm/mdadm.conf mdadm --assemble --scan --verbose mdadm --manage /dev/md127 --add /dev/sdc3 #until raid recovery finish cat /proc/mdstat #until raid recovery finish mdadm --stop /dev/md127 mdadm --assemble --update=name --name=md0 /dev/md0 mkdosfs -F 32 -s 1 -n EFI /dev/sdc1 blkid -s UUID -o value /dev/sdc1 nano /etc/fstab mount /boot/efi3 update-initramfs -c -k all update-grub grub-install --target=x86_64-efi --efi-directory=/boot/efi1 \ --bootloader-id=ubuntu --recheck --no-floppy dpkg-reconfigure grub-efi-amd64