学习Linux建设分区和文件系统

网络整理 - 06-28

  创立分区
运用 mkfs 命令来配置 extextxfsreiserfs v 和 vfat 文件系统
创立和维护交流空间
本文协助您预备 Linux Professional Institutes Junior Level Administration (LPIC) 考试 中主题 下的目标 该目标的权值为
先决条件
为了最有效地使用本系列中的文章您应该具有根本的 Linux 知识并须要预备一个 Linux 系统用于练习本文引见的命令有时分不一样版本的顺序输出格式不一样因而您所得到的后果未必总是与这里所示的清单和图类似
您还应该熟识我们的文章 “学习 Linux硬盘规划” 中的内容
块配备和分区
我们的文章 “学习 Linux硬盘规划” 引见了硬盘驱动器规划分区以及运用 fdisk 命令来检查分区信息的根本知识您学习了主分区扩展分区 和逻辑分区 等分区的有关知识明白到 Linux 文件系统包含一些文件它们存储在硬盘上或目录 中的块存储配备 上与许多其他系一致样Linux 系统上的目录也可以够包含其他目录这些目录称为子目录这篇文章还探讨了一些指点您举行分区挑选的留意事项
本文将最先回忆一下块配备和分区然后进一步展现如何运用 fdisk 命令创立修正或删除块配备上的分区您还将学习 mkfs(mkfs 代表 make filesystem) 命令的各种方式mkfs 命令用于将分区格式化为一种特殊的文件系统类型
留意除了 LPI 考试要求的工具和文件系统外您能够会遇到或须要其他工具和文件系统其他工具和文件系统 小节提供了其他可用工具的一个容易摘要

