Clover EFI¾øÀÌ ±¸Çü ¹ÙÀÌ¿À½ºÀÎ IBM x3400¿¡¼­ TrueNAS¸¦ NVMe¿¡¼­ ºÎÆÃÇϱâ (Booting NVME on Legacy Bios System)

   Á¶È¸ 2966   Ãßõ 0    

음.. 며칠 삽질했던 기록이 아까워서 어딘가 남길려다가..

이걸 NAS에 올려야 하나 여기 올려야 하나 하다가 일단.. 이쪽에 올립니다.


여기야 능력자분들이 워낙 많아서 이건 이건 소소한 팁 정도랄까요.


원래 NVMe로 부팅을 하려면 일반적으로 두 가지가 필요합니다.
* UEFI바이오스가 적용된 시스템
* 바이오스에서 NVMe를 부팅 디스크로 인식하는 옵션


예외적으로 AHCI 옵션롬? 이 적용된 녀석이 M.2나 PCIe카드 형식으로 있긴한데 쉽게 손애 들어올리 없죠.
물론 이곳 2cpu장터엔 간간히 보이기는 합니다만 어쨋든 쉽게 구하기는 어려운 존재 입니다.


근데... NAS를 구성하다가 보면 왠지 구형 하드웨어를 많이 다루게 되는거 같아요. 아무래도 고성능 시스템이 필요 없어서 인듯 한데.


지금 회사에 셋팅중인 두대 중 한대인 HP Microserver N36l 도 구형 BIOS이고.
심지어 IBM x3400은 무려 DDR2메모리 시대에 태어난 더더 구형 BIOS입니다.
PCIe 도 무려 1.0.... 전 처음봤습니다.
게다가 이서버 완전 예민보스 입니다. 뭔가 연결한 장치가 입맛에 안맞고 뻗으면 심심할때마다 바이오스 클리어 됩니다.


어쨋든 두놈다 태생적으로 NVMe SSD로 부팅이 될리가 없는 녀석들입니다만
작년에 N36l 가지고 놀때 이미 Clover EFI로 부팅시키는 삽질을 완성하긴 했었어요.
https://blog.naver.com/neowolf777/222911682645
번외편으로 CloverEFI를 쓰던 아래 소개한 방법을 쓰던지 덤으로 생기는 좋은점은
옵션롬이 호환 안되는 RAID/HBA 컨트롤러의 디스크로도 부팅이 가능하다는 것이에요.
사실 IBM x3400에 적용하고 싶은 카드가 왠지 BIOS 옵션롬이 없을거 같아서
구매하기 전에 호환되지 않을 경우 대비책으로 필요해서 될때까지 삽질 했습니다.


어쨋든 이번에도 저걸 써서 NVMe 도 회사돈으로 주렁주렁 달아야겠다 싶었는데.
TrueNAS SCALE만 그러는건지 부팅후 대시보드 화면 메모리의 ECC표기가 사라집니다.
내부적으로 동작은 할거 같은데 Clover EFI로 진입하면서 일부 하드웨어 접근에 제약이 생기는거 같네요.
Clover EFI의 환경설정을 조정해주거나, 관련 efi드라이버를 적용하면 될것도 같은데...


이참에 작년에 머리복잡해서 시도 하다 말았던 커널만 USB에서 로딩 하는 방법을 시도해봤습니다.
커널에 NVMe드라이버가 포함되어 있기 때문에 메모리에 올라간 다음에는 NVMe 엑세스가 가능해지는 점을 활용한 것이더군요.
이게 일반 리눅스라면  심볼릭 링크도 좀 걸어주고 복잡하고, 관련 지식이 얕은지라 이해하기 힘들었는데.
TrueNAS는 의외로 단순합니다.... 커널 로딩이 완료되면 무조건 정해진 zfs 풀 중에 boot-pool 을 찾아서 부팅을 이어갑니다.
(그래서 시스템에 boot-pool 이 두개 이상 연결되어 있으면 부팅 못하고 중간에 뻗어버립니다.)
최종적으론 훨씬 간단하게 적용이 가능했습니다.


이하 작업 절차인데 뭔가 사진을 찍긴 애매해서 재미없지만 텍스트로 소개합니다.


- GNU GRUB 공식 사이트에서 GRUB2 배포판을 받는다, windows 환경에서 가능

