32bit版debianを64bit版へアップグレードする方法

再インストールせずに 32bit版 debian を 64bit版 debian へ手動で更新したので,手順をメモします.

手順は大まかに言うと

  • カーネルだけ 64bit 化
  • 64bit カーネルで再起動.この時点ではプログラム,ライブラリは32bitのまま
  • 64bit版の apt-get が出来るchroot環境を用意
  • apt-get で プログラム・ライブラリを64bit 版のものに差し替え

という流れになります.

なおこの作業は,手順を間違うと,システムが起動しなくなるなど,非常に罠が多いです.実際に挑戦するときは,最悪再インストールすることも念頭において作業してください.

予備知識

現在のカーネルが32bit版か64bit版かを確認するには "uname" コマンドを使います.

$ uname -m
i686

i686 なら現在のカーネルは32bit版.x86_64なら64bit版です.


Linuxの64bit版カーネルには"32bitエミュレーション*1"という機能があり,カーネルは64bit,バイナリ(コマンドとかライブラリ)は32bitという組み合わせが可能です.

バイナリが32bit版か64bit版かを確認するには "file" コマンドを使います.

$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

と "32-bit"とか"Intel 80386"があるのが 32bit版.

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, ...

と "64bit"とか "x86-64" と表示されるのが 64bit版です.

カーネルだけ64bit化

まず,カーネル周りだけ64bit化します.

sudo apt-get install amd64-libs linux-image-2.6-amd64

これで再起動します.

再起動後,unameコマンドでカーネルが64bit化されていることを確認.

$ uname -m
x86_64

ただしこの状態では,まだシステムの大部分は 32bit モードで動作しています.たとえば /bin/ls は

$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

となり"80386"つまり32bitのまま.

そこで,apt-get を使って,32bit版バイナリをどんどん64bit版バイナリに差し替えていきます.

各パッケージを64bit化

まず作業用に pure 64bit なchroot環境を作成します.作業は root で行います.

# mkdir /chroot64
# apt-get install debootstrap
# debootstrap --arch amd64 sid /chroot64 http://ftp.debian.org/debian

ディレクトリを bind マウントします

# mkdir -p /chroot64/old
# mount -o bind / /chroot64/old
# mount -o bind /chroot64/var/cache/apt/archives /var/cache/apt/archives

chrootで pure 64bitな環境に切り替えます

# chroot /chroot64
# apt-get install ia32-libs libc6-i386 openssh-server openssh-client mc
# apt-get dist-upgrade

以上で,切り替え完了です.


最新Debian GNU/Linux完全攻略ガイド
天野 正樹
秀和システム
売り上げランキング: 623382

*1:カーネルコンパイル時に config のCONFIG_IA32_EMULATIONでOn/Offできる