XE 에 대한 팁은 아니지만 한번 올려봅니다.

ZFS 자체는 램이 많아야 좋다고 보여지는 것 같은데 램이 많은 환경에서 테스트 할 수는 없는 상황입니다.

우분투 16.04 LTS 발표와 함께 ZFS 가 언급되었는데 설치과정에서 ZFS 로 선택이 되지는 않습니다.

하지만 아래와 같이 하면 어렵지 않게 설치가 가능합니다.

 

필요한 준비물 : Ubuntu 16.04 LTS 라이브 CD, ISO Image, 4GB 메모리 이상권장한다고 합니다.

저는 가상 PC(Win10 Hyper-Visor, 코노하, Vultr VPS 호스팅, 하드디스크가 /dev/sda, /dev/vda 로 나오는 경우로만 테스트 해보았습니다.) 에 많은 반복 테스트를 통해 나름대로 삽질을 최소화 해본

내용을 적어봅니다. ZFS 에게 관심이 있으신분께 조금이라도 삽질을 덜어드리고자 합니다.

내용 수정후 이미지를 업데이트하지 않아서 이미지가 약간 다른 부분은 있습니다. 이미지는 적당히 참고만 해주세요.

 

제가 작성한 내용 : https://www.zzori.net/howto/771 (모든 내용을 다 가져왔으므로 클릭하실 필요는 없습니다.)

 

참고한 내용은

http://dotfiles.tnetconsulting.net/articles/2016/0327/ubuntu-zfs-native-root.html

https://github.com/zfsonlinux/zfs/wiki/Ubuntu-16.04-Root-on-ZFS

입니다.

 

Ubuntu 16.04 LTS 를 ZFS 로 부팅할 수 있도록 설치하는 과정입니다.

실제 PC, 서버, 가상 PC, VPS 호스팅업체(Custom ISO 지원가능한곳)의 서버에도 정상적으로 설치가 가능합니다.

 

준비파일 : 우분투(Ubuntu) 16.04 LTS Desktop ISO File

다운로드 : http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso

주의 : 하드디스크(스토리지)가 /dev/sda, /dev/vda 인 경우를 기준으로 자동선택하여 설치됩니다.
필요한 부분은 수정하셔야 합니다.

 

1. 설치할 PC에 위에서 다운로드 받은 iso 파일을 넣고 부팅을 시작합니다.

 

2. 다음 화면에서 "Try Ubuntu" 를 클릭합니다.

zfs-01.png

 

3. 우분투 라이브가 부팅되고 나서 아래 화면에서 "Ctrl+Alt+T" 를 누르거나 마우스 오른쪽 버튼을 클릭하여 "Open Terminal" 을 클릭합니다.

zfs-01.png

zfs-02.png

 

4. 터미널에서 "sudo apt-get install openssh-server" 를 실행합니다.

sudo apt-get install ssh -y

 

5. ubuntu 유저의 패스워드를 설정합니다. 현재의 패스워드는 그냥 엔터를 누르고 새로운 패스워드만 입력하면 됩니다.

passwd

zfs-03.png

 

6. 아래의 명령어를 실행하여 시스템의 IP 주소를 확인합니다.

ifconfig

zfs-04.png

 

7. 이제 자신이 사용하기에 편리한 ssh 클라이언트 프로그램을 통해 시스템에 ubuntu 유저로 로그인합니다.

zfs-05.png

 

8. 아래의 명령어를 실행하여 먼저 root 권한으로 진입합니다.

sudo -i

 

9. 쉘에서 아래의 명령어를 설치하여 zfs 네이티브 설치에 필요한 패키지들을 설치합니다.

apt-add-repository universe
apt-get update -y 
apt-get install -y zfsutils-linux debootstrap vim

 

10. 커널의 ZFS 모듈을 활성화 합니다.

modprobe zfs

 

11. 아래의 명령어를 실행하여 시스템의 하드가 vda, sda 등등인지 확인합니다. (첫번째 하드가 있다고 가정합니다.)
아래의 경우는 "/dev/sda" 임을 알 수 있습니다. $CHECK_SV 변수에 sda 인지 vda 인지 체크하여 할당합니다.

