系统集成论坛

标题: Linux系统下的分区和文件系统详解 [打印本页]

作者: 狙神    时间: 2010-8-5 20:50
标题: Linux系统下的分区和文件系统详解
我们的文章 “学习 Linux,101:硬盘布局” 介绍了硬盘驱动器布局、分区、以及使用 fdisk 命令来查看分区信息的基本知识。您学习了主分区、扩展分区 和逻辑分区 等分区的相关知识,了解到 Linux 文件系统包含一些文件,它们存储在磁盘上或目录 中的块存储设备 上。与许多其他系统一样,Linux 系统上的目录也可能包含其他目录,这些目录称为子目录。这篇文章还讨论了一些指导您进行分区选择的注意事项。

本文将首先回顾一下块设备和分区,然后进一步展示如何使用 fdisk 命令创建、修改或删除块设备上的分区。您还将学习 mkfs(mkfs 代表 make filesystem) 命令的各种形式;mkfs 命令用于将分区格式化为一种特殊的文件系统类型。

注意:除了 LPI 考试要求的工具和文件系统外,您可能会遇到或需要其他工具和文件系统。其他工具和文件系统 小节提供了其他可用工具的一个简单摘要。

块设备

块设备 是能够以固定大小块 格式化的任意存储设备的抽象层。单独的块的访问可以独立于其他块的访问。这样的访问通常称为随机访问。

随机可访问的固定大小块的抽象层允许程序使用这些块设备,而无需担心底层设备是硬盘驱动器、软盘、CD、固态(solid-state)驱动器、网络驱动器,还是某种虚拟设备,比如内存中文件系统。

