Difference between revisions of "Change Root (日本語)"

From ArchWiki
Jump to: navigation, search
m (システムメンテナンスを行う)
m (Change root)
Line 64: Line 64:
  
 
{{Note|{{ic|chroot: cannot run command '/bin/bash': Exec format error}} というエラーがでたら、アーキテクチャが一致していないおそれがあります。}}
 
{{Note|{{ic|chroot: cannot run command '/bin/bash': Exec format error}} というエラーがでたら、アーキテクチャが一致していないおそれがあります。}}
 +
{{Note|{{ic|chroot: '/bin/bash': permission denied}} というエラーが出る場合、exec パーミッションでマウントしなおして下さい: {{ic|mount -o remount,exec /mnt/arch}}.}}
  
 
Bash の設定 ({{ic|~/.bashrc}} もしくは {{ic|/etc/bash.bashrc}}) を source コマンドで反映させることもできます:
 
Bash の設定 ({{ic|~/.bashrc}} もしくは {{ic|/etc/bash.bashrc}}) を source コマンドで反映させることもできます:

Revision as of 04:49, 27 March 2013

Chroot は見かけのルートディレクトリ(と動いているプロセスとその子プロセス群)を別のディレクトリに変更する操作です。ルートディレクトリを変更している間はディレクトリ外のファイルやコマンドにアクセスできなくなります。そのため chroot監獄 と呼ばれます。ルートディレクトリを変更することは通常システムのメンテナンスに使われます。例えばブートローダを再インストールしたりパスワードを再設定するときなどです。

要件

  • 他の Linux 環境からブートする必要があります(LiveCD や USB メディア、別にインストールされたディストリビューションなど)。
  • chroot を行うには root 権限が必要です。
  • ブートした Linux 環境のアーキテクチャが、chroot しようとしているルートディレクトリのアーキテクチャと一致しているか確認してください。(つまり i686 なのか x86_64 なのか)。アーキテクチャの確認は次のコマンドで行えます:
# uname -m
  • chroot 環境でカーネルモジュールのロードをしたい場合、chroot する前にロードしてください。スワップを有効にしたり (swapon /dev/sdxY)、インターネットに接続すると役立つかもしれません。

パーティションをマウント

chroot しようとしているルートパーティションをマウントする必要があります。割り当てられたデバイス名を見つけて下さい:

# lsblk /dev/sda

パーティションレイアウトを知るには、次のコマンドを使ってください.

# fdisk -l

そして好きな場所にディレクトリを作り、マウントします:

# mkdir /mnt/arch
# mount /dev/sda3 /mnt/arch

次に、あなたシステムのパーティションが分割されている場合 (/boot, /home, /var, etc)、それらもマウントする必要があります:

# mount /dev/sda1 /mnt/arch/boot/
# mount /dev/sdb5 /mnt/arch/home/
# mount ...

chroot した後もファイルシステムをマウントすることはできますが、事前に行ったほうが便利です。なぜなら chroot を解除したあとアンマウントする必要があるためです。またシャットダウンの安全性を高める利点もあります。外部の Linux はすべてのマウントされたパーティションを把握していて、シャットダウン中に安全にアンマウントしてくれるはずです。

Change root

一時ファイルシステムをマウントします:

Note: 2012年の新しい Arch Linux から、以下の mount コマンドは arch-chroot /mnt/arch に置き換えられます。ルートパーティションがそこでマウントされている時に有効です。勿論、以下のコマンドも依然使うことができます。(もし望むなら他の "live" ディストリビューションでも)。
# cd /mnt/arch
# mount -t proc proc proc/
# mount -t sysfs sys sys/
# mount -o bind /dev dev/
# mount -t devpts pts dev/pts/

インターネット接続を chroot 環境で使いたいときは、DNS サーバーの設定をコピーする必要があるかもしれません:

# cp -L /etc/resolv.conf etc/resolv.conf

それでは chroot を使いましょう:

# chroot . /bin/bash
Note: chroot: cannot run command '/bin/bash': Exec format error というエラーがでたら、アーキテクチャが一致していないおそれがあります。
Note: chroot: '/bin/bash': permission denied というエラーが出る場合、exec パーミッションでマウントしなおして下さい: mount -o remount,exec /mnt/arch.

Bash の設定 (~/.bashrc もしくは /etc/bash.bashrc) を source コマンドで反映させることもできます:

# source ~/.bashrc
# source /etc/profile

必要なら bash のプロンプトに chroot を使っているとわかるようにできます:

# export PS1="(chroot) $PS1"

グラフィカルアプリケーションを動かす

システムで X を動かしているならば、GUI アプリケーションを chroot 環境から起動できます。

X サーバーに接続することを許可するために、ターミナルに次のように打ち込んで下さい:

# xhost +

そして、アプリケーションを X サーバーにつなげます:

# export DISPLAY=:0.0

システムメンテナンスを行う

この時点で chroot 環境で必要なシステムメンテナンスを行えます。例えば:

chrootを終了する

システムメンテナンスが終わったら、chroot を終了します:

# exit

そして一時ファイルシステムやデバイスをアンマウントしてください:

# umount {proc,sys,dev,boot,[...],}

最後にルートパーティションをアンマウントして完了です:

# cd ..
# umount arch/
Note: /mnt (やその他のパーティション)が busy であるというエラーが出た場合、次の可能性があります:
  • chroot 内でまだプログラムが動いている
  • サブマウントが存在している。(例えば /mnt/arch の中に /mnt/arch/boot がある)。こちらのほうが可能性が高いです、lsblk を使いマウントポイントを確認してください:
lsblk /dev/sda
それでもパーティションがアンマウントできない時は --force オプションを使って下さい:
# umount -f /mnt

これで、安全に再起動することができます。