磁盘分区从物理上看,是按照磁道(track)分的。
盘片旋转时,角速度是确定的,意味着越靠外的磁道在同样的时间内转过的距离越长,读取的数据量就越大,性能越好,因此访问最频繁的数据应该放在最外面的磁道,一般来讲,分区编号越靠前,其磁道越靠外,性能越好,这也是操作系统要放在C盘的原因。划分分区的时候是以柱面来划分的。一个分区占有一段连续的柱面。
每一个磁盘设备都是使用文件来标记的,而所有硬件相关的文件都放在/dev目录下。
IDE接口的硬盘在/dev下都以hd开头,第一个硬盘叫/dev/had,第二块叫做/dev/hdb,第三块叫做/dev/hdc,以此类推。在个人计算机上,一般有两个IDE口,每一个口上可以接两块盘,一主一从。第一个口上的主盘就叫hda,第一个口上的从盘叫做hdb;第二个口上的主盘叫做hdc。 SATA接口的硬盘在/dev下都以sd开头,SATA没有主从的概念。
USB接口也表现为sd。
SCSI接口也表现为sd。
SAS接口也表现为sd。
查看IDE接口的设备:
[root@redhat4 dev]#ls -l hd*
brw-rw---- 1 root disk 22, 0 2016-01-20 hdc
# VMware模拟出来的光驱都是IDE接口的,而且都在第二个口的主盘上(/dev/hdc)
查看S*接口的设备:
[root@redhat4 dev]#ls -l sd*
brw-rw---- 1 root disk 8, 0 2016-01-20 sda
brw-rw---- 1 root disk 8, 1 2016-01-20 sda1
brw-rw---- 1 root disk 8, 2 2016-01-20 sda2
# sda1和sda2的由来:每一个磁盘都可以分为多个区,每个区都是一个独立的块设备,所以每一个分区都需要一个设备文件。而无论是哪一种接口的磁盘,每一块磁盘上的分区编号中,主分区(扩展分区)占据了1-4这几个编号,扩展分区对于磁盘来讲只能有一个,逻辑分区的编号>=5。
查看当前系统的磁盘设备:
root@ubuntu:~# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
#磁盘名称、大小、多少个字节
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
#每个磁道有多少个扇区,一共有多少个柱面
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x0007ef80
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 39845887 19921920 83 Linux
/dev/sda2 39847934 41940991 1046529 5 Extended
/dev/sda5 39847936 41940991 1046528 82 Linux swap / Solaris
#Boot字段指明该分区是否为引导分区,引导分区就是默认操作系统所在的分区。加*则是。
#Start和End指明分区的开始和结束柱面。
#格式化以后才有block。
#ID指的是分区的文件系统类型。83为普通Linux分区(无论是ext2、ext3还是其他文件系统),82是swap分区。Linux的虚拟内存要使用独立的文件系统,也就是要独立的分区。因为是模拟内存,故对性能要求较高,应该把swap放到尽可能靠外的柱面上。
要想创建分区得有剩余空间,查看是否有多余的柱面也就是查看是否有剩余空间。查看是否有的方法如红色标记所示。
创建新分区:
1. fdisk进入交互界面:
root@ubuntu:~# fdisk /dev/sda
Command (m for help):
2. 查看可以使用的单字符命令:
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 quitwithout 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)
3. 使用n命令,指定要创建的分区类型:
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p):
4. 选择p,创建主分区,并选择分区号为3:
Using default response p
Partition number (1-4, default 3): 3
5. 选择分区的大小(指定开始柱面和结束柱面):
First sector (39845888-41943039, default39845888):
Using default value 39845888
Last sector, +sectors or +size{K,M,G} (39845888-39847933, default 39847933):
Using default value 39847933
#大小的设置有不同的方法
6. 再次查看磁盘分区表
Command (m for help): p
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders,total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x0007ef80
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 39845887 19921920 83 Linux
/dev/sda2 39847934 41940991 1046529 5 Extended
/dev/sda3 39845888 39847933 1023 83 Linux
/dev/sda5 39847936 41940991 1046528 82 Linux swap / Solaris
Partition table entries are not in disk order
7. 创建完分区后必须格式化才能使用:
格式化分为低级格式化和高级格式化。
低级格式化由厂商完成,主要是划分磁道和扇区。
高级格式化的目的是创建文件系统。文件系统是软件,在内核中。
Ext2和ext3的区别:
Extended:扩展。Ext2和ext3的核心区别:ext2不支持日志(journal)功能;ext3支持日志功能。
什么是日志文件系统?
正常情况下,创建一个文件时,会先在metadata区为文件申请一个iNode号,然后找到文件所在目录的路径映射表,插入文件的名字和iNode,然后在data区为文件分配block,并把文件数据写入block中。
如果在写block时系统突然断电,当操作系统重启时,文件的iNode还在,路径映射表中也有对应的条目,但是文件不完整,不能被使用。一般而言开机时,文件系统会做完整性校验,但是还原文件的可能性很小。而且要对整个文件系统做完整性校验,时间代价巨大。
此时日志就派上用场了。在磁盘上划分一块日志区,申请空闲iNode时,先把iNode存到日志区,然后在目录block的路径映射表里建条目,接着往数据区存数据,等这一切做完了,再把日志区的条目移动到元数据区。
开机后不用对整个文件系统进行扫描,只需要检查日志区就可以了。
在日志文件系统中,iNode要先存在日志区,然后移动到元数据区,在写入频繁的分区中,或者小文件多的分区中,日志文件系统的性能没有非日志文件系统的性能好,但是日志文件系统在崩溃恢复时的性能是高于非日志文件系统的。
日志的使用方式有三种:
1. 只对iNode使用日志
2. 不但把iNode放日志区,同时把数据也放iNode里,性能更差
3. 在2的基础上,一旦存储成功,隔一段时间才把iNode和数据写回该有的位置,这性能高于2。
给分区取一个名字,用这个名字就可以操作这个分区,这个名字就叫做卷标。
在X86平台的电脑上,内存页大小为4K,所以文件系统的block大小不能大于4K,一般而言是1K、2K、4K的大小。Block大小是在格式化的时候决定的。
格式化分区:
root@ubuntu:~# mkfs.ext3 /dev/sda5
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65408 inodes, 261376 blocks
13068 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
32768,98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accountinginformation: done