01.分区准备
时间:2006-11-17 来源:anima
构建LFS-6.2
宿主系统:
CentOS 4.4
[root@fish ~]# uname -r
2.6.9-42.0.3.EL
构建者:anima
构建始于:2006-11-12
一、分区准备:
1、查看磁盘分区情况:
[root@fish ~]# /sbin/sfdisk -l /dev/hda
Disk /dev/hda: 158816 cylinders, 16 heads, 63 sectors/track
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Warning: The partition table looks like it was made
for C/H/S=*/255/63 (instead of 158816/16/63).
For this listing I'll assume that geometry.
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 652 653- 5245191 7 HPFS/NTFS
/dev/hda2 653 8513 7861 63143482+ f W95 Ext'd (LBA)
/dev/hda3 8514 9963 1450 11647125 8e Linux LVM
/dev/hda4 0 - 0 0 0 Empty
/dev/hda5 653+ 1305 653- 5245191 c W95 FAT32 (LBA)
/dev/hda6 1306+ 3264 1959- 15735636 7 HPFS/NTFS
start: (c,h,s) expected (1023,254,63) found (1023,1,63)
/dev/hda7 3265+ 5875 2611- 20972826 7 HPFS/NTFS
start: (c,h,s) expected (1023,254,63) found (1023,1,63)
/dev/hda8 5876+ 7181 1306- 10490413+ c W95 FAT32 (LBA)
start: (c,h,s) expected (1023,254,63) found (1023,1,63)
/dev/hda9 7182+ 8487 1306- 10490413+ 83 Linux
start: (c,h,s) expected (1023,254,63) found (1023,1,63)
/dev/hda10 8488+ 8513 26- 208813+ 83 Linux
start: (c,h,s) expected (1023,254,63) found (1023,1,63)
[root@fish ~]#
(分区有点问题)
决定把LFS安装在/dev/hda9。
2、Configure 脚本的问题
如果执行 configure 脚本的时候,某个地方出错了,请检查 config.log 文件,这个文件可能包含 configure 过程中没有输出到屏幕的错误,如果您需要请求帮助,请把这里面相关信息也包含进去。
3、准备一个新分区
为 LFS 系统准备一个分区。步骤是创建一个新的磁盘分区并在这个分区上创建文件系统,然后挂载它。
像大多数其他操作系统一样,LFS 通常安装在一个新的专用分区上。
建立一个最小的系统需要 1.3GB 左右的分区,这样才能有足够的空间存储并编译所有的源码包。当然,如果您打算把 LFS 作为您的主 Linux 系统,您可能会在上面安装其它软件,那么您就需要更大的空间(2~3GB)。LFS 系统本身并不占用这么多空间,所需的空间大部分用来为软件编译提供足够的临时空间,编译软件包的时候需要使用大量的临时空间,软件包装好之后这些临时空间可以回收。
因为编译过程中内存(RAM)并不总是够用的,所以最好使用一个小的硬盘分区作为交换空间。内核使用交换空间来存放不常用到的数据,以便为正在运行的进程腾出内存空间。LFS 系统使用的交换分区与宿主系统使用的交换分区可以是同一个,因此当宿主系统已经有交换分区的时候就不必为 LFS 系统再创建一个了。
启动一个磁盘分区程序,例如 cfdisk 或者 fdisk ,用即将在上面创建新分区的硬盘名字作为命令行选项,比如主IDE硬盘名字就是 /dev/hda 。创建一个 Linux 本地分区,需要的话,还要创建一个交换分区。如果还不知道如何使用这两个工具,参考 cfdisk(8) 或者 fdisk(8) 手册页。
记住新分区的名称(比如 hda5),交换分区的名称也要记住,这些分区的名称以后将在 /etc/fstab 文件中用到。
在新分区上创建文件系统:
空白分区建立之后,现在可以在上面创建文件系统了。
要在 LFS 分区上创建 ext3 文件系统,请运行下面的命令:
mke2fs -jv /dev/<xxx>
用您创建的 LFS 分区的名称替换 <xxx> (如 hda5)。
有些宿主系统在文件系统创建工具(E2fsprogs)中使用了自定义的增强特性。这可能会导致在重启进入新的 LFS 系统时出现问题。因为这些特性并不被 LFS 安装的 E2fsprogs 支持,将会得到一个类似于"unsupported filesystem features, upgrade your e2fsprogs"的错误。可以使用下面的命令来检查宿主系统是否使用了自定义的增强特性:
[root@fish ~]# /sbin/debugfs -R feature /dev/hda9
debugfs 1.35 (28-Feb-2004)
Filesystem features: has_journal ext_attr resize_inode filetype needs_recovery sparse_super large_file
如果输出的特性不同于:has_joural, dir_index, filetype, large_file, resize_inode, sparse_super 或 needs_recovery , 那么就说明宿主系统使用了自定义的增强特性。在这种情况下,为了避免后面的问题,需重新编译 E2fsprogs 包,然后用这个重新编译过的工具来创建将要用来安装 LFS 系统的文件系统:
cd /tmp
tar -xjvf /path/to/sources/e2fsprogs-1.39.tar.bz2
cd e2fsprogs-1.39
mkdir -v build
cd build
../configure
make #note that we intentionally don't 'make install' here!
./misc/mke2fs -jv /dev/<xxx>
cd /tmp
rm -rfv e2fsprogs-1.39
如果创建了交换分区,那么还需要用下面的命令进行格式化,如果使用已有的交换分区,那么就不需要格式化了。
mkswap /dev/<yyy>
用创建的交换分区的名称替换 <yyy> 。
[root@fish lfs-packages-6.2]# /sbin/mkfs.ext3 -j /dev/hda9
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
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
Maximum filesystem blocks=2688548864
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
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@fish lfs-packages-6.2]# /sbin/debugfs -R feature /dev/hda9
debugfs 1.35 (28-Feb-2004)
Filesystem features: has_journal resize_inode filetype sparse_super large_file
[root@fish lfs-packages-6.2]# tar zxvf e2fsprogs-1.39.tar.gz
[root@fish lfs-packages-6.2]# cd e2fsprogs-1.39
[root@fish e2fsprogs-1.39]# mkdir -v build
[root@fish e2fsprogs-1.39]# cd build/
[root@fish build]# ../configure
[root@fish build]# make
[root@fish build]# ./misc/mke2fs -jv /dev/hda9
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1311744 inodes, 10490412 blocks
524520 blocks (5.00%) reserved for the super user
First data block=1
1281 block groups
8192 blocks per group, 8192 fragments per group
1024 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
1024001, 1990657, 2809857, 5120001, 5971969
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@fish build]# cd ../../
[root@fish lfs-packages-6.2]# rm -fR e2fsprogs-1.39
[root@fish lfs-packages-6.2]#
4、挂载新分区
创建文件系统之后,要让分区可以访问,需要把分区挂载到一个选定的挂载点上。假定文件系统挂载到 /mnt/lfs ,也可以选择别的目录。
选定一个挂载点,并指定给 LFS 环境变量,运行命令:
export LFS=/mnt/lfs
下一步,创建这个挂载点,并挂载 LFS 文件系统,运行命令:
mkdir -pv $LFS
mount -v -t ext3 /dev/<xxx> $LFS
用创建的 LFS 分区名称替换 <xxx> 。
如果 LFS 装在多个分区上(比如一个分区用于 / 目录,另一个分区用于 /usr 目录),用下面的命令挂载它们:
mkdir -pv $LFS
mount -v -t ext3 /dev/<xxx> $LFS
mkdir -v $LFS/usr
mount -v -t ext3 /dev/<yyy> $LFS/usr
用相应的分区名称替换 <xxx> 和 <yyy> 。
请确认挂载新分区的时候没有使用太多的限制选项(如 nosuid, nodev, noatime 选项)。运行不带参数的 mount 命令看看挂载的 LFS 分区设置了什么选项,如果出现了 nosuid, nodev, noatime 选项之一,您就需要重新挂载这个分区。
[root@fish lfs-packages-6.2]# export LFS=/mnt/lfs
[root@fish lfs-packages-6.2]# mkdir -pv $LFS
mkdir: 已创建目录 ‘/mnt/lfs’
[root@fish lfs-packages-6.2]# mount -v -t ext3 /dev/hda9 $LFS
/dev/hda9 on /mnt/lfs type ext3 (rw)
如果使用了交换分区,可以使用下述 swapon 命令确保它被启用了:
/sbin/swapon -v /dev/<zzz>
将 <zzz> 替换为正确的交换分区名。
现在工作的空间已经建立好了。
5.关于环境变量 $LFS
环境变量 LFS 的使用贯穿全书。保持 LFS 总是已定义是很重要的,它应该被设置为 LFS 分区的挂载点。用下面的命令检查它的设置是否恰当:
echo $LFS
请确认输出的是 LFS 分区挂载点的路径,如果您遵循我们的例子,则应该是 /mnt/lfs 。如果输出结果不正确,用下述命令设置它:
export LFS=/mnt/lfs
设置这个环境变量的好处是您以后可以按照原样输入形如 mkdir $LFS/tools 的命令,当 shell 处理这个命令行的时候,会自动用"/mnt/lfs"(或者该环境变量所设定的值)替换"$LFS" 。
当您离开然后重新进入当前工作环境的时候(像 su 到 root 或者其他用户),不要忘记检查 $LFS 是否设置正确。