一、磁盘分区概述
如果想在同一台计算机上安装Windows和Linux两种操作系统,不进行磁盘分区将无法实现,因为Linux和Windows所需的磁盘格式不一样;更重要的是,磁盘分区能够将每一个分区当做一个文件系统来使用,每一个文件系统都可以格式化。这里引入了两个概念:
文件系统:打个比方,一个仓库中存放有很多货架,每个货架上堆放了很多货物,为了便于管理而建立了一套索引,来对应仓库里每个货架上的货物。类似于这样的货架以及货架的索引,就相当于文件系统。故文件系统就是用来管理一个分区上的文件,能够实现按名存取并提供索引供用户查找的机制。
常见的文件系统有:
Windows:NTFS、FAT32
Linux:ext2、ext3、ext4、xfs、reiserfs、nfs、iso9600、jfs、brtfs...
文件系统本身通常由内核提供,故访问文件系统上的文件,必须由内核来完成;而用来管理文件系统的工具,如格式化工具,都是由用户空间中的文件提供的。
格式化:硬盘在出厂时,要对其进行低级格式化,低格是用来创建磁道、磁盘扇区的。除非是硬盘出现了严重故障,否则轻易不要自行低格硬盘,因为自行使用的低格工具不一定和硬盘属性相匹配,会损害硬盘的使用寿命。
我们通常所说的格式化,是高级格式化,对分区进行格式化的过程,就是创建文件系统的过程。故在进行分区格式化的时候,需要指明创建成一个什么样的文件系统。如果不对分区进行格式化,而直接往分区上存放数据,通常情况下数据会杂乱无章,但也有例外情况,因为有些软件,如Mysql和Oracle等软件本身具备文件组织管理能力,可以使用裸设备(RAW)来进行存取,除此之外,绝大多数情况下都必须先对分区进行格式化,再用来存储数据。
前文中提到过,磁盘是由一组同轴盘片构成的,数个盘片的扇区构成了一个柱面(Cylinder),进行磁盘分区时,便是以柱面为单位来进行划分的,例如某个硬盘一共有1000个柱面,那么0-100个柱面可以划分为一个分区,101-600个柱面可以划分为一个分区,601-1000个柱面也可以划分为一个分区。
如果要划出一个10G空间的分区,现有空闲的柱面为60-160,如果使用60-160这101个柱面,则有10.1G,而使用60-159个柱面则只有9.8G,因此在实际操作中,划分出10G空间,最终结果可能不够精确。
主引导扇区(MBR):需要注意的是,无论怎样划分区,0磁道0扇区是无法划入任何一个分区的,0磁道0扇区被称为MBR,即主引导记录(Master Record),它是用来存放boot loader的,一共有512个字节。如果该区域损坏了,那么即使此硬盘还能存放数据,也无法作为启动项了,故无法将操作系统安装在此硬盘上。这里提到MBR一共有512bytes,其中:前 446bytes:存放bootloader;接下来的64bytes为分区表,其中每16bytes标识一个分区,故一块硬盘最多只能有4个主分区;最后2bytes通常用5A表示(两位16进制数)用来标示此设备是否可引导,是否可启动,通常称为魔数。由于一块硬盘最多只能有4个主分区,那么要创建更多分区,就需要通过扩展分区来实现。扩展分区只是一个逻辑概念,使用时需要再次将其划分为逻辑分区。扩展分区不限定大小。
完成了分区之后,就可以进行文件系统的创建了。文件系统创建之后,必须关联到根目录/上,让根目录下的某个文件作为此文件系统的访问入口,它才能被访问到。
二、查看磁盘分区
Linux下进行磁盘分区的命令有fdisk,sfdisk,part等,其中最常用的命令为fdisk。fdisk最多可以支持15个分区,使用该命令加上-l选项,还可以查看当前磁盘上所有的分区相关信息。其格式如下:
# fdisk -l [DEVICE]
[root@localhost ~]# fdisk -l
――――――――――――――运行结果―――――――――――――――――
Disk /dev/sda: 128.8 GB, 128849018880 bytes # 分区大小 255 heads, 63 sectors/track, 15665 cylinders # 每个磁道上有63个扇区一共有15665个柱面 Units = cylinders of 16065 * 512 = 8225280 bytes # 柱面大小 Sector size (logical/physical): 512 bytes / 512 bytes # 每个扇区是512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes # I/O大小以扇区为单位,最小扇区为512 bytes,即读一个数据,最小必须是512个字符, # 即使该文件中只有1个字符,也必须读一个完整的扇区。 Disk identifier: 0x0008a622 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux # /dev/sda1 从柱面1开始,到64柱面结束,包括512000个磁盘块 Partition 1 does not end on cylinder boundary. # 提示信息,没有包含整个柱面。一个柱面要么属于一个分区, #要么不属于,如果分区时不是按照这个原则,那么就会出现这样的警告信息 /dev/sda2 64 15666 125316096 8e Linux LVM Disk /dev/mapper/VolGroup-lv_root: 53.7 GB, 53687091200 bytes 255 heads, 63 sectors/track, 6527 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: 0x00000000 Disk /dev/mapper/VolGroup-lv_swap: 2113 MB, 2113929216 bytes 255 heads, 63 sectors/track, 257 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: 0x00000000 Disk /dev/mapper/VolGroup-lv_home: 72.5 GB, 72519516160 bytes 255 heads, 63 sectors/track, 8816 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: 0x00000000
如果只想查看某一个磁盘的分区信息,则可以在该命令后面加上具体的设备名称,如fdisk -l /dev/sda就可以只查看/dev/sda这个磁盘的分区信息。
[root@localhost ~]# fdisk -l /dev/sda
――――――――――――――运行结果―――――――――――――――――
Disk /dev/sda: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 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: 0x0008a622 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 64 7858 62606361 83 Linux
如果想查看某一个磁盘上具体某一块分区的信息,还可以进一步指定磁盘的分区编号。Linux中具体的分区可以表示为如下形式:
sda[1-]
故可以指定具体的分区:sda1, sda2, sda3, sda4, sda5(第一个逻辑分区)...这里无论前面的主分区有多少个,逻辑分区一定是从sda5开始的。
[root@localhost ~]# fdisk -l /dev/sda1
――――――――――――――运行结果―――――――――――――――――
Disk /dev/sda1: 524 MB, 524288000 bytes 255 heads, 63 sectors/track, 63 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: 0x00000000