10. 附录

10.1. 格式化分区

在 shell 提示符下,我开始在我的分区上创建文件系统。继续 (参见 第 5.3 节) 中的示例,这是

# mke2fs /dev/sda1

我需要为我的每个分区执行此操作,但不包括/dev/sda4(我的扩展分区)。Linux 支持除 ext2 之外的文件系统类型。您可以通过查看以下位置来了解您的内核支持哪些类型/usr/src/linux/include/linux/fs.h

最常见的文件系统可以使用以下位置的程序创建/sbin这些程序以 "mk" 开头,例如 mkfs.msdosmke2fs

10.2. 激活交换空间

要设置交换分区

# mkswap -f /dev/hda5
要激活交换区
# swapon  /dev/hda5
通常,交换区在启动时由初始化脚本激活。

10.3. 挂载分区

挂载分区意味着将其附加到 Linux 文件系统。要挂载 Linux 分区

# mount -t ext2 /dev/sda1 /opt

-t ext2

文件系统类型。您可能使用的其他类型包括

  • ext3 (基于 ext2 的日志文件系统)

  • msdos (DOS)

  • hfs (mac)

  • iso9660 (CDROM)

  • nfs (网络文件系统)

/dev/sda1

设备名称。您可能使用的其他设备名称

  • /dev/hdb2(第二个 IDE 驱动器中的第二个分区)

  • /dev/fd0(软盘驱动器 A)

  • /dev/cdrom(CDROM)

/opt

挂载点。这是您希望“看到”您的分区的位置。当您输入ls /opt时,您可以看到/dev/sda1中的内容。如果/opt下已经有一些目录和/或文件,它们将在执行此挂载命令后变得不可见。

10.4. 关于文件系统和碎片的一些事实

磁盘空间由操作系统以块和块片段为单位进行管理。在 ext2 中,片段和块必须大小相同,因此我们可以将讨论限制在块上。

文件的大小各不相同。它们并非以块边界结束。因此,对于每个文件,每个文件最后一个块的一部分都会被浪费。假设文件大小是随机的,那么磁盘上的每个文件大约会浪费半个块。Tanenbaum 在他的著作《操作系统》中称之为“内部碎片”。

您可以通过磁盘上已分配的 inode 数量来猜测磁盘上的文件数量。在我的磁盘上

# df -i
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda3              64256   12234   52022    19%  /
/dev/hda5              96000   43058   52942    45%  /var
大约有 12000 个文件在/和大约 44000 个文件在/var。在 1 KB 的块大小下,大约 6+22 = 28 MB 的磁盘空间在文件的尾块中丢失。如果我选择 4 KB 的块大小,我将丢失 4 倍的空间。

然而,对于大的连续数据块,数据传输速度更快。这就是为什么 ext2 尝试以 8 个连续块为单位为增长的文件预分配空间。当文件关闭时,未使用的预分配空间会被释放,因此不会浪费空间。

文件中块的非连续放置对性能不利,因为文件通常以顺序方式访问。它迫使操作系统拆分磁盘访问,并迫使磁盘移动磁头。这被称为“外部碎片”或简称为“碎片”,是 MS-DOS 文件系统的常见问题。结合 MS-DOS 使用的糟糕的缓冲区缓存,文件碎片对性能的影响非常明显。DOS 用户习惯于每隔几周对磁盘进行碎片整理,有些人甚至对碎片整理产生了一些仪式化的信仰。

这些习惯都不应带到 Linux 和 ext2 中。Linux 原生文件系统在正常使用下不需要碎片整理,这包括磁盘上至少有 5% 可用空间的任何情况。ext2 有一个名为 defrag 的碎片整理工具,但告诫用户不要随意使用。在这种操作期间断电可能会损坏您的文件系统。由于您无论如何都需要备份数据,因此只需从您的副本写回即可完成这项工作。

MS-DOS 文件系统也因内部碎片而损失大量磁盘空间而闻名。对于大于 256 MB 的分区,DOS 块大小增长得太大,以至于不再有用(这在一定程度上已通过 FAT32 得到纠正)。除了 0.5 TB 范围(即 1 TB 等于 1024 GB 的太字节)及以上的超大文件系统之外,Ext2 不会强迫您为大型文件系统选择大块,在这些情况下,小块大小会变得效率低下。因此,与 DOS 不同,没有必要将大型磁盘拆分为多个分区以减小块大小。

如果您有很多小文件,请使用 1Kb 的块大小。对于大型分区,4Kb 的块大小就可以了。