6.3. 在引导磁盘中配置 iSCSI 内核参数
您必须在镜像上的内核中启用 iSCSI 引导。要实现这一目的,请在镜像上挂载 QCOW2 镜像并启用 iSCSI 组件。
前提条件
下载 Red Hat Enterprise Linux QCOW2 镜像,并将其复制到 undercloud 的
/home/stack/
目录中。您可以使用以下页面下载 QCOW2 格式的 Red Hat Enterprise Linux KVM 镜像:
流程
-
以
stack
用户的身份登录 undercloud。 挂载 QCOW2 镜像,并以
root
用户身份进行访问:加载
nbd
内核模块:$ sudo modprobe nbd
将 QCOW 镜像连接为
/dev/nbd0
:$ sudo qemu-nbd --connect=/dev/nbd0 <IMAGE>
检查 NBD 上的分区:
$ sudo fdisk /dev/nbd0 -l
新的 Red Hat Enterprise Linux QCOW2 镜像只包含一个分区,通常在 NBD 上命名
/dev/nbd0p1
。为镜像创建挂载点:
mkdir /tmp/mountpoint
挂载镜像:
sudo mount /dev/nbd0p1 /tmp/mountpoint/
挂载您的
dev
目录,以便镜像能够访问主机上的设备信息:sudo mount -o bind /dev /tmp/mountpoint/dev
将根目录改为挂载点:
sudo chroot /tmp/mountpoint /bin/bash
在镜像中配置 iSCSI:
注意此步骤中的一些命令可能报告以下错误:
lscpu: cannot open /proc/cpuinfo: No such file or directory
此错误不重要,您可以忽略这个错误。
将
resolv.conf
文件移动到临时位置:# mv /etc/resolv.conf /etc/resolv.conf.bak
创建临时
resolv.conf
文件,以解决 Red Hat Content Delivery Network 的 DNS 请求。这个示例为名称服务器使用8.8.8.8
:# echo "nameserver 8.8.8.8" > /etc/resolv.conf
将挂载的镜像注册到 Red Hat Content Delivery Network 中:
# subscription-manager register
当命令提示您时,输入您的用户名和密码。
附加包含 Red Hat Enterprise Linux 的订阅:
# subscription-manager list --all --available # subscription-manager attach --pool <POOLID>
将 &
lt;POOLID
> 替换为订阅的池 ID。禁用默认软件仓库:
# subscription-manager repos --disable "*"
启用 Red Hat Enterprise Linux 软件仓库:
Red Hat Enterprise Linux 7:
# subscription-manager repos --enable "rhel-7-server-rpms"
Red Hat Enterprise Linux 8:
# subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms"
安装
iscsi-initiator-utils
软件包:# yum install -y iscsi-initiator-utils
取消注册挂载的镜像:
# subscription-manager unregister
恢复原始
resolv.conf
文件:# mv /etc/resolv.conf.bak /etc/resolv.conf
检查挂载的镜像中的内核版本:
# rpm -qa kernel
例如,如果输出为
kernel-3.10.0-1062.el7.x86_64
,则内核版本是3.10.0-1062.el7.x86_64
。请注意此内核版本用于下一步。注意新的 Red Hat Enterprise Linux QCOW2 镜像仅安装了一个内核版本。如果安装了多个内核版本,请使用最新的内核版本。
将
network
和iscsi
dracut 模块添加到 initramfs 镜像:# dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION>
将
<KERNELVERSION
> 替换为从rpm -qa 内核获取的版本号
。以下示例使用3.10.0-1062.el7.x86_64
作为内核版本:# dracut --force --add "network iscsi" /boot/initramfs-3.10.0-1062.el7.x86_64.img 3.10.0-1062.el7.x86_64
从挂载的镜像退出回您的主机操作系统:
# exit
卸载镜像:
从临时挂载点卸载
dev
目录:$ sudo umount /tmp/mountpoint/dev
从挂载点卸载镜像:
$ sudo umount /tmp/mountpoint
从
/dev/nbd0/
断开 QCOW2 镜像:$ sudo qemu-nbd --disconnect /dev/nbd0
在镜像上重建
grub
菜单配置:安装
libguestfs-tools
软件包:$ sudo yum -y install libguestfs-tools
重要如果在 undercloud 上安装
libguestfs-tools
软件包,请禁用iscsid.socket
以避免与 undercloud 上的tripleo_iscsid
服务冲突:$ sudo systemctl disable --now iscsid.socket
将
libguestfs
后端设置为直接使用 QEMU:$ export LIBGUESTFS_BACKEND=direct
更新镜像的 grub 配置:
$ guestfish -a /tmp/images/{{ dib_image }} -m /dev/sda3 sh "mount /dev/sda2 /boot/efi && rm /boot/grub2/grubenv && /sbin/grub2-mkconfig -o /boot/grub2/grub.cfg && cp /boot/grub2/grub.cfg /boot/efi/EFI/redhat/grub.cfg && grubby --update-kernel=ALL --args=\"rd.iscsi.firmware=1\" && cp /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv && echo Success"