块设备示例包括系统上的第一 IDE 硬盘驱动器(/dev/sda 或 /dev/hda)或第二 SCSI、IDE 或 USB 驱动器(/dev/sdb)。使用 ls -l 命令来显示 /dev 条目。每行输出的第一个字符是 b(针对一个块设备,比如软盘、CD 驱动器、IDE 硬盘驱动器或 SCSI 硬盘驱动器)和 c(针对一个字符设备,比如 a、终端(tty)或空设备。清单 1 展示了一些示例。

清单 1. Linux 块设备和字符设备

[ian@echidna ~]$ ls -l /dev/loop1 /dev/null /dev/sd[ab] /dev/sr0 /dev/tty0
brw-rw----. 1 root disk   7,  1 2010-06-14 07:25 /dev/loop1
crw-rw-rw-. 1 root root   1,  3 2010-06-14 07:25 /dev/null
brw-rw----. 1 root disk   8,  0 2010-06-14 07:25 /dev/sda
brw-rw----. 1 root disk   8, 16 2010-06-14 07:25 /dev/sdb
brw-rw----+ 1 root cdrom 11,  0 2010-06-14 07:25 /dev/sr0
crw--w----. 1 root root   4,  0 2010-06-14 07:25 /dev/tty0


分区

对于某些块设备,比如软盘和 CD 或 DVD 磁盘,通常使用整个媒体作为单个文件系统。但是,对于大型硬盘驱动器,甚至是 USB 存储器,更常见的用法是将可用空间划分为几个不同的分区。

分区的大小可能不同,不同的分区上可以拥有不同的文件系统,因此一个磁盘可以用于多种目的,包括在多个操作系统之间共享该磁盘。例如,我使用的测试系统包含几个不同的 Linux 发行版,有时还包含一个 Windows® 系统,它们都共享一个或两个硬盘驱动器。

文章 “学习 Linux,101:硬盘布局” 介绍过,硬盘驱动器拥有一个几何参数(geometry),根据术语柱面、磁头和扇区定义。即使是现代驱动器也使用逻辑块寻址 (LBA),这使得几何参数变得几乎无关紧要,用于分区目的的基本分配单元通常仍旧是柱面。

显示分区信息

分区信息存储在磁盘上的分区表 中。分区表列示每个分区的起始柱面和结束柱面的相关信息,关于它的类型 的信息,以及它是否标记为可引导。要创建和删除分区,需要使用一个专门设计的程序来编辑分区表。对于 LPI 考试,您需要了解 fdisk 程序,这也是本文介绍的程序,尽管也可以使用其他几个工具。本文末尾将提到其中几个工具。

fdisk 命令加上 -l 选项用于列示分区。如果想查看一个特定驱动器上的分区,需要添加一个设备名称,比如 /dev/sda。注意,分区工具需要根访问权限。清单 2 展示了我的系统的两个主硬盘驱动器上的分区。

清单 2. 使用 fdisk 列示分区

[root@attic4 ~]# fdisk -l /dev/sda

Disk /dev/sda: 640.1 GB, 640135028736 bytes
255 heads, 63 sectors/track, 77825 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00064a1a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         127     1020096   83  Linux
/dev/sda2             128        1402    10241437+  82  Linux swap / Solaris
/dev/sda3   *       46340       56538    81920000   83  Linux
/dev/sda4            1403       46339   360956422    5  Extended
/dev/sda5            1403       10420    72437053+  83  Linux
/dev/sda6           10421       19344    71681998+  83  Linux
/dev/sda7           19345       28350    72340663+  83  Linux
/dev/sda8           28351       37354    72324598+  83  Linux
/dev/sda9           37355       46339    72171981   83  Linux

Partition table entries are not in disk order

[root@echidna ~]# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9634        9730      779152+  83  Linux
/dev/sda3            9731      116679   859067842+   5  Extended
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux

  


注意:

标题信息显示磁盘大小和几何参数。大多数使用 LBA 的磁盘每个柱面拥有 255 个磁头,每个磁道拥有 63 个扇区,总共拥有 16065 个扇区,或者每个柱面 8225280 字节。
在第二个示例中,第一个主分区(/dev/sda1)标记为 bootable(或 active)。这允许标准 DOS PC 主引导记录引导该分区。这个标志对 LILO 或 GRUB 引导装载程序没有意义。第一个示例使用 GRUB 作为引导装载程序,/dev/sda3 被标记为 bootable 的原因可能是我以前使用这个驱动器的一次意外。
Start 和 End 列显示每个分区的起始和结束柱面。这些分区不能重叠且通常应该相邻,即中间没有空间。
Blocks 列显示大小为 1K(1024 字节)的块的数量。对于本文撰写之时使用的大多数磁盘而言,扇区大小是 512 字节,因此一个分区中的块的最大数量是柱面数量(End + 1 - Start)和每个柱面的扇区数量的乘积的一半。块数量后面的 + 号表示分区中的扇区没有全部使用。
Id 列表示分区的预定用途。类型 82 是表示 Linux 交换分区,类型 83 表示 Linux 数据分区。已定义的分区类型大概有 100 种。第二个磁盘由几个操作系统共享,其中包括 Windows/XP,因此出现了 Windows NTFS(也可能是 FAT32)分区。

使用 fdisk 进行分区

您刚刚已经看到如何使用 fdisk 命令来显示分区信息。这个命令还提供了一个菜单驱动的环境来编辑分区表,以便创建或移除分区。

警告

开始修改分区之前,需要记住一些重要事项。如果不遵守以下这些原则,就会出现丢失您的现有数据的风险。

开始之前备份重要数据,进行任何可能会导致数据丢失的操作之前都应这样做。
不要更改正在使用的分区。事先详细计划,然后小心执行。从 CD、DVD 或 USB 启动一个实时发行版是确保没有硬盘驱动器分区正在使用的一个好办法。
了解您的工具。fdisk 命令不会向您的磁盘提交任何更改,除非您要求它那样做。其他工具,其中包括 parted 可能会随着您的操作提交更改。
如果的确犯了错误,那么应立即停止。分区工具对分区表进行写操作。除非您使用的工具还包含对您的磁盘的数据区域的移动、大小重置、格式化等写操作功能,否则您的数据将不会受到影响。如果您的确犯了错误,尽快停止操作并寻求帮助。您仍然有可能恢复此前的分区表定义,从而恢复您的分区和数据。
启动 fdisk

要以交互模式启动 fdisk,只需提供一个磁盘的名称(比如 /dev/hda 或 /dev/sdb)作为参数。以下示例启动一个 Knoppix 实时 DVD。您需要根权限,并将看到类似于清单 3 的输出。

清单 3. 启动交互式 fdisk

knoppix@Microknoppix:~$ su -
root@Microknoppix:~# fdisk /dev/sda

The number of cylinders for this disk is set to 121601.
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):



