라즈베리파이에 Kabi Tracking kmod zfs를 설치하자:8 chroot하여 zfs 설치 및 부트로더 설정


이 글의 목적

이 글에서는 /mnt로 chroot 하여 이 안에서 부팅에 필요한 작업들을 수행하게 됩니다.
dnf install의 경우 --installroot 옵션을 이용해서 chroot하지 않고도 설치할 수 있었지만, 부트로더나 커널 모듈 설정은 하지 못합니다.
이런 작업을 이번 과정에서 진행하게 됩니다.

sys conf:9 chroot

/mnt로 root를 변경합니다.
라이브 부트가 아니어서인지 암호 변경에서 문제가 발생하더군요
그래서 selinux를 비활성화해줍니다.
여기서 수행하는 se linux 비활성화는 재부팅 후에 영향을 주지 않습니다.

chroot /mnt /usr/bin/env DISK="$DISK" bash --login
setenforce 0

zfs 재설치 (open zfs에 없는 내용입니다)

zfs를 빌드해서 설치해서인지 저는 항상 문제를 경험했습니다.
chroot jail 안에서는 인터넷이 안되므로, rpm 파일형태로 갖고 있는 패키지만 제거 후에 다시 설치해줍니다.
dependency까지 제거하면 다시 설치하지 못합니다.
여기서는 zfd-dracut도 설치가 필요합니다.

dnf remove dnf list installed | grep commandline | grep -v release| awk '{print $1}'  --noautoremove

cd /zfs
sudo yum localinstall *.$(uname -p).rpm *.noarch.rpm
systemctl enable zfs-import-scan.service zfs-mount zfs-import.target zfs-zed zfs.target

sys conf:10-11 부팅할 때 label을 수정하도록 하고, 비밀번호를 변경합니다.

fixfiles -F onboot
passwd

bootloader:1 add virtio disk driver to bootloader

부팅에 virtio가 필요한 경우에 넣습니다.
virtio는 가상 머신에서 사용하는 드라이버입니다.
가상머신이 아닌 라즈베리파이에 설치하는 것이므로 필요하지 않습니다.
따라서 건너 띕니다.

bootloader:2 initrd를 생성합니다.

이 과정을 스크립트로 진행하면 저는 진행이 안되더군요.

#for directory in /lib/modules/*; do
#  kernel_version=$(basename $directory)
#  dracut --force --kver $kernel_version
# done

이 스크립트를 실행하면 kabi 커널을 비롯해 여러가지 부팅에 사용하지 않는 커널이 있는데, 이 커널에 대해서도 dracut을 시도하더니 부팅이 안됩니다.
그래서 저는 ls를 이용하여 커널을 직접 확인하고, 수동으로 명령을 실행합니다.

rm -f /etc/zfs/zpool.cache
touch /etc/zfs/zpool.cache
chmod a-w /etc/zfs/zpool.cache
chattr +i /etc/zfs/zpool.cache

ll /lib/modules/
# /lib/modules/안에 커널 kabi나 common이 없는 폴더는 하나 뿐일것입니다.
# 그 폴더의 이름을 'kernel_version'변수에 넣습니다.
kernel_version= #그 폴더 이름
dracut --force --kver $kernel_version

bootloader:3 load ZFS modules and disable BLS?

echo 'GRUB_ENABLE_BLSCFG=false' >> /etc/default/grub

bootloader:4 Apply GRUB workaround

echo 'export ZPOOL_VDEV_NAME_PATH=YES' >> /etc/profile.d/zpool_vdev_name_path.sh
source /etc/profile.d/zpool_vdev_name_path.sh

# GRUB fails to detect rpool name, hard code as "rpool"
sed -i "s|rpool=.*|rpool=rpool|"  /etc/grub.d/10_linux

bootloader:5 install GRUB

대부분 BIOS를 위한 작업입니다.ㅎㅎ
모듈 복사만 해줍시다.
이 때 RHEL_NAME는 OS 이름입니다.

RHEL_NAME=almalinux|rockylinux|RHEL
cp -r /usr/lib/grub/arm64-efi /boot/efi/EFI/$RHEL_NAME/

bootloader:6 Gen GRUB menu

grub2-mkconfig -o /boot/efi/EFI/$RHEL_NAME/grub.cfg

bootlioader:7 raid를 구성하여 여러개의 디스크가 설정된 경우 모든 EFI 파티션에 같은 내용이 포함되도록 설정.

ESP_MIRROR=$(mktemp -d)
unalias -a
cp -r /boot/efi/EFI $ESP_MIRROR
for i in /boot/efis/*; do
 cp -r $ESP_MIRROR/EFI $i
done
rm -rf $ESP_MIRROR

finish installation:1-2 exit chroot, export pools

exit

umount -Rl /mnt
zpool export -a
export가 되지 않는 경우

이 때 rpool이 export가 되지 않는 경우가 있습니다.
export가 되지 않으면 다른 컴퓨터에서 import가 되지 않습니다.
부팅 파티션이 달라지므로 다른 컴퓨터로 인식되기 때문에 import가 되지 않습니다.
따라서 다시 live boot로 부팅한 후에 export를 해주어야 합니다.

reboot
# 재부팅이 되면 rpool을 /mnt에 import
zpool import rpool -R /mnt
# 다시 export
zpool export rpool

boot to zfs RHEL dist

먼저 raspberryp UEFI로 부팅합니다.

boot disk가 os install disk나 live boot disk와 다른 경우

boot manager에서 boot disk를 선택합니다.

boot disk가 os install disk나 live boot disk 중 하나라도 같은 경우

Boot Maintenance Manager에서 ‘Add boot option’을 누릅니다.
여기에서는 장치 뿐만 아니라 각 장치의 파티션까지 표시되는데,
디스크에서 가장 마지막 파티션을 선택하면 파일 브라우저가 실행됩니다.

EFI/{OS}/shimaa64.efi 파일을 선택하면 됩니다.

저도 여러 디스크를 사용하는데, 어떤 디스크인지 몰라서 다 해봤습니다..ㅋㅋ

정리

/mnt로 chroot하여 내부에서만 할 수 있는 설정들을 수행했습니다.
계정 비밀번호나 GRUB을 설정하고 zfs 관련 서비스와 커널모듈을 설정하여
부팅시에 zfs로 부팅이 가능하고, zfs 가 마운트 될수 있도록 합니다.

다음편에는 부팅 이후 정리하는 내용입니다.
tmpfs, ssh, swap 등을 설정하게 됩니다.

목차

  1. 준비물
  2. 디스크 파티션 및 OS install disk 생성
  3. 뭔가 이상한(?) live boot disk 만들기
  4. 이것으로 뭔가 이상한 라이브 부트 이미지로 부팅했습니다.
    boot from live image
    공식 튜토리얼에 따르면 이제 두줄 진행했어요.ㅎㅎㅎㅎㅎ
  5. zfs 패키지 준비하기 (참조: Custom Packages: rpm)
  6. boot disk 파티셔닝 (파티션 번호 주의) (참조: RHEL Root on ZFS)
  7. linux core 설치
  8. zfs disk로 chroot하여 zfs 설치 및 부트로더 설정
  9. tmpfs, swap 설정(root on zfs의 ubuntu 참조))
  10. 주의사항 – 제가 경험한 문제들 (스냅샷, grub2 pc module, dracut location, grub2-mkconfig, kernel-abi abailbility list, passwd 전 selinux 끄기, lib modules/* 사용하지 말기, pv dd로 boot pool 백업하기. )

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
100% Free SEO Tools - Tool Kits PRO