始终使用来自 https://linuxkernel.org.cn/ 的纯净原始内核源代码来编译 openMosix 内核! 请尽量使用离您最近的镜像下载内核,并始终尝试下载您已拥有的最新内核源代码的补丁,而不是下载整个内核。 Linux 社区将非常感谢这一点,并且将大大增加您的极客 Karma ;-) 请务必使用与内核版本相对应的正确的 openMosix 补丁。 在我写这篇文章时,最新的 2.4 内核是 2.4.20,因此您应该下载 openMosix-2.4.20-x.gz 补丁,其中 "x" 代表补丁修订版(即:修订号越大,它就越新)。 请勿使用任何 Linux 发行版附带的内核:它将无法工作。 这些内核源代码已被发行版制作者大量修补,因此,将 openMosix 补丁应用于这样的内核肯定会失败! 我经历过,相信我 ;-)
下载 openMosix 补丁的实际版本,并将其移动到您的内核源代码目录中(例如 /usr/src/linux-2.4.20)。 如果您的内核源代码目录不是 "/usr/src/linux-[版本号]",则至少需要创建一个指向 "/usr/src/linux-[版本号]" 的符号链接。 假设您是 root 用户,并且已将 gzip 压缩的补丁文件下载到您的主目录中,请使用 patch 实用程序应用补丁(猜猜是什么?)
mv /root/openMosix-2.4.20-2.gz /usr/src/linux-2.4.20 cd /usr/src/linux-2.4.20 zcat openMosix-2.4.20-2.gz | patch -Np1 |
mv /root/openMosix-2.4.20-2.gz /usr/src/linux-2.4.20 cd /usr/src/linux-2.4.20 gunzip openMosix-2.4.20-2.gz cat openMosix-2.4.20-2 | patch -Np1 |
mv /root/openMosix-2.4.20-2.gz /usr/src/linux-2.4.20 cd /usr/src/linux-2.4.20 gunzip openMosix-2.4.20-2.gz patch -Np1 < openMosix-2.4.20-2 |
... CONFIG_MOSIX=y # CONFIG_MOSIX_TOPOLOGY is not set CONFIG_MOSIX_UDB=y # CONFIG_MOSIX_DEBUG is not set # CONFIG_MOSIX_CHEAT_MIGSELF is not set CONFIG_MOSIX_WEEEEEEEEE=y CONFIG_MOSIX_DIAG=y CONFIG_MOSIX_SECUREPORTS=y CONFIG_MOSIX_DISCLOSURE=3 CONFIG_QKERNEL_EXT=y CONFIG_MOSIX_DFSA=y CONFIG_MOSIX_FS=y CONFIG_MOSIX_PIPE_EXCEPTIONS=y CONFIG_QOS_JID=y ... |
make config | menuconfig | xconfig |
现在使用以下命令编译它
make dep bzImage modules modules_install |
重新启动,您的 openMosix 集群节点就启动了!
在启动 openMosix 之前,必须有一个 /etc/openmosix.map 配置文件,该文件在每个节点上必须相同。
标准现在是 /etc/openmosix.map,/etc/mosix.map 和 /etc/hpc.map 是旧标准,但工具的 CVS 版本是向后兼容的,并查找 /etc/openmosix.map、/etc/mosix.map 和 /etc/hpc.map(按该顺序)。
openmosix.map 文件包含三个空格分隔的字段
openMosix-Node_ID IP-Address(or hostname) Range-size |
1 node1 1 2 node2 1 3 node3 1 4 node4 1 |
1 192.168.1.1 1 2 192.168.1.2 1 3 192.168.1.3 1 4 192.168.1.4 1 |
1 192.168.1.1 4 |
如果一个节点有多个网络接口,则可以使用 range-size 字段中的 ALIAS 选项进行配置(相当于将 range-size 设置为 0),例如
1 192.168.1.1 1 2 192.168.1.2 1 3 192.168.1.3 1 4 192.168.1.4 1 4 192.168.10.10 ALIAS |
始终确保在您的集群的每个节点上运行相同的 openMosix 版本和配置!
在每个节点上使用 "setpe" 实用程序启动 openMosix
setpe -w -f /etc/openmosix.map |
或者,您可以获取 "openmosix" 脚本,该脚本可以在 userspace-tools 的 scripts 目录中找到,将其复制到 /etc/init.d 目录,chmod 0755 它,然后以 root 身份使用以下命令
/etc/init.d/openmosix stop /etc/init.d/openmosix start /etc/init.d/openmosix restart |
安装现已完成:集群已启动并正在运行 :)
首先,必须在内核配置中启用 CONFIG_MOSIX_FS 选项。 如果当前内核在编译时未启用此选项,则需要重新编译并启用此选项。
此外,集群节点文件系统上的 UID(用户 ID)和 GID(组 ID)必须相同。 您可能希望使用 openldap 来完成此操作。 内核中的 CONFIG_MOSIX_DFSA 选项是可选的,但如果应该使用 DFSA,则当然是必需的。 要在集群上挂载 oMFS,每个节点的 /etc/fstab 中都必须有一个额外的 fstab 条目。
为了启用 DFSA
mfs_mnt /mfs mfs dfsa=1 0 0 |
mfs_mnt /mfs mfs dfsa=0 0 0 |
[device_name] [mount_point] mfs defaults 0 0 |
借助一些符号链接,所有集群节点都可以访问相同的数据,例如 node1 上的 /work
on node2 : ln -s /mfs/1/work /work on node3 : ln -s /mfs/1/work /work on node3 : ln -s /mfs/1/work /work ... |
以下特殊文件从 oMFS 中排除
/proc 目录
不是常规文件、目录或符号链接的特殊文件(例如 /dev/hda1)
创建如下链接
ln -s /mfs/1/mfs/1/usr |
ln -s /mfs/1/mfs/3/usr |
以下系统调用在 DFSA 挂载的文件系统上运行时,无需将迁移的进程(在其主(远程)节点上执行此调用)返回到其主节点
read, readv, write, writev, readahead, lseek, llseek, open, creat, close, dup, dup2, fcntl/fcntl64, getdents, getdents64, old_readdir, fsync, fdatasync, chdir, fchdir, getcwd, stat, stat64, newstat, lstat, lstat64, newlstat, fstat, fstat64, newfstat, access, truncate, truncate64, ftruncate, ftruncate64, chmod, chown, chown16, lchown, lchown16, fchmod, fchown, fchown16, utime, utimes, symlink, readlink, mkdir, rmdir, link, unlink, rename
以下是在 DFSA 挂载的文件系统上系统调用可能无法工作的情况
集群节点上不同的 mfs/dfsa 配置
如果第二个文件指针是非 DFSA,则 dup2
如果父目录是非 DFSA,则 chdir/fchdir
离开 DFSA 文件系统的路径名
当执行系统调用的进程正在被跟踪时
如果有对执行系统调用的进程的待处理请求
除了 /mfs/1/、/mfs/2/ 等文件之外,您还将找到一些其他目录。
表 4-1. 其他目录
/mfs/here | 您的进程当前运行的节点 |
/mfs/home | 您的主节点 |
/mfs/magic | 由 "creat" 系统调用(或带有 "O_CREAT" 选项的 "open")使用时的当前节点 - 否则,是上次成功创建 oMFS magic 文件的节点(这对于创建临时文件,然后立即取消链接它们非常有用) |
/mfs/lastexec | 进程上次成功发出 "execve" 系统调用的节点。 |
/mfs/selected | 您通过进程自身或其祖先之一(在 fork 此进程之前)选择的节点,将数字写入 "/proc/self/selected"。 |
请注意,这些 magic 文件都是“per process”的。 也就是说,它们的内容取决于哪个进程打开它们。
关于 openMFS 的最后一点说明是,有些版本在您在这些文件系统上运行 "df" 时会返回错误的结果。 如果您突然在这些系统上拥有大约 1.3 TB 的可用空间,请不要感到惊讶。