大多数磁盘拥有超过 1024 个柱面,因此您通常会看到清单 3 中显示的警告。类型 m 将显示一个可用的单字母命令列表,如清单 4 所示。

清单 4. fdisk 中的帮助

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help):



使用 p 命令来显示这个特定磁盘上的现有分区,清单 5 显示输出。

清单 5. 显示现有分区表

Command (m for help): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9634        9730      779152+  83  Linux
/dev/sda3            9731      116679   859067842+   5  Extended
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux

Command (m for help):



这个特殊磁盘是一个 1TB 磁盘,包含一个略低于 80GB 的 Windows/XP 分区。它是一个主分区,标记为 bootable,这是 Windows 系统的典型特征。

添加分区

现在我们使用部分闲置空间来添加一些分区。

我们将创建一个交换分区:/dev/sda4。这将是一个主分区,填充 /dev/sda1 的结束柱面和 /dev/sda2 的起始柱面之间的 521 个柱面空隙。您不必对导致这个空隙的奇怪原因感到好奇;我只是为了撰写本文而创建这个空隙。
我们将创建一个 40GB 的逻辑分区:/dev/sda8。
最后,我们将创建一个 2000MB 的小型逻辑分区,以便在 Linux 和 Windows 系统之间共享数据。这个分区最终将格式化为 FAT32(或 vfat)。这个分区将命名为 /dev/sda9。
创建我们的分区

我们首先使用 n 命令来创建一个新分区,如清单 6 所示。
作者: 狙神    时间: 2010-8-5 20:57
清单 6. 创建第一个分区

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
p
Selected partition 4
First cylinder (9112-121601, default 9112):
Using default value 9112
Last cylinder, +cylinders or +size{K,M,G} (9112-9633, default 9633): +521

Command (m for help): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9634        9730      779152+  83  Linux
/dev/sda3            9731      116679   859067842+   5  Extended
/dev/sda4            9112        9633     4192965   83  Linux
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux

Partition table entries are not in disk order

Command (m for help):



我们采用默认值作为第一个柱面并指定值 +521 作为柱面的数量。清单 6 显示,我们的分区大小约为 4GB。由于它是一个主分区,因此它的编号必须为 1 至 4。顺序指定分区编号是个好主意;否则一些工具会报告错误,fdisk 将警告我们:我们的分区表条目不再按磁盘顺序排列。

还要注意一点:我们的新分区类型被指定为 83,表明这是一个 Linux 数据分区。可以将这个数字视为分区预定用途的操作系统的指示符。分区的最终用途应该匹配这个设置,但这时我们的分区甚至还没有格式化,更谈不上有数据了。我们将首先创建其他分区,然后介绍如何更改分区类型。

您可能已经注意到,当我们输入 n 子命令创建一个新分区时,惟一的选择是 “l”(表示逻辑分区)和 “p”(表示主分区)。您只能看到剩余的可能分区类型的选项。如果驱动器还没有扩展分区,您将看到选项 “e”(表示扩展分区)。还要注意,我们的扩展分区(/dev/sda3)为类型 5。

现在我们来定义 40GB Linux 分区和 2000MB FAT32 分区。这次我们只需指定大小 +40G 和 +2000M,分别表示 40GB 和 2000MB。结果如清单 7 所示。

清单 7. 创建数据分区

Command (m for help): n
First cylinder (53906-116679, default 53906):
Using default value 53906
Last cylinder, +cylinders or +size{K,M,G} (53906-116679, default 116679): +40G

Command (m for help): n
First cylinder (59129-116679, default 59129):
Using default value 59129
Last cylinder, +cylinders or +size{K,M,G} (59129-116679, default 116679): +2000M

Command (m for help): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9634        9730      779152+  83  Linux
/dev/sda3            9731      116679   859067842+   5  Extended
/dev/sda4            9112        9633     4192965   83  Linux
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux
/dev/sda8           53906       59128    41953716   83  Linux
/dev/sda9           59129       59384     2056288+  83  Linux

Partition table entries are not in disk order

Command (m for help):



更改分区类型

在离开 fdisk 之前,我们将更改 swap 和 vfat 分区的分区类型。为此,我们使用 t 子命令来设置分区类型。我们将 /dev/sda4 设置为类型 82(Linux 交换分区),将 /dev/sda9 设置为类型 9(FAT32)。如果您想查看受支持类型的完整列表,请输入 L,如清单 8 所示。

