Linux

CentOS Hardware Raid 설치 - Gigabyte X399 AROUS GAMING 7

respiro 2018. 11. 19. 12:11

Linux (CentOS) Hardware RAID 설치하기


작성일: 2018년 11월 19일


대상 보드

 Gigabyte x399 AROUS GAMING 7

 CPU

 SocketTR4 (AMD Ryzen Threadripper) 

 칩셋

 AMD X399 

 Raid

 Raid 1 (Raid0, Raid1, Raid10 지원) 

 HDD

 8TB X 2

 SDD

 돈이 없어서... 

 BIOS

 F11e (2018/09/17 Version)


CentOS-7-x86_64-Minimal-1804.ISO

https://www.centos.org/download/


참조

* x399 AORUS Gaming 7 Board

* AMD-RAID 에서 Windows 와 Ubuntu 사용하기

* Linux Ubuntu 를 위한 AMD RAID 지원 필요

* AMD Raid Linux 공식 드라이버(X370)

* AMD Raid Linux 공식 드라이버(X399)

rcraid 커널 비공식 패치(github)    - 필요하지 않아 보임.(커널 4.15 이상에서 필요함)


아래는 하드가 부족해서 링크만 남겨둠...

* CentOS 에서 Soft Raid 10 사용하기[1][2][3]


1. 개요

 이 가이드는 기가바이트의 X399 메인보드를 사용하면서, 하드웨어 RAID를 이용해서 CentOS 7 을 설치하기 위한 방법이다.

위의 참조 URL 에서 보듯이 이 글을 작성하는 현재 시점에서 X399 리눅스 드라이버는 공식적으로 지원하지 않고 있다.

 X399 에서 하드웨어 RAID 를 사용하기 위해서는 BIOS 상에서 HDD를 RAID 로 설정하고, RAID0, RAID1, RAID10(하드디스크 4개) 중 하나를 선택하고, 지원되는 Windows 10 드라이버를 이용하여 Windows 를 설치하면 된다.

하지만, 리눅스의 경우, Bootable Device 를 찾을 수 없기 때문에 설치에 실패한다.

 이 가이드는 Raid 커널 드라이버를 리눅스 설치 과정중에 올려서 CentOS 를 설치하기 위한 삽질 과정이다.


SSD 가 없어서, NVMe 에 대해서는 테스트해보질 않아서, NVMe SSD RAID 에 대해서는 확신할 수 없다.

왜, AMD 가 리눅스용 RAID 버전을 업데이트하지 않고 있는지는 알 수 없다.

(뭔가 문제가 있으려나,,,,,,)



2. BIOS 설정

X399 보드에서 BIOS 로 하드웨어 RAID 를 설정하기 위해서는 해당 매뉴얼을 참조하기 바란다.


여기서는 RAID1  으로 두 개의 하드 디스크를 사용하였다.




3. 커널


추가 수정

아래의 x370 용 드라이버 대신 아래의 최신 코드를 사용하기 바란다.


https://github.com/thopiekar/rcraid-dkms


# git clone https://github.com/thopiekar/rcraid-dkms.git

# cd rcraid-dkms


사용법은 아래와 같다.


 X370용 리눅스 드라이버 SDK 를 다운로드한다.

* https://www.amd.com/en/support/chipsets/amd-socket-am4/x370 (raid_linux_driver_8_01_00_039_public.zip)


위 압축파일에는 RHEL7-3(x64) 및 UBUNTU 16(x86, x64) 드라이버와 함께 Driver SDK (소스 코드) 가 들어 있다.

[root@localhost x86_64]# rpm -qpl kmod-rcraid-6.0.0-3.10.0.514.el7.x86_64.x86_64.rpm

/etc/depmod.d/rcraid.conf

/lib/modules/3.10.0-514.el7.x86_64

/lib/modules/3.10.0-514.el7.x86_64/extra

/lib/modules/3.10.0-514.el7.x86_64/extra/rcraid

/lib/modules/3.10.0-514.el7.x86_64/extra/rcraid/rcraid.ko



driver_sdk/install  스크립트는 SuSE, Ubuntu 및 redhat 배포판을 인식하고 드라이버를 빌드한다.

커널 모듈을 빌드하기 위해 다음과 같은 모습으로 구성되어 있다.

...

build_modules(){

    KERNELMAKEFILE=/lib/modules/$1/build/Makefile

    buildfailed=0


    if [ -f $KERNELMAKEFILE ]; then

        (cd src; make clean; make KVERS=$1 all);

        if [ $? -ne 0 ]; then

            buildfailed=1

        fi

    else

        buildfailed=1

    fi


    if [ $buildfailed -eq 1 ]; then

        echo "ERROR: Failed to build the RAIDCORE Drivers."

        echo "Please make sure kernel source rpm is installed for $1."

        exit 1

    fi

}


