ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CentOS Hardware Raid 설치 - Gigabyte X399 AROUS GAMING 7
    Linux 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용 리눅스 드라이버 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 메뉴에 자동으로 추가해 준다.




    TAG

    댓글 0

Designed by Tistory.