清单 8. 更改分区类型

Command (m for help): t
Partition number (1-9): 4
Hex code (type L to list codes): 82
Changed system type of partition 4 to 82 (Linux swap / Solaris)

Command (m for help): t
Partition number (1-9): 9
Hex code (type L to list codes): b
Changed system type of partition 9 to b (W95 FAT32)

Command (m for help):



保存分区表

到目前为止,我们只是对分区表进行了内存中编辑。我们可以用 q 命令退出,不保存更改。如果某些分区不能满足您的要求,您可以使用 d 命令来删除一个或多个分区,以便重新定义它们。如果您对设置满意,则可以使用 v 命令来验证您的设置,然后使用 w 命令来写入新的分区表并退出。参见清单 9。如果您再次运行 fdisk -l 命令,您将看到,Linux 现在已能够识别新分区。与其他操作系统不同的是,Linux 并不总是需要重新启动才能看到更改。举例来说,如果 /dev/hda3 变成 /dev/hda2,则需要重新启动,因为原来的 /dev/hda2 已被删除。如果需要重新启动,fdisk 应该会告诉您。

清单 9. 保存分区表

Command (m for help): v
999521580 unallocated 512-byte sectors

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
root@Microknoppix:~# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9634        9730      779152+  83  Linux
/dev/sda3            9731      116679   859067842+   5  Extended
/dev/sda4            9112        9633     4192965   82  Linux swap / Solaris
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux
/dev/sda8           53906       59128    41953716   83  Linux
/dev/sda9           59129       59384     2056288+   b  W95 FAT32

Partition table entries are not in disk order



高级 fdisk

您可能已注意到,我们没有更改任意分区上的 bootable 标志。现在,我们的磁盘还有 Windows Master Boot Record (MBR),因此将启动标记为 bootable 的第一个主分区(我们的示例中为 NTFS 分区)。

LILO 和 GRUB 都不使用 bootable 标志。如果其中一个安装在 MBR 中,那么它就能够引导 Windows/XP 分区。您也可以将 LILO 或 GRUB 安装到您的 /boot 分区(/dev/hda2)中,将该分区标记为 bootable 并移除 /dev/hda1 的 bootable 标志。如果机器今后将恢复为 Windows 专用机器,那么保留原始 MBR 可能会有用。

如果需要,您还可以使用 fdisk 来修复分区表中的分区顺序。这通常将会更改分区编号,因此您可能需要完成其他工作才能将您的系统恢复为工作系统。要进行这个更改,使用 f 子命令切换到专家模式,然后使用 r 子命令修复分区顺序,如清单 10 所示。如果您只是想看看新的分区顺序而不实际更改,可以使用 q 子命令退出(本例的做法),而不是将更新后的分区表写到磁盘中。

清单 10. 修复分区表顺序

Command (m for help): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9634        9730      779152+  83  Linux
/dev/sda3            9731      116679   859067842+   5  Extended
/dev/sda4            9112        9633     4192965   82  Linux swap / Solaris
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux
/dev/sda8           53906       59128    41953716   83  Linux
/dev/sda9           59129       59384     2056288+   b  W95 FAT32

Partition table entries are not in disk order

Command (m for help): x

Expert command (m for help): f
Done.

Expert command (m for help): r

Command (m for help): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9111    73184076    7  HPFS/NTFS
/dev/sda2            9112        9633     4192965   82  Linux swap / Solaris
/dev/sda3            9634        9730      779152+  83  Linux
/dev/sda4            9731      116679   859067842+   5  Extended
/dev/sda5            9731       20917    89859546   83  Linux
/dev/sda6           20918       39644   150424596   83  Linux
/dev/sda7           39645       53905   114551451   83  Linux
/dev/sda8           53906       59128    41953716   83  Linux
/dev/sda9           59129       59384     2056288+   b  W95 FAT32

Command (m for help): q


您现在已经了解了向 Linux 工作站添加分区的一种方法。文章 “学习 Linux,101:查找并放置文件系统” 介绍了其他可能的方法。
作者: 狙神    时间: 2010-8-5 21:00
文件系统类型