块配备
块配备 是能够以固定大小块 格式化的恣意存储配备的笼统层单独的块的访问能够独立于其他块的访问这样的访问通常称为随机访问
随机可访问的固定大小块的笼统层准许顺序运用这些块配备而无需担忧底层配备是硬盘驱动器软盘CD固态(solidstate)驱动器网络驱动器仍旧某种虚拟配备比如内存中文件系统
块配备示例包含系统上的第一 IDE 硬盘驱动器(/dev/sda 或 /dev/hda)或第二 SCSIIDE 或 USB 驱动器(/dev/sdb)运用 ls l 命令来显示 /dev 条目每行输出的第一个字符是 b(针对一个块 设 备比如软盘CD 驱动器IDE 硬盘驱动器或 SCSI 硬盘驱动器)和 c(针对一个字符配备比如 a终端(tty)或空配备清单 展现了一些示例
清单 Linux 块配备和字符配备
[ian@echidna ~]$ ls l /dev/loop /dev/null /dev/sd[ab] /dev/sr /dev/tty 
brwrw  root disk     : /dev/loop 
crwrwrw  root root     : /dev/null 
brwrw  root disk     : /dev/sda 
brwrw  root disk     : /dev/sdb 
brwrw+  root cdrom    : /dev/sr 
crww  root root     : /dev/tty
分区
关于某些块配备比如软盘和 CD 或 DVD 硬盘通常运用整个媒体作为单个文件系统但是关于大型硬盘驱动器甚至是 USB 存储器更罕见的用法是将可用空间划分为多个不一样的分区

分区的大小能够不一样不一样的分区上能够拥有不一样的文件系统因而一个硬盘能够用于多种目标包含在多个操作系统之间共享该硬盘比如我运用的测试系统包含多个不一样的 Linux 发行版有时还包含一个 Windows® 系统它们都共享一个或两个硬盘驱动器
文章 “学习 Linux硬盘规划” 引见过硬盘驱动器拥有一个几何参数(geometry)依据术语柱面磁头和扇区定义即便是当今驱动器也运用逻辑块寻址 (LBA)这使得几何参数变得几乎没关紧要用于分区目标的根本分配单元通常照旧是柱面
 显示分区信息
分区信息存储在硬盘上的分区表 中分区表列示每个分区的起始柱面和完毕柱面的有关信息关于它的类型 的信息以及它能不能标志为可引导要创立和删除分区须要运用一个专门设计的顺序来编辑分区表关于 LPI 考试您须要明白 fdisk 顺序这也是本文引见的顺序虽然也可以够运用其他多个工具本文末尾将提到其中多个工具
fdisk 命令加上 l 选项用于列示分区假设想检查一个特定驱动器上的分区须要添加一个配备称号比如 /dev/sda留意分区工具须要根访问权限清单 展现了我的系统的两个主硬盘驱动器上的分区
清单 运用 fdisk 列示分区
[root@attic ~]# fdisk l /dev/sda 

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Sector size (logical/physical):  bytes /  bytes 
I/O size (minimum/optimal):  bytes /  bytes 
Disk identifier: xaa 

Device Boot   Start     End   Blocks  Id System 
/dev/sda                   Linux 
/dev/sda             +  Linux swap / Solaris 
/dev/sda  *             Linux 
/dev/sda               Extended 
/dev/sda            +  Linux 
/dev/sda            +  Linux 
/dev/sda            +  Linux 
/dev/sda            +  Linux 
/dev/sda               Linux 

Partition table entries are not in disk order 

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

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 


留意
标题信息显示硬盘大小和几何参数大非少数运用 LBA 的硬盘每个柱面拥有 个磁头每个磁道拥有 个扇区总共拥有 个扇区或许每个柱面 字节
在第二个示例中第一个主分区(/dev/sda)标志为 bootable(或 active)这准许规范 DOS PC 主引导记载引导该分区这个标志对 LILO 或 GRUB 引导装载顺序没有意义第一个示例运用 GRUB 作为引导装载顺序/dev/sda 被标志为 bootable 的原由能够是我以前运用这个驱动器的一次不测
Start 和 End 列显示每个分区的起始和完毕柱面这些分区不能堆叠且通常应该相邻即中间没有空间
Blocks 列显示大小为 K( 字节)的块的数目关于本文撰写之时运用的大非少数硬盘而言扇区大小是 字节因而一个分区中的块的最大数目是柱面数目(End +   Start)和每个柱面的扇区数目标乘积的一半块数目后面的 + 号示意分区中的扇区没有所有运用
Id 列示意分区的预定用途类型 是示意 Linux 交流分区类型 示意 Linux 数据分区已定义的分区类型大约有 种第二个硬盘由多个操作系统共享其中包含 Windows/xp因而出现了 Windows NTFS(也可以够是 FAT)分区
运用 fdisk 举行分区
您刚刚曾经看到如何运用 fdisk 命令来显示分区信息这个命令还提供了一个菜单驱动的环境来编辑分区表以便创立或移除分区
劝诫
开端修正分区之前须要记得一些首要事项假设不恪守以下这些准绳就会出现丧失您的现有限据的风险
开端之前备份首要数据举行任何能够会招致数据丧失的操作之前都应这样做
不要更矫正在运用的分区事前细致方案然后留意执行从 CDDVD 或 USB 启动一个及时发行版是确保没有硬盘驱动器分区正在运用的一个好办法

明白您的工具fdisk 命令不会向您的硬盘提交任何修改除非您要求它那样做其他工具其中包含 parted 能够会随着您的操作提交修改
假设确实犯了错误那么应立刻中止分区工具对分区表举行写操作除非您运用的工具还包含对您的硬盘的数据区域的挪动大小重置格式化等写操作功用否则您的数据将不会遭到影响假设您确实犯了错误尽快中止操作并寻求协助您仍然有能够恢复此前的分区表定义从而恢复您的分区和数据
启动 fdisk
要以交互方式启动 fdisk只需提供一个硬盘的称号(比如 /dev/hda 或 /dev/sdb)作为参数以下示例启动一个 Knoppix 及时 DVD您须要根权限并将看到类似于清单 的输出
清单 启动交互式 fdisk
knoppix@Microknoppix:~$ su  
root@Microknoppix:~# fdisk /dev/sda 

The number of cylinders for this disk is set to  
There is nothing wrong with that but this is larger than  
and could in certain setups cause problems with: 
) software that runs at boot time (eg old versions of LILO) 
) booting and partitioning software from other OSs 
(eg DOS FDISK OS/ FDISK) 

Command (m for help): 
大非少数硬盘拥有超越 个柱面因而您通常会看到清单 中显示的劝诫类型 m 将显示一个可用的单字母命令列表如清单 所示
清单 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 partitions 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 命令来显示这个特定硬盘上的现有分区清单 显示输出
清单 显示现有分区表
Command (m for help): p 

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 

Command (m for help): 

这个特殊硬盘是一个 TB 硬盘包含一个略低于 GB 的 Windows/xp 分区它是一个主分区标志为 bootable这是 Windows 系统的典型特征
添加分区
如今我们运用局部闲置空间来添加一些分区
我们将创立一个交流分区/dev/sda这将是一个主分区填充 /dev/sda 的完毕柱面和 /dev/sda 的起始柱面之间的 个柱面空隙您不用对招致这个空隙的奇异原由感到猎奇我只是为了撰写本文而创立这个空隙
我们将创立一个 GB 的逻辑分区/dev/sda
结尾我们将创立一个 MB 的小型逻辑分区以便在 Linux 和 Windows 系统之间共享数据这个分区结尾将格式化为 FAT(或 vfat)这个分区将命名为 /dev/sda
创立我们的分区
我们最先运用 n 命令来创立一个新分区如清单 所示
清单 创立第一个分区
Command (m for help): n 
Command action 
l  logical ( or over) 
p  primary partition () 
p 
Selected partition  
First cylinder ( default ): 
Using default value  
Last cylinder +cylinders or +size{KMG} ( default ): + 

