学习 Linux,101: 建设分区和文件系统
扫描二维码
随时随地手机看文章
概述
在本文中,学习硬盘分区和 Linux 文件系统有关内容。学习:
创立分区;
运用 mkfs 命令来配置 ext2、ext3、xfs、reiserfs v3 和 vfat 文件系统;
创立和维护交流空间。
本文协助您预备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试 101 中主题 104 下的目标 104.1。该目标的权值为 2。
先决条件
为了最有效地使用本系列中的文章,您应该具有根本的 Linux 知识,并须要预备一个 Linux 系统,用于练习本文引见的命令。有时分不一样版本的顺序输出格式不一样,因而您所得到的后果未必总是与这里所示的清单和图类似。
您还应该熟识我们的文章 “学习 Linux,101:硬盘规划” 中的内容。
块配备和分区
我们的文章 “学习 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[!--empirenews.page--]
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[!--empirenews.page--]
/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 所示。
清单 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 所示。[!--empirenews.page--]
清单 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[!--empirenews.page--]
/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