Linux 支持几种不同的文件系统。每个文件系统都有自己的优缺点和性能特征。文件系统的一个重要属性是日志,它允许系统在崩溃后更快地恢复。通常,日志文件系统比非日志文件系统更好。您可能还需要考虑,您选择的文件系统是否支持 Security Enhanced Linux(或 SELinux)。以下是备考 LPI 考试需要了解的文件系统类型的一个简单摘要。参考 参考资料 了解其他背景信息。

ext2 文件系统

ext2 文件系统(也称为第二扩展文件系统)旨在克服早期 Linux 版本中使用的 Minix 文件系统的缺点。多年来,该文件系统一直广泛应用于 Linux。但 ext2 中没有日志,现在基本上已被 ext3 取代。

ext3 文件系统

ext3 文件系统向标准 ext2 文件系统添加了日志功能,因此是一个非常稳定的文件系统的一个演化发展。它在大多数情况下提供合理的性能并且仍旧在改进。由于它在可靠的 ext2 文件系统之上添加了日志功能,因此可以将现有 ext2 文件系统转换为 ext3 文件系统,并且在必要时还可以转换回来。

ReiserFS 文件系统

ReiserFS 是一个基于 B 状树的文件系统,拥有非常好的总体性能,特别是对于大量小文件。ReiserFS 拥有良好的伸缩性并具有日志功能。但该文件系统不再受到积极开发,不支持 SELinux,基本上已被 Reiser4 取代。

XFS 文件系统

XFS 文件系统拥有日志功能,包含一些健壮的特性,并针对可伸缩性进行了优化。XFS 在 RAM 中强制缓存中转(in-transit)数据,因此如果使用 XFS,建议采用不间断电源供应。

交换文件系统

交换空间在使用之前必须相应格式化,当它通常不被视为文件系统。

vfat 文件系统

vfat 文件系统(也称为 FAT32)没有日志功能,且缺乏完整的 Linux 文件系统实现所需的许多特性。它可用于在 Windows 和 Linux 系统之间交换数据,因为 Windows 和 Linux 都能读取它。不要将这个文件系统用于 Linux,除非要在 Windows 和 Linux 之间共享数据。如果您在一个 vfat 磁盘上解压缩一个 Linux 归档文件,那么您将丢失权限(比如执行权限),还会丢失该归档文件中可能存储的符号链接。

ext3 文件系统是一个成熟的文件系统,用作几个发行版上的默认文件系统。ReiserFS 文件系统多年来一直用作一些发行版(包括 SUSE)的默认文件系统,但现在用得少了。

创建文件系统

Linux 使用 mkfs 命令来创建文件系统,用 mkswap 命令来创建交换空间。mkfs 命令实际上是几个特定于文件系统的命令的前端,这些命令包括针对 ext3 的 mkfs.ext3 和针对 ReiserFS 的 mkfs.reiserfs。

您的文件系统上安装的是什么文件系统支持?使用 ls /sbin/mk* 命令来找到答案。清单 11 展示了一个示例。

清单 11. 文件系统创建命令

[ian@echidna ~]$ ls /sbin/mk*
/sbin/mkdosfs      /sbin/mkfs.ext2     /sbin/mkfs.ntfs
/sbin/mke2fs       /sbin/mkfs.ext3     /sbin/mkfs.vfat
/sbin/mkfs         /sbin/mkfs.ext4     /sbin/mkfs.xfs
/sbin/mkfs.btrfs   /sbin/mkfs.ext4dev  /sbin/mkhomedir_helper
/sbin/mkfs.cramfs  /sbin/mkfs.msdos    /sbin/mkswap


您将注意到一些命令的各种形式。例如,您通常会发现,文件 mke2fs、mkfs.ext2 和 mkfs.ext3 是一样的,文件 mkreiserfs 和 mkfs.reiserfs 也一样。启动系统可能需要的文件系统将使用多个名称不同的相同文件。不能用于 Linux 中的 / 文件系统的那些文件系统(比如 vfat 或 msdos)可能会使用符号链接代替。

