如何编译支持OCFS2文件系统的Linux内核

这次专门整理下多节点共享文件系统

背景

之前曾经安装过 Oracle RAC, 申请了多余的共享磁盘,配置了一下 OCFS2 系统, 挂载到所有节点,用于存放数据库备份, 这样的话, 备份的内容所有节点都可见。 当然了使用 Oracle ASM 的ACFS也行(以前做过,没记录,有空了再整理)。

这次呢,又一个新地方部署了同一个版本的RAC, 也想用相同方式,但在配置 OCFS2 的步骤 o2cb.init configure 步骤竟然报错,卡住了,时间比较紧, 最后,换 xfs 格式,只挂载在其中一个节点用于备份。

离开之后, 复盘了下原因, 是因为之前成功的 OCFS2 配置是在Oracle Linux 7 操作系统上,默认是 uek 内核启动, 默认是支持 OCFS2 文件系统的。 而我们这次呢,是 Redhat7 , 默认是不支持 OCFS2 文件系统的。

说明

Oracle Linux uek引导支持是支持 OCFS2 文件系统的,Oracle 从 Oracle Linux 6开始 不再推送 OCFS2/ASMLIB 给 Redhat,所以 CentOS, Redhat (包括 compatible kernel 引导的Oracle Linux) 是不支持 OCFS2 文件系统的。 运行 o2cb.init configure 会报错: Loading filesystem "ocfs2_dlmfs": Unable to load filesystem "ocfs2_dlmfs" Failed 需要重新编译安装支持 OCFS2 的内核

今天,主要分享下自行编译支持 OCFS2 内核的步骤。

后面再说下几种配置 OCFS2 的方法, 包括

  1. 使用共享储存的节点如何配置 OCFS2
  2. vmware workstation共享磁盘配置 OCFS2
  3. 使用本地磁盘,不使用共享磁盘, 通过 DRBD 配置 OCFS2

再顺便,整理了一下, 如何挂载远程的 sshfs, cifs, nfs磁盘。当然了, 这个不算是共享文件系统,只能算是网络共享,所有节点可见。 不能保证文件读写不被覆盖。

而 OCFS2 , ACFS 是共享文件系统, 和 Redhat 的GFS2, IBM的GPFS 等是共享文件系统, 可以多节点进行读写控制的。

编译支持ocfs2的内核

测试环境

redhat 7.9/CentOS7.9

测试日期: 2023-05-19

步骤

首先安装工具包

yum install wget rpm-build
yum install gcc m4 net-tools bc xmlto hmaccalc python-devel perl elfutils-devel zlib-devel binutils-devel bison audit-libs-devel java-devel numactl-devel ncurses-devel perl-ExtUtils-Embed python-docutils

#以下CentOS适用

yum install asciidoc newt-devel pesign pciutils-devel

#以下Redhat 适用: 以下4个包在rehdat 源中没有,需要到CentOS官方源中先下载

yum install --downloadonly --downloaddir=/tmp/rpmbuild asciidoc newt-devel pesign pciutils-devel slang-devel source-highlight #CentOS 环境下载,复制到Redhat环境

yum localinstall asciidoc-8.6.8-5.el7.noarch.rpm newt-devel-0.52.15-4.el7.x86_64.rpm pesign-0.109-11.el7_9.x86_64.rpm pciutils-devel-3.5.1-3.el7.x86_64.rpm slang-devel-2.2.4-11.el7.x86_64.rpm source-highlight-3.1.6-6.el7.x86_64.rpm #Redhat环境安装

创建用户, 略过也可以, 会有警告

下载内核源码包并安装

useradd mockbuild
cd
wget https://vault.centos.org/7.9.2009/updates/Source/SPackages/kernel-3.10.0-1160.90.1.el7.src.rpm
rpm -ivh kernel-3.10.0-1160.90.1.el7.src.rpm
cd /root/rpmbuild/SPECS/

需要修改部分内容 kernel.spec 修改以下2处

for i in *.config
do
sed -i "s/# CONFIG_OCFS2_FS is not set/CONFIG_OCFS2_FS=m/" $i #847后增加这一行
mv $i .config
%define listnewconfig_fail 0 #242行值由1改为0

开始编译了,我的电脑配置是 物理机 i7-1165G7 @ 2.80GHz 8CPU,32G 内存, 使用虚拟机(8cpu,16G) 运行编译,编译过程中 空间使用约 15G, CenOS7.9 花费时间 1h08m, Redhat7.9 花费时间:2h54m

编译结束,查看生成的内核包中已经支持ocfs2,编译好的内核文件, 可以复制到其他环境使用

rpmbuild -ba kernel.spec #
cd /root/rpmbuild/RPMS/x86_64
rpm -qpl kernel-3.10.0-1160.90.1.el7.x86_64.rpm |grep ocfs2
rpm -ivh kernel-3.10.0-1160.90.1.el7.x86_64.rpm #
uname -r #旧内核: 3.10.0-1160.el7.x86_64
reboot #重启默认使用新安装的内核
uname -r #新内核: 3.10.0-1160.90.1.el7.x86_64
ll /lib/modules/$(uname -r)/kernel/fs/|grep ocfs2

结束语:

1. 此时,这2台(Redhat7.9, CentOS7.9) 已经支持 OCFS2 文件系统。

2. 编译生成的
kernel-3.10.0-1160.90.1.el7.x86_64.rpm 也可以复制到其他同版本上使用。

3. 还有一种方法是:到 Oracle Linux 7 安装介质中复制
linux-firmware-20200902-999.5.gitd5f9eea5.el7.noarch.rpm 和 kernel-uek-5.4.17-2011.6.2.el7uek.x86_64.rpm 到 Redhat7 或CentOS 7 安装也还是可以的, 重启默认使用新uek内核, 支持 OCFS2

4. 以上3种方式,更新内核后,再安装 Oracle Linux 中的
ocfs2-tools-1.8.6-14.el7.x86_64.rpm 和 ocfs2-tools-devel-1.8.6-14.el7.x86_64.rpm 即可以支持 ocfs2 共享文件系统, 这2个包在 Oracle Linux 安装介质中

谢谢,关注防丢失, 下一次讲配置OCFS2 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值