連載
» 2002年09月10日 00時00分 UPDATE

LFSで作って学ぶLinuxの仕組み(1):ソースファイルからLinux環境を構築しよう! (2/3)

[一志達也,@IT]

LFS用パーティションの作成

 今回紹介する準備作業のうち、最も厄介なのがこの作業になるだろう。これからLinux環境を構築するのであれば、インストール時にパーティションを用意すればいいから特別苦労する必要はない。LFSで構築したい環境にもよるが、100Mbytesから1Gbytes程度の間で、ディスク容量と相談してパーティションを作ればいい。しかし、すでに構築済みの環境では、マウントポイントを割り当てていないパーティションなど用意していないだろう。新たにパーティションを捻出する方法はいくつか考えられるが、ここでは安全性と手軽さの高い順に紹介しておこう。

 いずれにしても、LFS用に作成したパーティションを既存のLinuxで「/mnt/lfs」にマウントする。マウントポイントは好きな名前で構わない(/mnt/lfsでなくてもよい)のだが、/mnt/lfsとすれば本稿やLFS BOOKと統一が図れる。マウントポイントを異なる名前にする場合は、適宜読み替えてほしい。

  • 新規インストール
     現状の環境に未練がなければ、Linuxをインストールし直すのが手っ取り早い。ソフトウェアの再インストールやデータの移し替えは必要になるが、最も手軽で安全性も高い。
  • ディスクの追加
     ディスクを追加すれば、当然新しいパーティションを作成できる。この方法は、安全性は高いものの、コストが掛かる点が手軽とはいい難い。具体的な手順は割愛する。
  • 既存のパーティションの統廃合
     最も現実的だが、手軽さや安全性に欠けるのがこの方法である。この方法は、既存のパーティションに格納されたデータを別のパーティションに移動する。そして、空になったパーティションをLFS用にマウントし直して再利用する。当然ながら、パーティションが1つしかない環境では統廃合しようがない。

 既存のパーティションを統廃合する方法を概念図で表すと図2のようになるのだが、どれをどこに移動してもいいというわけではない。移動するパーティション(マウントポイント)の受け入れ先は、親子関係にあるマウントポイントに限定される。さらに、システム稼働中に移動可能なものを選ぶ必要がある。

図2 パーティションを統廃合し、LFS用のパーティションを作り出す 図2 パーティションを統廃合し、LFS用のパーティションを作り出す

 例えば、/homeを/usrのパーティションに移動しようにも、/usrがマウントポイントだから移動できない(図3)。/homeが移動できるのは、親ディレクトリである/のパーティションに限られる。/homeのサブディレクトリが独立したパーティションになっていれば強引に統合できなくもないが、手続きは面倒にならざるを得ない。

図3 パーティションの統廃合はどこでも可能というわけではない 図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つだけで進めることとする。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。