磁盘基础
硬盘(Hard Disk Driver,简称HDD)是计算机常用的存储设备之一。
文章目录
磁盘的结构
硬盘的物理结构
盘片:硬盘有多个盘片,每个盘片2面
磁头:每面一个磁头
硬盘的数据结构
扇区:盘面被分成多个扇形区域,每个扇区存放512个字节的数据,硬盘的第一个扇区,叫做引导扇区
磁道:同一盘片不同半径的同心圆(当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track))
柱面:不同盘片相同半径构成的圆柱面(在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder))
存储容量
硬盘存储容量=磁头数 x 磁道(柱面)数 x 每道扇区数 x 每扇区字节数
可以用柱面/磁头/扇区来确定唯一定位磁盘上每一个区域,用fdisk -l查看分区信息
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:322.1 GB, 322122547200 字节,629145600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d477d
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 6295551 2098176 82 Linux swap / Solaris
/dev/sda3 6295552 629145599 311425024 83 Linux
磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
硬盘的接口
- IDE、SATA、SCSI、SAS、光纤通道
硬盘按照数据接口不同,分为以下几种(接口速率不是实际硬盘数据传输的速度)
ATA(IDE(并口)):并口数据线连接主板与硬盘,抗干扰性太差,且排线占用空间较大,不利于电脑内部散热,逐渐被SATA所取代
SATA(串口):全称是Serial ATA,抗干扰性强,支持热插热拔等功能,速度快,纠错能力强。
SCSI:全称是 Small Computer System Interface(小型机系统接口),SCSI硬盘广为工作站级个人电脑以及服务器所使用的,资料传输时CPU占用率较低,转速快,支持热插热拔等
SAS(Serial Attached SCSI):是新一代的SCSI技术,和SATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到6Gb/s
磁盘分区表示
MBR
MBR是主引导记录(Master Boot Record),位于硬盘第一个物理扇区处(引导扇区)
MBR中包含硬盘的主引导程序和硬盘分区表。分区表有4个分区记录区,每个分区记录区占16个字节
MBR最多四个分区,可创建逻辑分区
磁盘分区的表示
常见的硬盘可以划分为主分区、扩展分区和逻辑分区,通常情况下主分区只有四个,而扩展分区可以看成时一个特殊的主分区类型,在扩展分区中可以建立逻辑分区。主分区一般用来安装操作系统,拓展分区多用来储存文件数据。
Linux中将硬盘、分区等设备均表示为文件
- 硬盘:对于IDE接口的硬盘设备,表示为“hdX”形式的文件名。而对于SCSI接口的硬盘设备,则表示为“sdX”形式的文件名。其中"X"可以为a,b,c,d等字母序号。例如:将系统中的第一个IDE设备(硬盘)表示为“hda”,将第二个SCSI设备表示为“sdb”
- 分区:表示分区时,以硬盘设备的文件名作为基础,然后在后面添加该分区(主分区,扩展分区,逻辑分区)对应的数字序号即可。例如:第一个IDE硬盘中的第一个分区表示为"hda1",第二个分区表示为"hda2"。第二个SCSI硬盘中的第三个分区表示为"sdb3",第五个分区表示为"sdb5"
磁盘分区结构
- 硬盘中的主分区数目只有4个
- 因此主分区和扩展分区的序号也就限制在1-4
- 扩展分区再分为逻辑分区
- 逻辑分区的序号将始终从5开始
文件系统类型
文件系统(File System)类型决定了向分区中存放,读取文件数据的方式和效率,在对分区进行格式化的时候需要选择所用的文件系统类型,在Windows操作系统中,经常使用的文件系统类型包括FAT32 , NTFS等格式,而在Linux系统中,最常使用的文件系统主要包括以下几种格式
-
EXT4文件系统:第四代拓展文件系统
1.存放文件和目录数据的分区
2.高性能的日志型文件系统
3.Linux系统中默认使用的文件系统 -
SWAP:交换文件系统
1.为Linux系统建立的交换分区
2.交换分区相当于虚拟内存,能够在一定程度上缓解物理内存不足的问题
3.一般建议将交换分区的大小设置为物理内存的1.5-2倍。 -
Linux支持的其它文件系统类型
1.FAT16 , FAT32 , NTFS
2.EXT4 M JFS … -
XFS:一种高性能的日志文件系统
1.开启了日志功能,即使发生宕机也不怕数据遭到破坏,可以根据日志记录在短时间内进行数据恢复。
2.高性能的日志文件系统,特别擅长处理大文件,可支持上百万T字节的存储空间
3.CentOS 7系统中默认使用XFS文件系统
管理磁盘及分区
在Linux服务器中,当现有硬盘的分区规划不能满足要求(例如,根分区的剩余空间过少,无法继续安装新的系统程序)时,就需要对硬盘中的分区进行重新规划和调整,有时候还需要添加新的硬盘设备来扩展存储空间
实现上述操作需要用到fdisk磁盘及分区管理工具,fdisk是大多数Linux系统中自带的基本工具之一。
分区对应的系统ID号中,83表示Linux中的EXT4分区,8e 表示LVM逻辑卷
检测并确认新的硬盘
挂载号新的硬盘设备并启动主机后,Linux系统会自动检测并加载该硬盘,无须额外安装驱动。
fdisk命令 列出当前系统中所有硬盘设备及其分区的信息
-
查看或管理磁盘分区
fdisk -l [磁盘设备]
fdisk [磁盘设备] -
交互模式中的常用指令
m、p、n、d、t、w、q
常用指令
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition ###常用 删除分区
l list known partition types ###常用 查看分区对应的系统ID号
m print this menu ###常用 列出手册
n add a new partition ###常用 添加分区/创建新分区
o create a new empty DOS partition table
p print the partition table ###常用 列出硬盘中的分区情况,信息显示的格式与执行"fdisk -l"命令相同
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)[root@localhost ~]# fdisk -l 磁盘 /dev/sda:322.1 GB, 322122547200 字节,629145600 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000d477d 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 6295551 2098176 82 Linux swap / Solaris /dev/sda3 6295552 629145599 311425024 83 Linux 磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节
例如
[root@localhost ~]# fdisk /dev/sdb //进入fidsk分区工具的交互操作界面
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x98aa708b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x98aa708b
设备 Boot Start End Blocks Id System
1)创建两个主分区。
首先建立第一个主分区(/dev/sdb1),容量指定为20G
命令(输入 m 获取帮助):n //开始创建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): //直接回车,接受默认p:创建主分区
Using default response p
分区号 (1-4,默认 1): //直接回车,接受默认值1,主分区的编号为1'
起始 扇区 (2048-41943039,默认为 2048): //直接回车,接受默认扇区大小2048'
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-629145599,默认为 629145599):+20G
分区 1 已设置为 Linux 类型,大小设为 20 GiB
按照类似的操作步骤继续创建第2个主分区(/dev/sdb2),容量也指定为20GB,完成后可以输入“p”指令查看分区情况
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (41945088-629145599,默认为 41945088):
将使用默认值 41945088
Last 扇区, +扇区 or +size{K,M,G} (41945088-629145599,默认为 629145599):+20G
分区 2 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4fc461c7
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
2)创建一个拓展分区和两个逻辑分区
接下来可以使用剩余的硬盘空间创建扩展分区,然后在扩展分区中创建逻辑分区。需要注意的是,若主分区、逻辑分区均已创建完毕(四个主分区号已用完),这再次输入“n”指令后将不再提示选择分区类别。
首先建立扩展分区(/dev/sdb4),使用剩下的所有空间(全部空间分配完毕后,将无法再建立新的主分区)。
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e //选择建立的为扩展分区
分区号 (3,4,默认 3):4 //选择4作为扩展分区的编号
起始 扇区 (83888128-629145599,默认为 83888128):
将使用默认值 83888128
Last 扇区, +扇区 or +size{K,M,G} (83888128-629145599,默认为 629145599):
将使用默认值 629145599
分区 4 已设置为 Extended 类型,大小设为 260 GiB
接下来在扩展分区建立第1个逻辑分区(/dev/sdb5),容量指定为2GB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l //选择创建的分区为逻辑分区
添加逻辑分区 5
起始 扇区 (83890176-629145599,默认为 83890176):
将使用默认值 83890176
Last 扇区, +扇区 or +size{K,M,G} (83890176-629145599,默认为 629145599):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB
按照类似的操作步骤继续创建第2个逻辑分区(/dev/sdb6),容量指定为10GB,完成后可以再次输入“p”指令查看分区情况
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (88086528-629145599,默认为 88086528):
将使用默认值 88086528
Last 扇区, +扇区 or +size{K,M,G} (88086528-629145599,默认为 629145599):+10G
分区 6 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4fc461c7
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
/dev/sdb4 83888128 629145599 272628736 5 Extended
/dev/sdb5 83890176 88084479 2097152 83 Linux
/dev/sdb6 88086528 109058047 10485760 83 Linux
命令(输入 m 获取帮助):t //设置分区对应的ID号:82代表设置为交换文件系统
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):p //查看分区情况
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x227f39cd
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 82 Linux swap / Solaris
命令(输入 m 获取帮助):wq //保存退出
管理文件系统
在Linux系统中,使用fdisk工具在硬盘中建立分区之后,还需要对分区进行格式化并挂载到系统中的指定目录,然后才能用于存储文件、目录等数据。
穿件文件系统
穿件文件系统的过程也即格式化分区的过程,在Linux系统中使用mkfs(Make filesystem,创建文件系统)命令工具可以格式化FXS、EXT4、FAT等不同类型的分区,为使用mkswap命令可以格式化Swap交换分区
mkfs命令的使用
实际上mkfs命令是一个前端工具,可以自动加载不同的程序来创建各种雷西兴的分区,而后端包括有多个与mkfs命令相关的程序,这些程序位于/sbin/目录中,如支持EXT4分区格式的mkfs.ext4程序等
[root@localhost ~]# ls /sbin/mkfs*
/sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.fat /sbin/mkfs.vfat
/sbin/mkfs.btrfs /sbin/mkfs.ext3 /sbin/mkfs.minix /sbin/mkfs.xfs
/sbin/mkfs.cramfs /sbin/mkfs.ext4 /sbin/mkfs.msdos
基本命令格式
mkfs -t 文件系统类型 分区设备
(1)创建EXT4文件系统
需要创建EXT4文件系统时,结合“-t ext4”选项指定类型,并指定要被格式化的分区设备即可。
把分区/dev/sdb1格式化为EXT4文件系统
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
2)创建FAT32文件系统
一般来说,不建议在Linux系统中创建或使用Windows中的文件系统类型,包括FAT16、FAT32等,一些特殊情况,如Windows系统不可用、U盘系统被破坏除外。
若要在Linux系统中创建FAT32文件系统,可结合“-t vfat”选项指定类型,并添加“-F 32”选项指定FAT的版本。
centos7系统默认使用xfs文件系统
mkswap命令的使用
在Linux系统中,Swap分区的作用类似于Windows系统中的“虚拟内存”,可以在一定程度上缓解物理内存不足的情况。当当前Linux主机运行的服务较多,需要更多的交换空间支撑应用时,可以为其增加新的交换分区。
使用mkswap命令工具可以在指定的分区上创建交换文件系统,目标分区应先通过fdisk工具将ID号设为82。
将分区/dev/sdb5创建为交换分区
[root@localhost ~]# fdisk -l /dev/sdb5
磁盘 /dev/sdb5:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost ~]# mkswap /dev/sdb5
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=35174256-b250-41c0-8257-d4c40bf7a647
对于新增加的交换分区,需要使用swapon命令进行启用,反之使用swapoff命令可以停用指定的交换分区。
[root@localhost ~]# cat /proc/meminfo|grep "SwapTotal:" //查看总交换空间的大小
SwapTotal: 2098172 kB
[root@localhost ~]# swapon /dev/sdb5 //启用交换分区 /dev/sdb5
[root@localhost ~]# cat /proc/meminfo|grep "SwapTotal:" //确认交换分区大小已增加
SwapTotal: 4195320 kB
[root@localhost ~]# swapoff /dev/sdb5 //停用交换分区 /dev/sdb5
挂载、卸载文件系统
在Linux系统中,对各种储存设备中的资源访问(如读取、保存文件等)都是通过怒路结构进行的,虽然系统核心能够通过“设备文件”的方式操纵各种设备,但是对于用户来说,还需要增加一个“挂载”的过程,才能像正常访问目录一样访问储存设备中的资源。
当然,在安装Linux操作系统的过程中,自动建立或识别的分区通常会由系统自动完成挂载,如“/”分区、“/boot”分区等。然而对于后来新增加的硬盘分区、光盘等设备,有时候还需要管理员手动进行挂载,实际上用户访问的是经过格式化后建立的文件系统。挂载一个分区时,必须为其指定一个目录作为挂靠点(或称为挂载点),用户通过这个目录访问设备中的文件、目录数据。
挂载文件系统
mount 命令的基本使用格式
mount [-t 文件系统类型] 存储设备挂载点
其中文件系统类型可以省略(有系统自动识别),存储设备即对应分区的设备文件名(如/dev/sdb1、/dev/cdrom)或网络资源路径,挂载点即用户指定用于挂载的目录。
将光盘设备挂载到 /opt目录。
mount命令基本格式
mount 显示当前系统中已挂载的各个分区(文件系统)的相关信息,最近挂载的文件信息将显示在最后面
mount [-t 文件系统类型] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
mount -a 将现在所有能挂载的都挂载
[root@localhost ~]# mount /dev/cdrom /opt
mount: /dev/sr0 写保护,将以只读方式挂载
不使用任何参数或选项的mount命令时,将显示出当前系统中已挂载的各个分区(文件系统)相关信息,最近挂载的文件系统显示在最后边。
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=915784k,nr_inodes=228946,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
...... // 省略部分内容
挂载Linux分区或U盘设备时的用法也一样,只需要指定正确的设备位置和挂载目录即可。
卸载文件系统
需要卸载文件系统时,使用的命令为umount,使用挂载点目录或对用设备的文件名作为卸载参数。Linux系统中,由于同一个设备可以被挂载到多个目录下,所以一般建议通过挂载点的目录位置来进行卸载。
使用命令的基本格式
umount 存储设备位置
umount 挂载点目录
[root@localhost ~]# umount /dev/cdrom //通过设备文件卸载光盘
设置文件系统的自动挂载
系统中的/etc/fstab 文件可以视为 mount 命令的配置文件,其中存储了文件系统的静态挂载数据。Linux 操作系统在每次开机时,会自动读取这个文件的内容,自动挂载所指定的文件系统。默认的 fstab 文件中包括了根分区、/boot 分区、交换分区挂载配置。
[root@localhost ~]# cat /etc/fstab
……//省略部分信息
/dev/mapper/cl-root / xfs defaults 0 0
UUID=a36c9228-cded-4f3a-96b5-0c03ce2feb61 /boot xfs defaults 0 0
在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,这些信息从左到右包括六个字段(使用空格或制表符分隔)
第 1 字段:设备名或设备卷标名。
第 2 字段:文件系统的挂载点目录的位置。
第 3 字段:文件系统类型,如 XFS、Swap 等。
第 4 字段:挂载参数,即mount 命令“-o”选项后可使用的参数。例如,defaults、rw、ro、noexec 分别表示默认参数、可写、只读、禁用执行程序。
第 5 字段:表示文件系统是否需要 dump 备份(dump 是一个备份工具)。一般设为 1 时表示需要,设为 0 时将被 dump 忽略。
第 6 字段:该数字决定在系统启动时进行磁盘检查的顺序。0 表示不进行检查,1 表示优先检查,2 表示其次检查。根分区应设为 1,其他分区设为 2。
通过在/etc/fstab 文件中添加相应的挂载配置,可以实现开机后自动挂载指定的分区。
使用 mount、umount 进行挂载、卸载操作时,若在/etc/fstab 文件中已设置有对应的挂载记录,则只需指定挂载点目录或设备文件名中的一个作为参数。例如,直接执行“mount
/dev/sdb1”或“mount /mailbox”命令,都可以将分区/dev/sdb1 挂载到/mailbox 目录下。
查看磁盘使用情况
df 命令使用文件或者设备作为命令参数,较常用的选项为“-h”和“-T”。其中,“-h”选项可以显示更易读的容量单位,而“-T”选项用于显示对应文件系统的类型。
[root@localhost ~]# df -hT