看看这个例子:
64位系统:
[email protected] ~/RPM $ ldd /bin/ls
linux-vdso.so.1 (0x00007fffef200000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f4b7b9d8000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4b7b7b0000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f4b7b5a8000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f4b7b398000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4b7afe8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4b7bc30000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4b7ade0000)
libpcre.so.3 => /lib64/libpcre.so.3 (0x00007f4b7ab98000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f4b7a990000)
[email protected] ~/RPM $ sudo chroot hsh/chroot/ /bin/bash
[sudo] password for alex:
[[email protected] /]#
但chroot环境(用于构建)是32位位:
[[email protected] /]# ldd /bin/ls
linux-gate.so.1 (0xf7752000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf76f8000)
libselinux.so.1 => /lib/libselinux.so.1 (0xf76d0000)
libcap.so.2 => /lib/libcap.so.2 (0xf76c8000)
libacl.so.1 => /lib/libacl.so.1 (0xf76b8000)
libc.so.6 => /lib/libc.so.6 (0xf7540000)
/lib/ld-linux.so.2 (0xf7730000)
libpcre.so.3 => /lib/libpcre.so.3 (0xf74f8000)
libdl.so.2 => /lib/libdl.so.2 (0xf74f0000)
libattr.so.1 => /lib/libattr.so.1 (0xf74e8000)
[[email protected] /]#
请注意ldd输出的差异。版本号coreutils(和ls)基本相同。据我所知,使用64位内核可能有一个缺点。在64位模式下,内核本身和控制结构(内核代码指令为64位)需要更多内存。除此之外,我没有注意到这种配置中的任何问题。
BTW运行的系统,其中,32位和64二进制文件和库共存在单个系统中称为多拱(在上面的例子中没有多拱,因为第二系统有它自己的,独立的文件系统,以我已经chrooted)。据我所知,Debian和Ubuntu都有一个可行的多拱形支持,并且apt的单个实例可以完美地管理32位和64位的套件组。
因此,理论上你可以做一个“慢速迁移”,只需在他们的32位对应物旁边安装64位库,并逐个替换32位到64位的二进制文件。当然,这不会是一个最快的方法;-)但它可以变得几乎完美无缺,没有很长的停机时间或软件版本或行为的意外变化。当然,你的里程可能会有所不同,你应该仔细检查你的条件,环境等等。