Command (m for help): p 

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda                Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 

Partition table entries are not in disk order 

Command (m for help): 

我们采用默许值作为第一个柱面并指定值 + 作为柱面的数目清单 显示我们的分区大小约为 GB由于它是一个主分区因而它的编号必需为 至 顺序指定分区编号是个好主意否则一些工具会报告错误fdisk 将劝诫我们我们的分区表条目不再按硬盘顺序陈列
还要留意一点我们的新分区类型被指定为 标明这是一个 Linux 数据分区能够将这个数字视为分区预定用途的操作系统的指示符分区的结尾用途应该婚配这个配置但这时我们的分区甚至还没有格式化更谈不上有限据了我们将最先创立其他分区然后引见如何修改分区类型
您能够曾经留意到当我们输进 n 子命令创立一个新分区时唯一的挑选是 “l”(示意逻辑分区)和 “p”(示意主分区)您只好看到剩余的能够分区类型的选项假设驱动器还没有扩展分区您将看到选项 “e”(示意扩展分区)还要留意我们的扩展分区(/dev/sda)为类型
如今我们来定义 GB Linux 分区和 MB FAT 分区这次我们只需指定大小 +G 和 +M辨别示意 GB 和 MB后果如清单 所示
清单 创立数据分区
Command (m for help): n 
First cylinder ( default ): 
Using default value  
Last cylinder +cylinders or +size{KMG} ( default ): +G 

Command (m for help): n 
First cylinder ( default ): 
Using default value  
Last cylinder +cylinders or +size{KMG} ( default ): +M 

Command (m for help): p 

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda                Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda             +  Linux 

Partition table entries are not in disk order 

Command (m for help): 

修改分区类型
在分开 fdisk 之前我们将修改 swap 和 vfat 分区的分区类型为此我们运用 t 子命令来配置分区类型我们将 /dev/sda 配置为类型 (Linux 交流分区)将 /dev/sda 配置为类型 (FAT)假设您想检查受支持类型的完壁列表请输进 L如清单 所示
清单 修改分区类型
Command (m for help): t 
Partition number ():  
Hex code (type L to list codes):  
Changed system type of partition  to  (Linux swap / Solaris) 

Command (m for help): t 
Partition number ():  
Hex code (type L to list codes): b 
Changed system type of partition  to b (W FAT) 

Command (m for help): 
保管分区表
到当前为止我们只是对分区表举行了内存中编辑我们能够用 q 命令退出不保管修改假设某些分区不能满足您的要求您能够运用 d 命令来删除一个或多个分区以便重新定义它们假设您对配置满意则能够运用 v 命令来验证您的配置然后运用 w 命令来写入新的分区表并退出参见清单 假设您再次运转 fdisk l 命令您将看到Linux 如今已能够识别新分区与其他操作系统不一样的是Linux 并不总是须要重新启动才干看到修改举例来说假设 /dev/hda 变成 /dev/hda则须要重新启动由于原来的 /dev/hda 已被删除假设须要重新启动fdisk 应该会通知您
清单 保管分区表
Command (m for help): v 
unallocated byte sectors 

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

Calling ioctl() to reread partition table 

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

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda                Linux swap / Solaris 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda             +  b W FAT 

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/hda)中将该分区标志为 bootable 并移除 /dev/hda 的 bootable 标志假设机器今后将恢复为 Windows 自用机器那么保管原始 MBR 能够会有用
假设须要您还能够运用 fdisk 来修正分区表中的分区顺序这通常将会修改分区编号因而您能够须要完成其他任务才干将您的系统恢复为任务系统要举行这个修改运用 f 子命令切换到专家方式然后运用 r 子命令修正分区顺序如清单 所示假设您只是想看看新的分区顺序而不实践修改能够运用 q 子命令退出(本例的做法)而不是将更新后的分区表写到硬盘中
清单 修正分区表顺序
Command (m for help): p 

Disk /dev/sda:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda                Linux swap / Solaris 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda             +  b W FAT 

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:  GB  bytes 
heads  sectors/track  cylinders 
Units = cylinders of  *  =  bytes 
Disk identifier: xdef 

Device Boot   Start     End   Blocks  Id System 
/dev/sda  *               HPFS/NTFS 
/dev/sda                Linux swap / Solaris 
/dev/sda             +  Linux 
/dev/sda           +   Extended 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda               Linux 
/dev/sda             +  b W FAT 

Command (m for help): q