ZFS on Linux: Difference between revisions
From Lolly's Wiki
Jump to navigationJump to search
No edit summary |
No edit summary |
||
Line 22: | Line 22: | ||
</source> | </source> | ||
==Setup Ubuntu 16.04 with ZFS root== | |||
[[https://github.com/zfsonlinux/zfs/wiki/Ubuntu-16.04-Root-on-ZFS Ubuntu-16.04-Root-on-ZFS]] | |||
<source lang=bash> | |||
sudo -i | |||
ifconfig ens160 <IP> netmask 255.255.255.0 | |||
route add default gw <defaultrouter> | |||
echo "nameserver <nameserver>" >> /etc/resolv.conf | |||
echo 'Acquire::http::Proxy "http://<user>:<pass>@<proxyhost>:<proxyport>";' >> /etc/apt/apt.conf | |||
apt-add-repository universe | |||
apt update | |||
apt --yes install openssh-server | |||
passwd ubuntu | |||
Reconnect via ssh | |||
apt install --yes debootstrap gdisk zfs-initramfs | |||
sgdisk -g -a1 -n2:34:2047 -t2:EF02 /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4 | |||
sgdisk -n9:-8M:0 -t9:BF07 /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4 | |||
sgdisk -n1:0:0 -t1:BF01 /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4 | |||
zpool create -f -o ashift=12 \ | |||
-O atime=off \ | |||
-O canmount=off \ | |||
-O compression=lz4 \ | |||
-O normalization=formD \ | |||
-O mountpoint=/ \ | |||
-R /mnt \ | |||
rpool /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4-part1 | |||
zfs create -o canmount=off -o mountpoint=none rpool/ROOT | |||
zfs create -o canmount=noauto -o mountpoint=/ rpool/ROOT/ubuntu | |||
zfs mount rpool/ROOT/ubuntu | |||
zfs create -o setuid=off rpool/home | |||
zfs create -o mountpoint=/root rpool/home/root | |||
zfs create -o canmount=off -o setuid=off -o exec=off rpool/var | |||
zfs create -o com.sun:auto-snapshot=false rpool/var/cache | |||
zfs create rpool/var/log | |||
zfs create rpool/var/spool | |||
zfs create -o com.sun:auto-snapshot=false -o exec=on rpool/var/tmp | |||
zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \ | |||
-o logbias=throughput -o sync=always \ | |||
-o primarycache=metadata -o secondarycache=none \ | |||
-o com.sun:auto-snapshot=false rpool/swap | |||
cp -p {,/mnt}/etc/apt/apt.conf | |||
export http_proxy=$(awk '/Acquire::http::Proxy/{gsub(/\"/,"");gsub(/;$/,"");print $2}' /mnt/etc/apt/apt.conf) | |||
echo -n xenial{,-security,-updates} | \ | |||
xargs -n 1 -d ' ' -I{} echo "deb http://archive.ubuntu.com/ubuntu {} main universe" > /mnt/etc/apt/sources.list | |||
chmod 1777 /mnt/var/tmp | |||
debootstrap xenial /mnt | |||
zfs set devices=off rpool | |||
HOSTNAME=Template-VM | |||
echo ${HOSTNAME} > /mnt/etc/hostname | |||
printf "127.0.1.1\t%s\n" "${HOSTNAME}" >> /mnt/etc/hosts | |||
INTERFACE=$(ip a s scope global | awk 'NR==1{gsub(/:$/,"",$2);print $2;}') | |||
printf "auto %s\niface %s inet dhcp\n" "${INTERFACE}" "${INTERFACE}" > /mnt/etc/network/interfaces.d/${INTERFACE} | |||
mount --rbind /dev /mnt/dev | |||
mount --rbind /proc /mnt/proc | |||
mount --rbind /sys /mnt/sys | |||
cp -p {,/mnt}/etc/apt/apt.conf | |||
echo -n xenial{,-security,-updates} | \ | |||
xargs -n 1 -d ' ' -I{} echo "deb http://archive.ubuntu.com/ubuntu {} main universe" > /mnt/etc/apt/sources.list | |||
chroot /mnt /bin/bash --login | |||
locale-gen en_US.UTF-8 | |||
echo 'LANG="en_US.UTF-8"' > /etc/default/locale | |||
LANG="en_US.UTF-8" | |||
dpkg-reconfigure tzdata | |||
ln -s /proc/self/mounts /etc/mtab | |||
apt update | |||
apt install --yes ubuntu-minimal | |||
apt install --yes --no-install-recommends linux-image-generic | |||
apt install --yes zfs-initramfs | |||
apt install --yes openssh-server | |||
apt install --yes grub-pc | |||
addgroup --system lpadmin | |||
addgroup --system sambashare | |||
passwd | |||
grub-probe / | |||
update-initramfs -c -k all | |||
vi /etc/default/grub | |||
Comment out: GRUB_HIDDEN_TIMEOUT=0 | |||
Remove quiet and splash from: GRUB_CMDLINE_LINUX_DEFAULT | |||
Uncomment: GRUB_TERMINAL=console | |||
update-grub | |||
grub-install /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4 | |||
zfs snapshot rpool/ROOT/ubuntu@install | |||
exit | |||
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {} | |||
zpool export rpool | |||
reboot | |||
apt install --yes cryptsetup | |||
echo cryptswap1 /dev/zvol/rpool/swap /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=256 >> /etc/crypttab | |||
systemctl daemon-reload | |||
systemctl start systemd-cryptsetup@cryptswap1.service | |||
echo /dev/mapper/cryptswap1 none swap defaults 0 0 >> /etc/fstab | |||
swapon -av | |||
</source> | |||
==Links== | ==Links== | ||
* [[https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-install-Ubuntu-16.04-to-a-Whole-Disk-Native-ZFS-Root-Filesystem-using-Ubiquity-GUI-installer HOWTO install Ubuntu 16.04 to a Whole Disk Native ZFS Root Filesystem using Ubiquity GUI installer]] | * [[https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-install-Ubuntu-16.04-to-a-Whole-Disk-Native-ZFS-Root-Filesystem-using-Ubiquity-GUI-installer HOWTO install Ubuntu 16.04 to a Whole Disk Native ZFS Root Filesystem using Ubiquity GUI installer]] | ||
* [[https://github.com/zfsonlinux/zfs/wiki/Ubuntu-16.04-Root-on-ZFS Ubuntu 16.04 Root on ZFS]] | * [[https://github.com/zfsonlinux/zfs/wiki/Ubuntu-16.04-Root-on-ZFS Ubuntu 16.04 Root on ZFS]] |
Revision as of 10:53, 10 November 2016
Grub
Create /etc/udev/rules.d/99-local-grub.rules with this content:
# Create by-id links in /dev as well for zfs vdev. Needed by grub
# Add links for zfs_member only
KERNEL=="sd*[0-9]", IMPORT{parent}=="ID_*", ENV{ID_FS_TYPE}=="zfs_member", SYMLINK+="$env{ID_BUS}-$env{ID_SERIAL}-part%n"
Virtualbox on ZVols
If you use ZVols as rawvmdk-device in VirtualBox as normal user (vmuser in this example) create /etc/udev/rules.d/99-local-zvol.rules with this content:
KERNEL=="zd*" SUBSYSTEM=="block" ACTION=="add|change" PROGRAM="/lib/udev/zvol_id /dev/%k" RESULT=="rpool/VM/*" OWNER="vmuser"
vmuser@virtualbox-server:~$ VBoxManage internalcommands createrawvmdk -filename /var/data/VMs/dev/Solaris10.vmdk -rawdisk /dev/zvol/rpool/VM/Solaris10
Setup Ubuntu 16.04 with ZFS root
sudo -i
ifconfig ens160 <IP> netmask 255.255.255.0
route add default gw <defaultrouter>
echo "nameserver <nameserver>" >> /etc/resolv.conf
echo 'Acquire::http::Proxy "http://<user>:<pass>@<proxyhost>:<proxyport>";' >> /etc/apt/apt.conf
apt-add-repository universe
apt update
apt --yes install openssh-server
passwd ubuntu
Reconnect via ssh
apt install --yes debootstrap gdisk zfs-initramfs
sgdisk -g -a1 -n2:34:2047 -t2:EF02 /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4
sgdisk -n9:-8M:0 -t9:BF07 /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4
sgdisk -n1:0:0 -t1:BF01 /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4
zpool create -f -o ashift=12 \
-O atime=off \
-O canmount=off \
-O compression=lz4 \
-O normalization=formD \
-O mountpoint=/ \
-R /mnt \
rpool /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4-part1
zfs create -o canmount=off -o mountpoint=none rpool/ROOT
zfs create -o canmount=noauto -o mountpoint=/ rpool/ROOT/ubuntu
zfs mount rpool/ROOT/ubuntu
zfs create -o setuid=off rpool/home
zfs create -o mountpoint=/root rpool/home/root
zfs create -o canmount=off -o setuid=off -o exec=off rpool/var
zfs create -o com.sun:auto-snapshot=false rpool/var/cache
zfs create rpool/var/log
zfs create rpool/var/spool
zfs create -o com.sun:auto-snapshot=false -o exec=on rpool/var/tmp
zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \
-o logbias=throughput -o sync=always \
-o primarycache=metadata -o secondarycache=none \
-o com.sun:auto-snapshot=false rpool/swap
cp -p {,/mnt}/etc/apt/apt.conf
export http_proxy=$(awk '/Acquire::http::Proxy/{gsub(/\"/,"");gsub(/;$/,"");print $2}' /mnt/etc/apt/apt.conf)
echo -n xenial{,-security,-updates} | \
xargs -n 1 -d ' ' -I{} echo "deb http://archive.ubuntu.com/ubuntu {} main universe" > /mnt/etc/apt/sources.list
chmod 1777 /mnt/var/tmp
debootstrap xenial /mnt
zfs set devices=off rpool
HOSTNAME=Template-VM
echo ${HOSTNAME} > /mnt/etc/hostname
printf "127.0.1.1\t%s\n" "${HOSTNAME}" >> /mnt/etc/hosts
INTERFACE=$(ip a s scope global | awk 'NR==1{gsub(/:$/,"",$2);print $2;}')
printf "auto %s\niface %s inet dhcp\n" "${INTERFACE}" "${INTERFACE}" > /mnt/etc/network/interfaces.d/${INTERFACE}
mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
cp -p {,/mnt}/etc/apt/apt.conf
echo -n xenial{,-security,-updates} | \
xargs -n 1 -d ' ' -I{} echo "deb http://archive.ubuntu.com/ubuntu {} main universe" > /mnt/etc/apt/sources.list
chroot /mnt /bin/bash --login
locale-gen en_US.UTF-8
echo 'LANG="en_US.UTF-8"' > /etc/default/locale
LANG="en_US.UTF-8"
dpkg-reconfigure tzdata
ln -s /proc/self/mounts /etc/mtab
apt update
apt install --yes ubuntu-minimal
apt install --yes --no-install-recommends linux-image-generic
apt install --yes zfs-initramfs
apt install --yes openssh-server
apt install --yes grub-pc
addgroup --system lpadmin
addgroup --system sambashare
passwd
grub-probe /
update-initramfs -c -k all
vi /etc/default/grub
Comment out: GRUB_HIDDEN_TIMEOUT=0
Remove quiet and splash from: GRUB_CMDLINE_LINUX_DEFAULT
Uncomment: GRUB_TERMINAL=console
update-grub
grub-install /dev/disk/by-id/scsi-36000c2932cdb62febff0b5ac93786dd4
zfs snapshot rpool/ROOT/ubuntu@install
exit
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {}
zpool export rpool
reboot
apt install --yes cryptsetup
echo cryptswap1 /dev/zvol/rpool/swap /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=256 >> /etc/crypttab
systemctl daemon-reload
systemctl start systemd-cryptsetup@cryptswap1.service
echo /dev/mapper/cryptswap1 none swap defaults 0 0 >> /etc/fstab
swapon -av