...


build_and_install_rh() {

    set_kernel_flavors_rh

    for flavor in $flavors ; do

        if [ $flavor = "uni" ] ; then

            version=$kernel

        else

            version=$kernel$flavor

        fi

                

        build_modules $version

        if [ -f "src/rcraid.ko" ] ; then

            install_modules install_rh "USE_SWL=${USE_SWL}" $version

        else

            echo "#"

            echo "# Driver module not built -- install aborted!"

            echo "#"

        fi

    done

}

...


참고로 x399 드라이버는 다음 URL 에서 제공한다. Linux 지원 정식 버전이 언젠가 제공될 수 있으므로, 지켜보는 것도 나쁘지 않다.


3.1 커널 드라이버 모듈 빌드하기

 


 먼저, CentOS 에서 커널 드라이버를 빌드하기 위한 관련 패키지를 설치한다. 이미 설치되었다면, 생략한다.

# yum install  ncurses-devel make gcc bc bison flex elfutils-libelf-devel openssl-devel

...

Installed:

  bc.x86_64 0:1.06.95-13.el7                 bison.x86_64 0:3.0.4-1.el7

  elfutils-libelf-devel.x86_64 0:0.170-4.el7 flex.x86_64 0:2.5.37-3.el7

  gcc.x86_64 0:4.8.5-28.el7_5.1              ncurses-devel.x86_64 0:5.9-14.20130511.el7_4

  openssl-devel.x86_64 1:1.0.2k-12.el7


Dependency Installed:

  cpp.x86_64 0:4.8.5-28.el7_5.1              glibc-devel.x86_64 0:2.17-222.el7

  glibc-headers.x86_64 0:2.17-222.el7        kernel-headers.x86_64 0:3.10.0-862.14.4.el7

  keyutils-libs-devel.x86_64 0:1.5.8-3.el7   krb5-devel.x86_64 0:1.15.1-19.el7

  libcom_err-devel.x86_64 0:1.42.9-12.el7_5  libkadm5.x86_64 0:1.15.1-19.el7

  libmpc.x86_64 0:1.0.1-3.el7                libselinux-devel.x86_64 0:2.5-12.el7

  libsepol-devel.x86_64 0:2.5-8.1.el7        libverto-devel.x86_64 0:0.2.5-4.el7

  m4.x86_64 0:1.4.16-10.el7                  mpfr.x86_64 0:3.1.1-4.el7

  pcre-devel.x86_64 0:8.32-17.el7            zlib-devel.x86_64 0:1.2.7-17.el7


Dependency Updated:

  e2fsprogs.x86_64 0:1.42.9-12.el7_5        e2fsprogs-libs.x86_64 0:1.42.9-12.el7_5

  krb5-libs.x86_64 0:1.15.1-19.el7          libcom_err.x86_64 0:1.42.9-12.el7_5

  libgcc.x86_64 0:4.8.5-28.el7_5.1          libgomp.x86_64 0:4.8.5-28.el7_5.1

  libss.x86_64 0:1.42.9-12.el7_5


Complete!


# yum install rpm-build kernel-devel-`uname -r`

 현재 kernel-devel 을 설치하게 되면, CentOS 의 업데이트 커널 소스를 설치하게 되므로, uname -r 옵션으로 현재 버전과 같은 커널 소스를 설치한다.



내려받은 압축 파일을 해제하고, 드라이버를 빌드한다.

[root@localhost ~]# unzip raid_linux_driver_8_01_00_039_public.zip

...


[root@localhost ~]# cd driver_sdk/


[root@localhost driver_sdk]# chmod +x install

[root@localhost driver_sdk]# ./install

[root@localhost driver_sdk]# ./install

------------------------------------------------------------

- building for kernel 3.10.0-862.el7.x86_64

------------------------------------------------------------

make -C /lib/modules/3.10.0-862.el7.x86_64/build SUBDIRS=/root/driver_sdk/src mo                                             dules

