[ << ]
[ < ]
[ 主页 ]
[ > ]
[ >> ]
4. 预备磁盘
内容:
4.a. 块设备介绍
块设备
我们要好好了解下Gentoo Linux以及普通Linux中有关磁盘方面的知识,包括Linux文件系统、分区和块设备。然后,一旦你熟悉了磁盘和文件的方方面面,我们将会指导你设置分区和文件系统,为你安装Gentoo Linux做好准备。
一开始我们先介绍块设备。最有名的块设备可能就是Linux系统中表示第一个IDE硬盘的/dev/sda。SCSI硬盘和Serial ATA硬盘都是/dev/sda。如果你正在使用内核里新的libata架构,即便IDE硬盘也会是/dev/sd*。如果你用的是旧的设备架构,你的第一个IDE硬盘将是/dev/hda。
上面介绍的块设备代表磁盘的抽象接口。用户程序可以使用这些块设备来与你的磁盘进行交互,而不用理会你的驱动器到底是IDE、SCSI还是其他的。程序可以把磁盘当作一系列连续的、可随机访问的512字节大小的块来访问。
分区
尽管在理论上可以使用一整块磁盘来安装你的Linux系统,但是在实际中几乎从不这样做。相反,整个磁盘块设备被分割成更小、更容易管理的块设备。它们被称为分区。
4.b. 设计分区方案
多少和多大?
分区的数目主要根据你的系统环境来决定。例如,如果你有很多用户,你可能更希望把你的/home目录独立出来,因为这样做可以增加安全性,备份起来也更容易。如果你安装Gentoo用来做邮件服务器,你的/var目录应该独立出来,因为邮件都存储在/var目录中。选择一个好的文件系统将最大限度地提高你的系统性能。游戏服务器应该把/opt目录独立出来,因为大多数游戏服务端软件都安装在那。理由也与/home目录类似:安全与备份。你一定要使/usr目录保持足够大:因为它将不仅包含大部分应用程序,而且Portage树本身就需要大约500M空间,这还不包括存储在其中的各种源代码包。
正如你所看到的,这完全取决于你想要达到什么目的。独立的分区或卷有以下优点:
-
你可以为每一个分区或卷选择最佳性能的文件系统
-
如果一个有问题的工具不停地向一个分区或卷写文件,也不会把你整个系统的可用空间 都用完
-
如果需要,可以减少文件系统检测的时间,因为多个检测可以并行的进行(尽管这个优势在多磁盘系统上比多分区系统上更为明显)
-
通过对一些分区的进行只读、nosuid(忽略setuid位)、noexec(忽略可执行位)等方式 挂载,安全性会大大增强
然而,多分区系统有一大缺点:如果配置的不合理,可能导致系统中一个分区有很大的空闲空间,而另一个没有空闲空间了。SCSI和SATA还有15个分区的限制。
4.c. 使用MIPS上的fdisk来为你的磁盘分区
SGI机器:创建一个SGI盘标
SGI系统里的所有磁盘都需要一个SGI盘标,它和Sun和MS-DOS盘标的功能类似——保存有关磁盘分区的信息。创建一个新的SGI盘标将会在磁盘上创建两个特殊的分区:
-
SGI卷头(第9分区):这个分区很重要。这是引导程序保存的地方,某些情况下还保存内核镜像。
-
SGI卷(第11分区):这个分区的目的类似于Sun盘标的第三个分区“Whole disk”。这个分区跨越整个磁盘,不要碰它。除了以某种未知方式帮助PROM(或者IRIX会以某些方式用到它)之外,它没有其他什么特殊用途。
警告:
SGI卷头必须从柱面0开始。否则,你将不能从这个磁盘启动。
|
下面是从fdisk里截取出来的片段。请阅读它并修改它以适应你的需要……
代码 3.1: 创建SGI盘标 |
# fdisk /dev/sda
Command (m for help): x
Expert command (m for help): m
Command action
b move beginning of data in a partition
c change number of cylinders
d print the raw data in the partition table
e list extended partitions
f fix partition order
g create an IRIX (SGI) partition table
h change number of heads
m print this menu
p print the partition table
q quit without saving changes
r return to main menu
s change number of sectors/track
v verify the partition table
w write table to disk and exit
Expert command (m for help): g
Building a new SGI disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content will be irrecoverably lost.
Expert command (m for help): r
Command (m for help): p
Disk /dev/sda (SGI disk label): 64 heads, 32 sectors, 17482 cylinders
Units = cylinders of 2048 * 512 bytes
----- partitions -----
Pt# Device Info Start End Sectors Id System
9: /dev/sda1 0 4 10240 0 SGI volhdr
11: /dev/sda2 0 17481 35803136 6 SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----
Command (m for help):
|
注意:
如果你的磁盘已经有了一个SGI盘标,那么fdisk不将允许再创建一个新的盘标。有两个方法可以解决这个问题。一个是创建一个Sun或者MS-DOS盘标,把改动写入磁盘,然后重启fdisk。第二个是用空数据覆盖分区表,用这个命令:dd if=/dev/zero of=/dev/sda bs=512 count=1。
|
把SGI卷头调整到正好的大小
重要:
这一步通常是需要的,因为fdisk里的一个bug。由于某些原因,卷头不能被正确的创建,结果是它开始和结束都是在柱面0。这将导致不能创建多个分区。为了解决这个问题……请接着读。
|
既然SGI盘标已经建立了,下面就可以定义分区了。上面的例子为你定义了两个分区。这两个是特殊分区,一般不要改动它。不过,为了安装Gentoo,我们将需要加载引导程序,可能还有多个内核镜像(取决于系统类型)直接到卷头里。卷头本身可以保存最多八个任意大小的镜像,每个镜像的名字八个字符。
把卷头变大的过程不是很简单;需要一点小技巧。因为fdisk的奇怪行为,我们不能简单的删除并重新添加卷头。在下面提供的例子里,我们将创建一个50MB的卷头,以及一个50MB的/boot分区。你的磁盘的实际布局可能与此不同,下面这个只是一个示例。
代码 3.2: 正确的改变SGI卷头的大小 |
Command (m for help): n
Partition number (1-16): 1
First cylinder (5-8682, default 5): 51
Last cylinder (51-8682, default 8682): 101
Command (m for help): d
Partition number (1-16): 9
Command (m for help): n
Partition number (1-16): 9
First cylinder (0-50, default 0): 0
Last cylinder (0-50, default 50): 50
|
如果你不确定怎样使用fdisk,看一看下面Cobalts的分区指令。概念是完全一样的——只是要记得不要动卷头和whole disk分区。
这些完成后,你就可以任意创建其他的分区了。当所有的分区划分完毕后,记得把交换分区的ID改为82,也就是Linux Swap。如果不改,ID将为83,Linux Native。
现在分区已经创建完毕,你可以继续创建文件系统。
Cobalt机器:为你的磁盘分区
在Cobalt机器上,BOOTROM期望看到一个MS-DOS主引导扇区,所以分区是相对简单的——实际上,这和在Inter x86机器上分区是一样的。不过你要记得一些事情。
-
Cobalt固件要求/dev/sda1是一个格式化为EXT2 Revision 0的Linux分区。不可以是EXT2 Revision 1!(Cobalt BOOTROM只能理解EXT2r0)
-
前面说到的分区的根目录里必须有一个gzip压缩的ELF镜像,vmlinux.gz,它将会作为内核被加载
因为这个原因,我建议创建一个大约20MB的/boot分区,格式化为EXT2r0,以供你在里面安装CoLo和你的内核。这样你就能在你的根文件系统上运行一个现代文件系统(EXT3或者ReiserFS)。
我下面将假设你已经创建了/dev/sda1以便后来加载作为/boot分区。如果你希望把它作为/,你需要记得PROM的要求。
好了,我们继续……要创建分区,你在命令行提示符处键入fdisk /dev/sda。你需要知道的主要命令有这些:
-
o:清除旧的分区表,开启一个新的空MS-DOS分区表
-
n:新分区
-
t:改变分区类型
- 欲改为Linux Swap键入82,改为Linux FS键入83
-
d:删除分区
-
p:显示分区表
-
q:退出——不改动旧分区表。
-
w:退出——把当前分区表写入磁盘。
代码 3.3: 为磁盘分区 |
# fdisk /dev/sda
The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19870, default 1):
Last cylinder or +size or +sizeM or +sizeK (1-19870, default 19870): +20M
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 40 20128+ 83 Linux
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (41-19870, default 41):
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870):
Using default value 19870
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (41-19870, default 41):<Press ENTER>
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870): +500M
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (17294-19870, default 17294): <Press ENTER>
Using default value 17294
Last cylinder or +size or +sizeM or +sizeK (1011-19870, default 19870): <Press ENTER>
Using default value 19870
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks ID System
/dev/sda1 1 21 10552+ 83 Linux
/dev/sda2 22 19870 10003896 5 Extended
/dev/sda5 22 1037 512032+ 83 Linux
/dev/sda6 1038 5101 2048224+ 83 Linux
/dev/sda7 5102 9165 2048224+ 83 Linux
/dev/sda8 9166 13229 2048224+ 83 Linux
/dev/sda9 13230 17293 2048224+ 83 Linux
/dev/sda10 17294 19870 1298776+ 83 Linux
Command (m for help): t
Partition number (1-10): 10
Hex code (type L to list codes): 82
Changed system type of partition 10 to 82 (Linux swap)
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks ID System
/dev/sda1 1 21 10552+ 83 Linux
/dev/sda2 22 19870 10003896 5 Extended
/dev/sda5 22 1037 512032+ 83 Linux
/dev/sda6 1038 5101 2048224+ 83 Linux
/dev/sda7 5102 9165 2048224+ 83 Linux
/dev/sda8 9166 13229 2048224+ 83 Linux
/dev/sda9 13230 17293 2048224+ 83 Linux
/dev/sda10 17294 19870 1298776+ 82 Linux Swap
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#
|
现在分区已经创建完毕,你可以继续创建文件系统。
4.d. 创建文件系统
文件系统
有几种文件系统是可以使用的。ReiserFS、Ext2和Ext3在MIPS架构上是稳定的。其他的文件系统都是实验性质的。
ext2是经考验证明可靠的Linux文件系统,但是没有元数据日志,这意味这在启动系统时的ext2文件系统的日常检查相当耗时。现在相当一部分的新一代的日志文件系统都可以非常迅速检查一致性,因此比那些非日志文件系统更受欢迎。当你启动系统碰巧遇到文件系统状态不一致时,日志文件系统不会在那里耽搁很长时间。如果你要在一个很小的硬盘(小于4G)上装Gentoo,那么你需要在创建ext2文件系统时预留足够的inode,执行此命令mke2fs -T small /dev/<device>.
ext3是ext2文件系统的带日志版本,提供了元数据日志模式以快速恢复数据。此外还提供了其他增强的日志模式,如完整数据日志模式和有序数据日志模式。它使用了HTree索引,在几乎所有的情况下都能保持高性能。简而言之,ext3是非常好及可靠的文件系统。如果你要在一个很小的硬盘(小于4G)上装Gentoo,那么你需要在创建ext2文件系统时预留足够的inode,执行此命令mke2fs -T small /dev/<device>。
JFS是IBM的高性能日志文件系统。JFS是一个轻量级的、快速的和稳定的基于B+树的文件系统,在很多情况下都有很好的表现。
ReiserFS是基于B+树的文件系统,它有着非常全面的性能,特别时在处理很多小文件的时候,虽然会占用多一点CPU。ReiserFS相比其他文件系统显得受维护的不够。
XFS是一种带元数据日志的文件系统,它有一个健壮的特性集,并且对可伸缩性进行了优化。XFS似乎对各种各样的硬件问题显得不够宽容。
在分区上应用文件系统
要在分区或卷上创建文件系统,对于每种可能的文件系统都有专门的工具。
文件系统 |
创建命令 |
ext2 |
mke2fs |
ext3 |
mke2fs -j |
reiserfs |
mkreiserfs |
xfs |
mkfs.xfs |
jfs |
mkfs.jfs |
例如,要使启动分区(本例中的/dev/sda1)为ext2和根分区(本例中的/dev/sda3)为ext3,应该这样做:
代码 4.1: 在分区上应用文件系统 |
# mke2fs /dev/sda1
# mke2fs -j /dev/sda3
|
现在在你新建的分区(或逻辑卷)上创建文件系统。
警告:
如果你在Cobalt服务器上安装,记得/dev/sda1必须是EXT2 revision 0;所有其他文件系统(比如EXT2 revision 1、EXT3、ReiserFS、XFS、JFS还有其他的)都不行!你可以用这个命令来格式化:mke2fs -r 0 /dev/sda1。
|
激活交换分区
mkswap是创建和初始化交换分区的命令:
代码 4.2: 创建交换分区标志 |
# mkswap /dev/sda2
|
使用swapon命令来激活交换分区:
代码 4.3: 激活交换分区 |
# swapon /dev/sda2
|
使用上面提到的命令来创建和激活交换分区。
4.e. 挂载
现在你的分区都已经初始化了,并且安装了文件系统,是时候来挂载这些分区了。使用mount命令进行挂载。别忘记为每个你创建的分区建立所需的挂载目录。作为例子,我们来挂载根分区和启动分区:
代码 5.1: 挂载分区 |
# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot
|
注意:
如果你希望/tmp目录在一个独立的分区上,确保在挂载之后修改它的权限:chmod 1777 /mnt/gentoo/tmp。这同样适用于/var/tmp目录。
|
我们还需要在/proc目录上挂载proc文件系统(内核的虚拟接口)。但是,我们首先需要把我们的文件放到分区上。
请继续阅读安装Gentoo安装文件。
[ << ]
[ < ]
[ 主页 ]
[ > ]
[ >> ]
本文档的内容遵循知识共享-署名-相同方式共享许可协议
|