所有 mkfs 命令都有几个公共选项。根据在 -type 选项中指定的文件系统类型,特定于正在创建的文件系统类型的选项将被传递到适当的创建命令。我们的示例使用 mkfs -type,但您也可以直接使用其他类型,效果一样。例如,您可以使用 mkfs -type ext2、mk2fs 或 mkfs.ext2。要获取一个特定文件系统的手册页,使用适当的 mkfs 命令作为名称,比如 man mkfs.ext3。下面的输出示例中显示的许多值都能通过 mkfs 的选项控制。

既然我们已经创建了所有分区,我们将重新启动 Fedora 12 系统(而不是有点缓慢的实时 Knoppix DVD)并格式化文件系统。当然,如果愿意,您也可以继续使用 Knoppix 系统。注意,创建文件系统需要根权限。

创建一个 ext3 文件系统

我们使用 mkfs 命令将 /dev/sda8 分区格式化为 ext3,如清单 12 所示。

清单 12. 创建一个 ext3 文件系统

[root@echidna ~]# mkfs -t ext3 /dev/sda8
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2624496 inodes, 10488429 blocks
524421 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
321 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


注意,一个日志与 ext3 一同创建。如果您想向一个现有 ext2 系统添加一个日志,使用 tune2fs 命令和 -j 选项。

针对 ext2 和 ext3 文件系统的一个有用选项是带有一个名称的 -L 选项,该选项为分区指定一个标签。这个标签可用于在挂载文件系统时代替设备名称;它针对可能需要在各种控制文件中反映的更改提供某种级别的隔离。要为一个现有 ext2 或 ext3 文件系统显示或设置标签,使用 e2label 命令。标签的最大大小限制为 16 个字符。

最近的一个进展是使用 Universally Unique Identifier(或 UUID)而不是标签。UUID 是一个 128 位标识符,通常显示为 32 位 16 进制数字和 4 个连词号。大多数 Linux 文件系统在被格式化时自动生成一个 UUID。使用 blkid 命令(不需要根权限)来查看我们刚刚格式化的分区的 UUID,如清单 13 所示。与标签相比,UUID 更可能具备惟一性,对 USB 驱动器这样的热插拔设备尤其有用。

清单 13. 使用 blkid 命令显示一个 UUID

[ian@echidna ~]$ blkid /dev/sda8
/dev/sda8: UUID="87040def-920e-4525-9c81-c585ddc46384" SEC_TYPE="ext2" TYPE="ext3"


创建一个 XFS 文件系统

现在我们将刚才格式化为 ext3 的分区重新格式化为 XFS 文件系统。我们的 Fedora 12 系统使用 SELinux(Security Enhanced Linux),因此我们应该使用 -i 参数指定比默认值 256 更大的索引节点。推荐值是 512。注意,如果 XFS 格式化程序发现分区上已有一个公认的文件系统,那么它将会通知您。还要注意一点,XFS 格式重新指定了 UUID。

清单 14. 创建一个 XFS 文件系统

[root@echidna ~]# mkfs -t xfs -i size=512 /dev/sda8
mkfs.xfs: /dev/sda8 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@echidna ~]# mkfs -t xfs -f -i size=512 /dev/sda8
meta-data=/dev/sda8              isize=512    agcount=4, agsize=2622108 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=10488429, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=5121, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@echidna ~]# blkid /dev/sda8
/dev/sda8: UUID="1b6798f2-f07f-4d5e-af06-2470df37ddb3" TYPE="xfs"


您可以使用带有一个名称的 -L 选项来设置 XFS 系统的标签。还可以使用 xfs_admin 命令和 -L 选项来为一个现有 XFS 文件系统添加一个标签。使用带 -l 选项的 xfs_admin 命令来显示一个标签。与 ext2、ext3 和 ReiserFS 不同,XFS 标签的最大长度为 12 个字符。

创建一个 ReiserFS 文件系统

可以使用带 -t reiserfs 选项的 mkfs 命令或 mkreiserfs 命令创建 ReiserFS 文件系统。ReiserFS 不支持 SELinux,正在被 Resier4 替代。

可以使用 -l 选项(或带有一个名称的 --label 选项)为一个 ReiserFS 系统设置标签。可以使用 reiserfstune 命令添加标签或显示现有 ReiserFS 文件系统上的标签。标签的最大长度限制为 16 个字符。

您可能需要在您的系统上安装 ReiserFS 包才能使用 ReiserFS ,因为它可能不包含在默认安装内。参见手册页或信息页了解更多细节。