- USB를 포멧해서 준비한다. (관리 편의상 fat32 추천)

- 미리 disk genius 같은 툴로 파티션 사이즈를 500MB 로 조정한다. (설치를 모두 마친후 조정도 가능, 실제론 200MB 보다 사용량은 작음)

- 디스크 관리자를 통해 USB의 drive letter와 디스크 번호를 확인한다.

- CMD(명령프롬프트) 를 관리자 권한으로 실행후 다음 명령을 통해 USB를 부팅 가능한 GRUB2 드라이브로 만든다. 

   grub-install.exe --force --no-floppy --target=i386-pc --boot-directory= //./PHYSICALDRIVE

   예 : → F: , → 3

- 부팅된 TrueNAS (현재 버젼은 23.10.0.1, 반드시 부팅대상 시스템이 아니어도 버젼만 동일하면 상관없음)에 USB 연결

- sudo -s 후 명령들 실행
  cd /mnt
  mkdir usb
  mount -t vfat /dev/sda1 usb (USB 부팅용 파티션의 디바이스 path는 fdisk -l 로 확인가능)
  cd usb
  mkdir ROOT
  cd ROOT
  mkdir 23.10.0.1
  cd 23.10.0.1
  cp -r /boot .
  cp /boot/grub/grub.cfg /mnt/usb/grub/.

- 해당 USB로 TrueNAS 시스템을 부팅 시도 (당연히 처음엔 에러남)

- grub 화면에서 (TrueNAS 부팅 선택기) c 로 명령줄 진입

- ls 후 화면의 내용 확인 (거의 아래 내용과 동일) 후 이 내용으로 grub.cfg를 수정 (윈도우에서도 가능)
  (proc) (hd0) (hd0,msdos1)

- set root='hd1,gpt3' 와 같은 내용이 있으면 모두 찾아서 set root='hd0,msdos1' 로 변경

- /ROOT/23.10.0.1@ 를 찾아서 @를 지우고 /ROOT/23.10.0.1 로 변경

- /ROOT/Initial-Install@ 를 찾아서 @를 지우고 /ROOT/Initial-Install 로 변경
  (실제론 복사하지 않았으므로 이 메뉴는 동작 안됨)


대략 부팅된 시스템의 boot 디렉토리의 내용과 그 안의 grub.cfg만 있으면 됩니다.
리눅스라면 해당 배포판의 live CD iso로 부팅해서 처리가 가능한데 TrueNAS는 독특하게 대부분의 파티션이 zfs 안에 있어서
내용에 접근하기가 빡세더군요.


USB에서는 커널 이미지를 읽어들이기만 하고 boot-pool로 로딩이 전환된 이후엔 뽑아버려도 상관없습니다.
실제로 작년에 TrueNAS CORE에 Clover EFI로 셋팅했을때는 부팅후 task로 usb 메모리 전원을 차단처리도 했었습니다.
스토리지 관리할때 자꾸 보기 싫게 unassigned disk로 튀어나와서.


어쨋든 작년에 보면서 어려워서 건너뛰었던 참고 자료들은 이런 녀석들입니다.

- https://winraid.level1techs.com/t/guide-how-to-boot-linux-from-nvme-with-legacy-bios/33326

- https://www.youtube.com/watch?v=SuAn6IG4kF4&t=11s

- https://www.youtube.com/watch?v=5hBynDYY9UA


참.. TrueNAS한정 손좀 덜 타는 다른 방법은

16G정도 되는 USB TrueNAS를 설치한 뒤에, 사용할 TrueNAS가 부팅된 이후 연결해서 (부팅전에 연결하면 boot-pool 패닉이..)
zpool import 하면서 풀 이름을 다른걸로 변경해버리면 이 USB로 같은 효과를 볼 수 있습니다.
물론 설치된 다른 파일들은 쓸데 없지요.
문득 지금 생각난건데 USB설치 끝난다음에 USB의 zfs파티션만 지워도 될거 같긴 하네요.


다만 저는 선택하기 어려운게.. 예민보스 IBM x3400이 USB 드라이브가 GPT 디스크인것을 허용하지 않습니다.
USB 읽다가 뻗어버려서 USB 메모리는 MBR형식만 쓸수 있습니다.