ls -al /dev/*da
CHECK_SV=`ls -al /dev/*da | head -n 1 | awk '{ print $10 }' | awk -F/ '{ print $3 }'`
echo "DISK : $CHECK_SV select"

zfs-08.png

 

12. 아래의 명령어를 실행합니다. 옵션에 대한 상세한 내용은 ㅠㅠ 잘 모릅니다. "zzori" 는 마음대로 변경하셔도 됩니다.

sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:Reserved -n2:-8M:0 -t2:ef02 -c2:GRUB -n1:0:0 -t1:bf01 -c1:ZFS /dev/${CHECK_SV}
zpool create -m none -o ashift=12 -O atime=off -O normalization=formD -O compression=lz4 -f zzori /dev/${CHECK_SV}1

zfs-09.png

zfs-10.png

 

13. zzori 에 루트파일 시스템을 생성합니다. 그리고 옵션으로 더 추가하였습니다. 안하셔도 됩니다.

zfs create -o mountpoint=/ zzori/root

zfs-11.png

 

14. 아래 처럼 명령어를 실행합니다.

zpool export zzori
zpool import -d /dev/disk/by-partuuid -R /mnt zzori

zfs-12.png

 

15. 아래의 명령어를 실행하여 우분투 시스템의 기본환경을 구성합니다. 시간이 오래 걸립니다.

debootstrap xenial /mnt

 

16. APT 환경을 복사하고 불필요한 cdrom 부분을 주석처리합니다. 네트워크 설정도 복사합니다.

cp {,/mnt}/etc/apt/sources.list
perl -p -i -e 's/deb cdrom:/#deb cdrom:/g' /mnt/etc/apt/sources.list
mkdir -p /mnt/etc/network
cp {,/mnt}/etc/network/interfaces
echo "auto eth0" >> /mnt/etc/network/interfaces
echo "iface eth0 inet dhcp" >> /mnt/etc/network/interfaces

 

17. 우분투가 설치될 하드를 "/" 로 마운트 합니다.

mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
chroot /mnt /bin/bash --login

 

18. 로케일을 en_US.UTF-8 로 하고 kernel, zfs, grub 등의 패키지들을 설치합니다. 상당히 긴 시간이 걸립니다.
마지막에 grub install 화면이 나오는데 선택하고 "ok"를 눌러도 실패합니다. "Yes" 로 그냥 무시하고 넘어갑니다.  그리고 추가적으로 ssh 로 root 유저로 로그인 가능하도록 변경합니다.

locale-gen en_US.UTF-8
​apt-get update -y && apt-get install -y \
ssh zfsutils-linux zfs-initramfs zfs-dkms zfs-zed linux-image-$(uname -r) linux-image-extra-$(uname -r) \
linux-headers-$(uname -r) grub2-common grub-pc acpi-support vim
perl -p -i -e 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config

 

19. /boot 아래에 zfs 관련 파일들이 있는지 확인합니다.

find /boot -iname '*zfs*'

zfs-13.png

 

20. root 유저의 패스워드를 설정하고 나옵니다.  추가적으로 grub 관련 설정을 합니다.

passwd # 패스워드 설정

ln -s /proc/mounts /etc/mtab

CHECK_SV=`ls -al /dev/*da | head -n 1 | awk '{ print $10 }' | awk -F/ '{ print $3 }'`
DISK1=`ls -al /dev/disk/by-partuuid | grep ${CHECK_SV}1 | awk '{ print $9 }'`
ln -s /dev/${CHECK_SV}1 /dev/${DISK1}

grub-probe /

perl -p -i -e 's/GRUB_HIDDEN_TIMEOUT=0/\#GRUB_HIDDEN_TIMEOUT=0/g' /etc/default/grub
perl -p -i -e 's/GRUB_CMDLINE_LINUX_DEFAULT/\#GRUB_CMDLINE_LINUX_DEFAULT/g' /etc/default/grub
perl -p -i -e 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=3/g' /etc/default/grub
perl -p -i -e 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="boot=zfs"\nGRUB_DISABLE_OS_PROBER=true/g' /etc/default/grub

update-initramfs -c -k all
update-grub
CHECK_SV=`ls -al /dev/*da | head -n 1 | awk '{ print $10 }' | awk -F/ '{ print $3 }'`
grub-install /dev/${CHECK_SV}

수정된 /etc/default/grub 파일은 아래와 같을 것입니다.

zfs-21.png

 

21. 추가적으로 네트워크 인터페이스가 ens3 인 경우 아래의 스크립트를 실행하여 eth0 으로 변경합니다.

# ens3 -> eth0 Script
ENSCHK=`ifconfig -a | grep ens3 | wc -l`
if [[ "${ENSCHK}" == 1 ]];
then
perl -p -i -e 's/ ens3/ eth0/g' /etc/network/interfaces
MACAddr=`ifconfig | grep ens3 | awk '{ print $5}'`
echo "SUBSYSTEM==\"net\", ACTION==\"add\", ATTR{address}==\"${MACAddr}\", NAME=\"eth0\"" > /etc/udev/rules.d/10-network.rules
perl -p -i -e 's/GRUB_CMDLINE_LINUX_DEFAULT=\"\"/GRUB_CMDLINE_LINUX_DEFAULT=\"net.ifnames=0\"/g' /etc/default/grub
perl -p -i -e 's/\#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/GRUB_CMDLINE_LINUX_DEFAULT=\"net.ifnames=0\"/g' /etc/default/grub
update-grub
fi

 

21. 시스템을 종료하거나 재시작합니다. 그리고 CD-ROM 을 시스템에서 추출합니다.

 

22. root 유저로 로그인하여 아래와 같이 간단히 확인해보자

zpool list

zfs-20.png

 

23. 자신에게 맞는 타임존을 설정합니다.

dpkg-reconfigure tzdata

 

24. 로케일 설정을 해줍니다.

dpkg-reconfigure locales
update-locale LANG=en_US.UTF-8

 

25. 이제 자신에게 필요한 패키지들을 설치합니다. 수고하셨습니다.

apt-get install -y ubuntu-standard
apt-get install -y command-not-found lrzsz mc psmisc htop ntp irqbalance
TAG •
  • profile

    수십테라의 스토리지를 관리한다면 ZFS도 꽤 쓸모가 있을 것 같은데, 일반 PC나 가상서버에서는 어떤 이점이 있나요? (망할 btrfs는 왜 이렇게 오래 걸리냐 ㅠㅠ)

  • profile profile
    소규모 시스템에서는 전혀 이익이 없는거 같습니다. +_+ ㅠㅠㅠ
  • profile profile
    사실 저도 잘 모릅니다. ㅠ
    그냥 ZFS 라는 파일시스템이 나왔길래 그냥 따라서 설치해보다가 안되더라구요.
    양쪽의 글을 참고하고 삽질(이틀동안 10번이상 설치 ㅠㅠ)을 했습니다.
  • profile
    덕분에 ZFS라는 파일시스템을 알고 갑니다. ㄷㄷ
    지상최강의 파일시스템이라니 ㄷ