make[1]: Entering directory `/usr/src/kernels/3.10.0-862.el7.x86_64'

  CC [M]  /root/driver_sdk/src/rc_init.o

/root/driver_sdk/src/rc_init.c: In function ‘rcraid_resume_one’:

/root/driver_sdk/src/rc_init.c:1095:26: warning: ignoring return value of ‘pci_e                                             nable_device’, declared with attribute warn_unused_result [-Wunused-result]

         pci_enable_device(adapter->pdev);

                          ^

/root/driver_sdk/src/rc_init.c:1120:23: warning: ignoring return value of ‘pcim_                                             enable_device’, declared with attribute warn_unused_result [-Wunused-result]

     pcim_enable_device(pdev);

                       ^

  CC [M]  /root/driver_sdk/src/rc_msg.o

  CC [M]  /root/driver_sdk/src/rc_mem_ops.o

  CC [M]  /root/driver_sdk/src/rc_event.o

  CC [M]  /root/driver_sdk/src/rc_config.o

  CC [M]  /root/driver_sdk/src/vers.o

  LD [M]  /root/driver_sdk/src/rcraid.o

  Building modules, stage 2.

  MODPOST 1 modules

  CC      /root/driver_sdk/src/rcraid.mod.o

  LD [M]  /root/driver_sdk/src/rcraid.ko

make[1]: Leaving directory `/usr/src/kernels/3.10.0-862.el7.x86_64'

SWL option: "ahci,lsi1068,lsi2008"

Installing rcraid.ko driver for 3.10.0-862.el7.x86_64         



빌드된 드라이버는 

# ls /lib/modules/`uname -r`/kernel/drivers/scsi/rcraid.ko 로 복사된다.


설정 옵션은 /etc/modprobe.conf 에 다음과 같이 커널 모듈 속성값을 추가한다.

alias scsi_hostadapter rcraid

options rcraid use_swl=15


해당 모듈과 설정 옵션을 USB 등으로 복사해둔다.


3.2 RAID 드라이버 인식시키기


이제 CentOS 7.5 를 AMD-RAID 컴퓨터를 시작한다.

설정 GUI 가 시작되면, 새로운 콘솔을 연다.


먼저, 커널에서 AHCI 모듈을 제거한다.

[anaconda root@localhost /]# lsmod | grep ahci 

ahci                 34056    0

libahci              31992    1 ahci

libata              242992    2 ahci,libahci


[anaconda root@localhost /]# modprobe -r ahci


새로 빌드한 rcraid.ko 를  적재한다. (USB 마운트)

# insmod rcraid.ko

rcraid.ko


하드 디스크 재탐색으로 ...짜잔

BIOS 에서 생성한 RAID 1 이 보인다.



 이후 설치는 일반적인 CentOS 설치과정과 동일하다.


설치 후, 새로 부팅한 후에도 RAID 디스크를 인식시키기 위해서는 다음 과정을 추가해 줘야한다.


이제 부팅시 사용하는 초기 램 파일시스템에 해당 모듈을 추가한다.

# cd /mnt/sysimage

# chroot

# mkdir tt 

# mount /dev/sdb1 tt   (여기서 sdb1 은 rcraid.ko 가 들어있는 USB)

# cp tt/rcraid.ko /lib/modules/`uname -r`/extra

# umount tt

# rm -rf tt

# depmod


## /boot/nitramfs-`uname -r`.img 에 rcraid 모듈을 추가한다.

# dracut --add-drivers rcraid --force


## ahci 커널 모듈이 올라오지 않도록 막아준다.

# cd /etc/modprobe.d

# vi ahci-blacklist.conf

blacklist ahci


## 리눅스 구형 커널 모듈.

# cd /etc/depmod.a

# vi rcraid.conf

override rcraid 2.6.32-* weak-updates/rcraid


## rcraid 모듈 옵션 추가
# cd /etc
# vi modprobe.conf
alias scsi_hostadapter rcraid
options rcraid use_swl=15



설정 파일이 여러 곳에 있는 것이  혼잡하므로, 