创建一个 vfat 文件系统

现在,我们将在 /dev/sda9 上创建 FAT32(vfat)文件系统。

清单 15. 创建一个 vfat 文件系统

[root@echidna ~]# mkfs -t vfat /dev/sda9
mkfs.vfat 3.0.9 (31 Jan 2010)
[root@echidna ~]# blkid /dev/sda9
/dev/sda9: LABEL="" UUID="CF72-99A8" TYPE="vfat"


vfat 文件系统的 UUIDs 比标准 UUIDs 短,因此不惟一的几率要大一些。如果想用一个标签代替,可以使用 dosfslabel 命令。DOS 分区的标签的最大长度限制为 11 个字符。
作者: 狙神    时间: 2010-8-5 21:01
创建交换空间

现在我们使用 mkswap 命令在 /dev/sda4 分区上创建一些交换空间,如清单 16 所示。

清单 16. 创建交换空间

[root@echidna ~]# mkswap /dev/sda4
Setting up swapspace version 1, size = 4192960 KiB
no label, UUID=8f5a3a05-73ef-4c78-bc56-0e9b1bcc7fdb


注意,mkswap 的最近几个版本都显示生成的 UUID。

与常规文件系统不同,交换分区不能挂载。相反,它们使用 swapon 命令启用。您的 Linux 系统的启动脚本将负责自动启用您的交换分区。

其他工具和文件系统

以下工具和文件系统不是这个考试的 LPI 目标的内容。这个非常简略的概述仅触及您可能会遇到的一些工具和文件系统的皮毛。

分区工具

许多 Linux 发行版都包含 cfdisk 或 sfdisk 命令。cfdisk 命令提供一个比 fdisk 更图形化的界面,使用 ncurses 库函数,如图 1 所示。sfdisk 命令面向程序员,可被脚本化。如果您对该命令了如指掌,尽管使用它。

图 1. 使用 cfdisk


用于处理分区表的另一个流行工具是 parted,该命令能够对许多类型的分区执行大小重置、格式化、创建分区以及销毁分区等操作。尽管 parted 不能重置 NTFS 分区大小,但 ntfsresize 却可以。qtparted 工具使用 Qt 工具包来提供一个图形界面。它包含 parted 功能和 ntfsresize 功能。

gparted 是另一个图形分区工具,主要用于 GNOME 桌面。它使用 GTK+GUI 库,如图 2 所示。(参见 参考资料 获取到 qtparted 和 gparted 的链接。)

要使用上述工具,可能需要安装相应的包,因为它们可能不包含在您的默认安装中。

图 2. 使用 gparted


许多发行版都允许在安装过程中对磁盘分区,有时还允许缩小现有的 Windows NTFS 或 FAT32 分区。请参阅您的发行版的安装文档。

逻辑卷管理程序

Linux 的逻辑卷管理程序(或 LVM)允许将多个物理存储设备合并为单个卷组。例如,您可能会将一个分区添加到一个现有卷组,而不是必须开辟出足够您想要的文件系统使用的连续空间。

RAID

RAID(Redundant Array of Independent Disks)技术使用比高端系统上的磁盘便宜得多的廉价磁盘来提供一个可靠的数据存储。RAID 有几种类型,可以在硬件或软件中实现。Linux 同时支持硬件和软件 RAID。

更多文件系统

除了上面介绍的文件系统之外,您可能还会遇到其他文件系统。

IBM 的 Journaled File System (JFS)(目前用于 IBM 企业服务器)旨在用于高吞吐量服务器环境。它可用于 Linux,包含在几个发行版中。要创建 JFS 文件系统,使用 mkfs.jfs 命令。

btrfs(B-Tree 文件系统)最初由 Oracle 开发,在 GPL 许可之下可用。它是一个用于 Linux 的新型写入时拷贝(copy-on-write)文件系统,旨在关注容错性、修复和轻松管理的同时实现高级特性。这个文件系统可能不会默认安装,因此您可能需要安装一个包(比如 btrfs-progs)来启用 btrfs 支持。

还有其他文件系统,比如通常在嵌入式设备上使用的 cramfs 文件系统。




欢迎光临 系统集成论坛 (http://bbs.xtjc.com/) Powered by Discuz! X3.1