-
CentOS Hardware Raid 설치 - Gigabyte X399 AROUS GAMING 7Linux 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
돈이 없어서...
F11e (2018/09/17 Version)
CentOS-7-x86_64-Minimal-1804.ISO
https://www.centos.org/download/
참조
* AMD-RAID 에서 Windows 와 Ubuntu 사용하기
* Linux Ubuntu 를 위한 AMD RAID 지원 필요
* AMD Raid Linux 공식 드라이버(X370)
* AMD Raid Linux 공식 드라이버(X399)
* rcraid 커널 비공식 패치(github) - 필요하지 않아 보임.(커널 4.15 이상에서 필요함)
아래는 하드가 부족해서 링크만 남겨둠...
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
하드 디스크 재탐색으로 ...짜잔
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.confoverride rcraid 2.6.32-* weak-updates/rcraid## rcraid 모듈 옵션 추가# cd /etc# vi modprobe.confalias scsi_hostadapter rcraidoptions 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 메뉴에 자동으로 추가해 준다.
'Linux' 카테고리의 다른 글
TmaxOS 3.9.1 x64 설치기 (0) 2019.08.20 북한 폰트 (0) 2019.08.08 fail2ban 및 GeoIP 와 BlackIP를 이용한 IP 차단하기 (0) 2019.01.03 CentOS 7 에서 Oracle 12c 설치하기(Silent Mode 설치) (2) 2018.10.17 CentOS 7 에서 Oracle 12c 설치하기(GUI 원격 설치) (0) 2018.10.17