ubuntu 16.04 直接用ZFS

參考頁

心得

  • 一個月前(從本文的建立時間開始算)第一次照參考頁裝,在grub遇到問題,忘記怎麼解決了。
  • 第二次 & 第三次 邊做邊筆記,順便調整成自己喜歡的樣式。
  • 第四次 額外加裝openssh-server,在遠端只從筆記 copy & paste,順利安裝完畢。

步驟

硬碟分割成 ZFS

  1. 使用64bit桌面版Live CD進行安裝在支援64bit電腦,因為能加裝必要套件,而且ZFS目前只能裝在64bit電腦上

  2. 光碟開機後,選 Try Ubuntu,開啟終端機(按Ctrl + Alt + t),切換成root

  3. 套件安裝

    1
    2
    3
    apt-add-repository universe
    apt update
    apt install debootstrap gdisk zfs
    • debootstrap:裝系統用
    • gdisk:分割硬碟用
    • zfs:管理zfs用
  4. 硬碟格式化

    • 用legacy(BIOS),不是UEFI開機,且不加密
    1
    2
    3
    sgdisk --zap-all /dev/sda
    sgdisk -a1 -n2:34:2047 -t2:EF02 /dev/sda
    sgdisk -n1:0:0 -t1:BF01 /dev/sda
  5. 建立pool

    1
    2
    3
    4
    5
    zpool create -o ashift=12 \
    -O atime=off -O canmount=off \
    -O compression=lz4 -O normalization=formD \
    -O mountpoint=/ -R /mnt \
    zfspool /dev/sda1
  6. 建立 root (/) 目錄

    1
    2
    zfs create -o canmount=noauto -o mountpoint=/ zfspool/root
    zfs mount zfspool/root
  7. 建立其它目錄

    1
    2
    3
    4
    5
    6
    7
    zfs create -o setuid=off zfspool/home
    zfs create -o mountpoint=/root zfspool/home/root
    zfs create -o canmount=off -o setuid=off -o exec=off zfspool/var
    zfs create -o com.sun:auto-snapshot=false zfspool/var/cache
    zfs create zfspool/var/log
    zfs create zfspool/var/spool
    zfs create -o com.sun:auto-snapshot=false -o exec=on zfspool/var/tmp

基本項目安裝

  1. 安裝基本系統

    1
    2
    3
    chmod 1777 /mnt/var/tmp
    debootstrap xenial /mnt
    zfs set devices=off zfspool
  2. 設定系統名

    1
    echo <hostname> > /mnt/etc/hostname
  3. 在 /mnt/etc/hosts增加

    • 因為dnsmasq這個服務的關係
    1
    127.0.1.1 <hostname>
  4. 設定網卡,查網卡名

    1
    ip addr show
  5. 增加 /mnt/etc/network/interfaces.d/網卡名

    • 要設定固定IP也可以在這時候設定
    1
    2
    auto 網卡名
    iface 網卡名 inet dhcp
  6. 設定apt

    • 編輯/mnt/etc/apt/sources.list
    1
    2
    3
    4
    5
    6
    7
    8
    deb http://free.nchc.org.tw/ubuntu xenial main universe
    deb-src http://free.nchc.org.tw/ubuntu xenial main universe
    deb http://free.nchc.org.tw/ubuntu xenial-security main universe
    deb-src http://free.nchc.org.tw/ubuntu xenial-security main universe
    deb http://free.nchc.org.tw/ubuntu xenial-updates main universe
    deb-src http://free.nchc.org.tw/ubuntu xenial-updates main universe

chroot & 進行其它設定

  1. 掛載環境 & chroot

    1
    2
    3
    4
    mount --rbind /dev /mnt/dev
    mount --rbind /proc /mnt/proc
    mount --rbind /sys /mnt/sys
    chroot /mnt /bin/bash --login
  2. 設定語系

    1
    2
    locale-gen en_US.UTF-8
    echo LANG=en_US.UTF-8 > /etc/default/locale
  3. 更新時區

    1
    dpkg-reconfigure tzdata
  4. 補上開機套件

    1
    2
    3
    4
    5
    6
    ln -s /proc/self/mounts /etc/mtab
    apt update
    apt install -y ubuntu-minimal
    apt install -y vim
    apt install -y --no-install-recommends linux-image-generic
    apt install -y zfs-initramfs
  5. 安裝 grub

    • 選 /dev/sda
    1
    apt install -y grub-pc
  6. 增加系統群組

    1
    2
    addgroup --system lpadmin
    addgroup --system sambashare
  7. 改root密碼

    1
    passwd
  8. 修正掛載參數

    1
    2
    zfs set mountpoint=legacy zfspool/var/log
    zfs set mountpoint=legacy zfspool/var/tmp
  9. 編輯 /etc/fstab 加入

    1
    2
    zfspool/var/log /var/log zfs defaults 0 0
    zfspool/var/tmp /var/tmp zfs defaults 0 0
  10. grub設定

    • 會得到zfs
    1
    grub-probe /
  11. 更新initrd檔案

    1
    update-initramfs -c -k all
  12. 編輯 /etc/default/grub

    • 註解 GRUB_HIDDEN_TIMEOUT=0
    • 取消註解 GRUB_TERMINAL=console
    • 移除選項GRUB_CMDLINE_LINUX_DEFAULT中的quiet splash
  13. 更新grub

    1
    2
    update-grub
    grub-install /dev/sda
  14. 建立安裝快照

    1
    zfs snapshot zfspool/root@install
  15. 離開chroot

    1
    exit
  16. umount 跟重開機進入系統

    • 光碟片也可以拿出來了
    1
    2
    3
    mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {}
    zpool export zfspool
    reboot

最後設定

  1. 建立swap

    1
    2
    3
    4
    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 zfspool/swap
    1
    2
    mkswap -f /dev/zvol/zfspool/swap
    echo /dev/zvol/zfspool/swap none swap defaults 0 0 >> /etc/fstab
    1
    swapon -av
  2. 更新 & 補上常用套件

    1
    2
    3
    apt update
    apt dist-upgrade -y
    apt install -y ubuntu-standard