今回紹介する準備作業のうち、最も厄介なのがこの作業になるだろう。これからLinux環境を構築するのであれば、インストール時にパーティションを用意すればいいから特別苦労する必要はない。LFSで構築したい環境にもよるが、100Mbytesから1Gbytes程度の間で、ディスク容量と相談してパーティションを作ればいい。しかし、すでに構築済みの環境では、マウントポイントを割り当てていないパーティションなど用意していないだろう。新たにパーティションを捻出する方法はいくつか考えられるが、ここでは安全性と手軽さの高い順に紹介しておこう。
いずれにしても、LFS用に作成したパーティションを既存のLinuxで「/mnt/lfs」にマウントする。マウントポイントは好きな名前で構わない(/mnt/lfsでなくてもよい)のだが、/mnt/lfsとすれば本稿やLFS BOOKと統一が図れる。マウントポイントを異なる名前にする場合は、適宜読み替えてほしい。
- 新規インストール
現状の環境に未練がなければ、Linuxをインストールし直すのが手っ取り早い。ソフトウェアの再インストールやデータの移し替えは必要になるが、最も手軽で安全性も高い。
- ディスクの追加
ディスクを追加すれば、当然新しいパーティションを作成できる。この方法は、安全性は高いものの、コストが掛かる点が手軽とはいい難い。具体的な手順は割愛する。
- 既存のパーティションの統廃合
最も現実的だが、手軽さや安全性に欠けるのがこの方法である。この方法は、既存のパーティションに格納されたデータを別のパーティションに移動する。そして、空になったパーティションをLFS用にマウントし直して再利用する。当然ながら、パーティションが1つしかない環境では統廃合しようがない。
既存のパーティションを統廃合する方法を概念図で表すと図2のようになるのだが、どれをどこに移動してもいいというわけではない。移動するパーティション(マウントポイント)の受け入れ先は、親子関係にあるマウントポイントに限定される。さらに、システム稼働中に移動可能なものを選ぶ必要がある。
図2 パーティションを統廃合し、LFS用のパーティションを作り出す
例えば、/homeを/usrのパーティションに移動しようにも、/usrがマウントポイントだから移動できない(図3)。/homeが移動できるのは、親ディレクトリである/のパーティションに限られる。/homeのサブディレクトリが独立したパーティションになっていれば強引に統合できなくもないが、手続きは面倒にならざるを得ない。
図3 パーティションの統廃合はどこでも可能というわけではない
いずれにしても、この作業は危険を伴うので、間違いは即事故につながる。データが消えてしまうどころか、最悪の場合は二度と起動できなくなるかもしれない。パーティションやマウントに関する知識が十分でないなら、詳しい人の助けを得た方がいいだろう。
ここでは、/usr/localを/usrに移動して、空いたパーティションをLFS用とする例を紹介する(編注)。この手順を参考に、作業していただければいいだろう。
編注:ディスクを増設したり未使用だったパーティションを利用する場合は、パーティションを切ったうえで以下の「ファイルシステムの作成」から読んでいただければよい。
パーティションの容量、空き具合などを確認する。移動される側の空き容量が十分か、移動する側のデバイス名は何かを特に確認しておきたい。万が一に備えて、全体をメモしておくくらいの慎重さが欲しい。
# df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda7 5162796 130916 4769624 3% /
/dev/hda1 8096152 4356 7680536 1% /boot
/dev/hda5 10325748 87428 9713800 1% /home
/dev/hdb1 10325748 184220 9617008 2% /mnt/lfs
/dev/hdb5 2071384 88 1966072 1% /tmp
/dev/hda8 4134900 1105528 2819324 29% /usr
/dev/hda6 10325748 452 9800776 1% /usr/local
デバイス名 マウントポイント |
df -kでは、デバイス名とマウントポイントのほかに容量もチェックできる。また、mountコマンドは容量はチェックできないが、マウントポイントとデバイスが簡単に確認できる。
編注:以下、/dev/hda6にインストールするという前提で話を進める。インストール先デバイス名は、自分の環境に合わせて読み替えてほしい。
パーティションを削除する前に、データをtarで圧縮して確保しておく。マウントポイント以下を、ディレクトリごと圧縮するのがポイント。当然ながら、作業はrootユーザーで行い、/ディレクトリに保存しておくと展開も楽にできる。
# tar -cvf /backup.tar /usr/local/
tar: Removing leading `/' from member names
usr/local/
usr/local/lost+found/
usr/local/bin/
usr/local/doc/
usr/local/etc/
usr/local/games/
usr/local/include/
usr/local/lib/
usr/local/libexec/
usr/local/sbin/
usr/local/share/
usr/local/share/info/
usr/local/share/man/
usr/local/share/man/man1/
usr/local/share/man/man2/
usr/local/share/man/man3/
usr/local/share/man/man4/
usr/local/share/man/man5/
usr/local/share/man/man6/
usr/local/share/man/man7/
usr/local/share/man/man8/
usr/local/share/man/man9/
usr/local/share/man/mann/
usr/local/src/
usr/local/man/
usr/local/man/man1/
usr/local/man/man1/appletviewer.1
usr/local/man/man1/extcheck.1
usr/local/man/man1/jar.1
usr/local/man/man1/jarsigner.1
usr/local/man/man1/java.1
usr/local/man/man1/javac.1
usr/local/man/man1/javadoc.1
usr/local/man/man1/javah.1
usr/local/man/man1/javap.1
usr/local/man/man1/jdb.1
usr/local/man/man1/keytool.1
usr/local/man/man1/native2ascii.1
usr/local/man/man1/rmic.1
usr/local/man/man1/rmid.1
usr/local/man/man1/rmiregistry.1
usr/local/man/man1/serialver.1
usr/local/man/man1/tnameserv.1
# ls -la backup*
-rw-r--r-- 1 root root 327680 8月 29 18:35 backup.tar |
データを保存したら、対象のパーティションをアンマウントする。アンマウントしてもディスク上のデータが消えるわけではないが、OSから見えない状態になる。
# umount /usr/local
# df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda7 5162796 130916 4769624 3% /
/dev/hda1 8096152 4356 7680536 1% /boot
/dev/hda5 10325748 87428 9713800 1% /home
/dev/hdb1 10325748 184220 9617008 2% /mnt/lfs
/dev/hdb5 2071384 88 1966072 1% /tmp
/dev/hda8 4134900 1105528 2819324 29% /usr
# ls -la /usr/local
drwxr-xr-x 2 root root 4096 8月 29 18:27 ./
drwxr-xr-x 18 root root 4096 8月 29 18:02 ../ |
データがOSから見えない状態になったところで、保存しておいたデータを移動される側のパーティションに展開する。この場合、/usr/localを/usrに移動するため、ディレクトリなどを特に作成せずにそのまま展開すればよい。展開できたら、データが見えていることを確認する。
# tar -xvf /backup.tar
usr/local/
usr/local/lost+found/
usr/local/bin/
usr/local/doc/
usr/local/etc/
usr/local/games/
usr/local/include/
usr/local/lib/
usr/local/libexec/
usr/local/sbin/
usr/local/share/
usr/local/share/info/
usr/local/share/man/
usr/local/share/man/man1/
usr/local/share/man/man2/
usr/local/share/man/man3/
usr/local/share/man/man4/
usr/local/share/man/man5/
usr/local/share/man/man6/
usr/local/share/man/man7/
usr/local/share/man/man8/
usr/local/share/man/man9/
usr/local/share/man/mann/
usr/local/src/
usr/local/man/
usr/local/man/man1/
usr/local/man/man1/appletviewer.1
usr/local/man/man1/extcheck.1
usr/local/man/man1/jar.1
usr/local/man/man1/jarsigner.1
usr/local/man/man1/java.1
usr/local/man/man1/javac.1
usr/local/man/man1/javadoc.1
usr/local/man/man1/javah.1
usr/local/man/man1/javap.1
usr/local/man/man1/jdb.1
usr/local/man/man1/keytool.1
usr/local/man/man1/native2ascii.1
usr/local/man/man1/rmic.1
usr/local/man/man1/rmid.1
usr/local/man/man1/rmiregistry.1
usr/local/man/man1/serialver.1
usr/local/man/man1/tnameserv.1
# ls -la /usr/local
drwxr-xr-x 14 root root 4096 8月 26 21:59 ./
drwxr-xr-x 18 root root 4096 8月 29 18:38 ../
drwxr-xr-x 2 root root 4096 2月 7 1996 bin/
drwxr-xr-x 2 root root 4096 2月 7 1996 doc/
drwxr-xr-x 2 root root 4096 2月 7 1996 etc/
drwxr-xr-x 2 root root 4096 2月 7 1996 games/
drwxr-xr-x 2 root root 4096 6月 23 2001 include/
drwxr-xr-x 2 root root 4096 2月 7 1996 lib/
drwxr-xr-x 2 root root 4096 6月 23 2001 libexec/
drwx------ 2 root root 4096 8月 26 21:57 lost+found/
drwxr-xr-x 3 root root 4096 8月 26 21:59 man/
drwxr-xr-x 2 root root 4096 2月 7 1996 sbin/
drwxr-xr-x 4 root root 4096 8月 26 21:58 share/
drwxr-xr-x 2 root root 4096 2月 7 1996 src/ |
データの移動が確認できたら、アンマウントしておいたパーティションをフォーマットする。ここでは、mke2fsコマンド(編注)で行う。その際、ボリュームラベルを付けておくと、後で自動マウントの設定を行うときに便利である。フォーマットせずにデータを消すだけでも構わないのだが、その場合はボリュームラベルが残ってしまう。ここではそれを嫌ってフォーマットしているが、各自の判断で行えばいいだろう。
もしパーティションの再編成を望むなら、ここでfdiskを使ってもよい。
# mke2fs -L /mnt/lfs /dev/hda6
mke2fs 1.26 (3-Feb-2002)
Filesystem label=/mnt/lfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1311552 inodes, 2622603 blocks
131130 blocks (5.00%) reserved for the super user
First data block=0
81 block groups
32768 blocks per group, 32768 fragments per group
16192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override. |
編注:mke2fsコマンドの「-L」は、ボリュームラベルを付けるためのオプション。必須ではないが、ボリュームラベルを付けておくと分かりやすくなる。
フォーマットしたパーティションを/mnt/lfsにマウントしてみる。マウントポイントはOS側にあらかじめ作成しておく。
# mkdir -p /mnt/lfs
# mount /dev/hda6 /mnt/lfs |
マウントできることを確認したら、OS起動時に/mnt/lfsが自動でマウントされるようにする。古いマウントポイント(/usr/local)へのマウントが残っているので、それを新しいマウントポイント(/mnt/lfs)へマウントするように編集する。このとき、フォーマット時に付けたボリュームラベルかデバイス名が必要になる。
OS起動時に自動でマウントする設定は/etc/fstabに記述されているので、それを開いて編集する。一番左の項目がデバイス名かボリュームラベル、2番目がマウントポイントだ。ほかは特に修正する必要はないだろう。以下は、既存パーティションをLFSに転用する場合の例だ(ほかのパーティションについては、環境によって異なる)。新規にパーティションやハードディスクを追加した場合は、LFS用のパーティションの設定を追記するだけでよい。
LABEL=/ / ext2 defaults 1 1
LABEL=/boot /boot ext2 defaults 1 2
LABEL=/home /home ext2 defaults 1 2
/dev/fd0 /mnt/floppy auto noauto,owner 0 0
LABEL=/tmp /tmp ext2 defaults 1 2
LABEL=/usr /usr ext2 defaults 1 2
LABEL=/usr/local /usr/local ext2 defaults 1 2
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/hdb6 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0 |
/etc/fstab編集前 |
LABEL=/ / ext2 defaults 1 1
LABEL=/boot /boot ext2 defaults 1 2
LABEL=/home /home ext2 defaults 1 2
/dev/fd0 /mnt/floppy auto noauto,owner 0 0
LABEL=/tmp /tmp ext2 defaults 1 2
LABEL=/usr /usr ext2 defaults 1 2
LABEL=/mnt/lfs /mnt/lfs ext2 defaults 1 2
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/hdb6 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0 |
/etc/fstab編集後 |
これでLFSのためのパーティションの作成は終了である。ディスク容量の都合や使い勝手を意識するのであれば、/mnt/lfs/usrや/mnt/lfs/sbinなどを別のパーティションに作成してもよい。本連載では、LFSのためのパーティションは1つだけで進めることとする。