삽질한 위의 설정 파일은 아래와 같이 /etc/modprobe.d/rcraid.conf 파일에 하나로 모아 두는 것이 좋겠다.(

# cd /etc/modprobe.d

# vi rcraid.conf

blacklist ahci

alias scsi_hostadapter rcraid

options rcraid use_swl=15


#### 기존 설정파일은 제거하자. ####

# rm -f /etc/modprobe.d/ahci-blacklist.conf

# rm -f /etc/modprobe.conf


리눅스의 간단정보.

[root@localhost ~]# lsscsi

[0:0:0:0]    disk       AMD-RAID Array 01             8.1   /dev/sda

[0:0:24:0]   process  AMD-RAID Configuration    V1.2   -


설치가 되면, BIOS 의 Easy Mode 의 왼쪽 아래에 다음과 같이 Boot Sequence 에 AMD-RAID 가 나타난다.

(처음 BIOS 에서만 설정하게 되면, BOOTABLE DISK 가 없다고 보인다.)



이제, 부팅 가능한 커널 옵션을 가졌으니, 커널을 포함한 CentOS 시스템을 모두 업그레이드한다.

업그레이드 후,  위와 같이 새로운 커널버전에 맞게 모듈을 빌드하고 새로운 커널의 initramfs 에 dracut 을 이용해 모듈을 추가해 주면 된다.

# yum update 


# cd driver_sdk/


### 새로 업데이트된 커널버전을 컴파일할 커널 버전으로 명시한다.


# ./install 3.10.0-862.14.4.el7.x86_64



### 다음과 같은 오류가 생기면, devel 패키지를 먼저 설치해준다.

ERROR: Failed to build the RAIDCORE Drivers.


# yum update kernel-devel-3.10.0-862.14.4.el7.x86_64
# ./install 3.10.0-862.14.4.el7.x86_64


------------------------------------------------------------

- building for kernel 3.10.0-862.14.4.el7.x86_64

------------------------------------------------------------

make -C /lib/modules/3.10.0-862.14.4.el7.x86_64/build SUBDIRS=/root/x399-raid/driver_sdk/src modules

make[1]: Entering directory `/usr/src/kernels/3.10.0-862.14.4.el7.x86_64'

  CC [M]  /root/x399-raid/driver_sdk/src/rc_init.o

/root/x399-raid/driver_sdk/src/rc_init.c: In function ‘rcraid_resume_one’:

/root/x399-raid/driver_sdk/src/rc_init.c:1095:26: warning: ignoring return value of ‘pci_enable_devic ’, declared with attribute warn_unused_result [-Wunused-result]

         pci_enable_device(adapter->pdev);

                          ^

/root/x399-raid/driver_sdk/src/rc_init.c:1120:23: warning: ignoring return value of ‘pcim_enable_device’, declared with attribute warn_unused_result [-Wunused-result]

     pcim_enable_device(pdev);

                       ^

  CC [M]  /root/x399-raid/driver_sdk/src/rc_msg.o

  CC [M]  /root/x399-raid/driver_sdk/src/rc_mem_ops.o

  CC [M]  /root/x399-raid/driver_sdk/src/rc_event.o

  CC [M]  /root/x399-raid/driver_sdk/src/rc_config.o

  CC [M]  /root/x399-raid/driver_sdk/src/vers.o

  LD [M]  /root/x399-raid/driver_sdk/src/rcraid.o

  Building modules, stage 2.

  MODPOST 1 modules

  CC      /root/x399-raid/driver_sdk/src/rcraid.mod.o

  LD [M]  /root/x399-raid/driver_sdk/src/rcraid.ko

make[1]: Leaving directory `/usr/src/kernels/3.10.0-862.14.4.el7.x86_64'

SWL option: "ahci,lsi1068,lsi2008"

Installing rcraid.ko driver for 3.10.0-862.14.4.el7.x86_64


## 마찬가지로 새 버전을 명시해서 initramfs 에 추가한다.
# dracut --add-drivers rcraid --force  --kver 3.10.0-862.14.4.el7.x86_64


새로운 버전으로 새로 부팅한다. 

오류가 생겨도 이제 우리에게는 부팅 가능한 돌아갈 옵션이 있으므로 겁먹지 말자.


dmsg 로 부팅 로그를 보면, 아래와 같이 warning 로그가 보인다.

[    1.899543] CPU: 3 PID: 386 Comm: systemd-udevd Tainted: P           OE  ------------   3.10.0-862.14.4.el7.x86_64 #1

[    1.899544] Hardware name: Gigabyte Technology Co., Ltd. X399 AORUS Gaming 7/X399 AORUS Gaming 7, BIOS F11e 09/17/2018

[    1.899545] Call Trace:

[    1.899550]  [<ffffffff89f13754>] dump_stack+0x19/0x1b

[    1.899553]  [<ffffffff898945d8>] __warn+0xd8/0x100

동작에는 문제가 없으므로, 일단 무시하자.


4. Custom CentOS 7 만들기


[TBD] 시간 날 때, x399 용 rcraid RPM 패키지를 만들어 두자.

[TBD] 시간 날 때, x399 용 AMD-RAID 용 CentOS 7 설치 CD 를 만들어 두자.


아마도 시간은 나도 귀챦아서 안할 것이다. 200%로 ...


5. Windows 와 Dual Booting 시 유의사항


윈도우 OS 와 듀얼 부팅으로 사용하기 위해서,  Windows 를 설치할 때, 유의해야 한다.

먼저, Windows 를 설치할 때,  RAID 드라이버를 잡아주고, AMD-RAID 를 인식 시킨 후,


Shift+10 으로 DOS CMD 창을 띄운 후,

DISKPART 에서    해당 디스크를 선택한 후에, gpt 로 변경해주고 파티션 설정 및 포맷을 해야

EFI 부팅 파티션이 생성된다.


Windows EFI 부팅 파티션이 생성되면, EFI 를 사용하는 GRUB 부팅 과정에서 해당 파티션의 Windows Boot Manager 를 찾아서 GRUB Boot 메뉴에 자동으로 추가해 준다.