前言
最近在工作中总能遇到同事吐槽电脑磁盘空间不足的情况,对于系统管理员来说,合理分配管理自己的磁盘文件系统是一项必备的技能。所以在此我总结了相关的资料以备不时之需。
一、磁盘结构及分区表示
1.磁盘基础
硬盘(Hard Disk Drive ,简称HDD)是计算机常用的存储设备之一
1.1 硬盘的结构
- 物理结构
①盘片:硬盘有多个盘片,每个盘片2面 ②磁头:每面一个磁头 - 数据结构
①扇区:磁盘上的每个磁道被分为若干个弧段,这些弧段便是硬盘的扇区。硬盘的第一个扇区,叫做引导扇区。 ②磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。 ③柱面:在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面。 如下图所示: - 存储容量
磁盘存储容量=磁头数X磁道(柱面)数X每道扇区数X每扇区字节数
1.2 硬盘的接口
硬盘按数据接口不同,大致分为 ATA(IDE)和 SATA 以及 SCSI 和 SAS
名称 | 说明 |
---|
ATA | 并口数据线连接主板与硬盘,抗干扰性太差,且排线占用空间较大,不利电脑内部散热,已逐渐被 SATA 所取代 | SATA | 抗干扰性强,支持热插拔等功能,速度快,纠错能力强 | SCSI | 小型机系统接口,SCSI硬盘广为工作站级个人电脑以及服务器所使用,资料传输时CPU占用率较低,转速快,支持热插拔等 | SAS | 是新一代的scSI技术,和sATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到 6Gb/s |
2.磁盘分区表示
2.1 MBR
- MBR是主引导记录(MBR:Master Boot Record),位于硬盘的第一个物理扇区处,MBR中包含硬盘的主引导程序和硬盘分区表,分区表有4个分区记录区,每个分区记录区占16字节。
- 主启动记录(MBR)磁盘分区支持最大卷为2.2TB,每个磁盘最多有4个主分区,或3个主分区、1个扩展分区和在扩展分区里面分多个逻辑分区。
- Linux中将硬盘、分区等设备均表示为文件
/dev/hda5
#dev 是硬件设备文件所在目录
#hd 表示IDE设备,sd 表示SCSI设备
#a 表示硬盘的顺序号,以字母a,b,c...表示
#5 表示分区的顺序号,以数字1.2.3...表示
2.2 磁盘分区结构
常见的硬盘可以划分为主分区、扩展分区和逻辑分区,通常情况下主分区只有四个,而扩展分区可以看成是一个特殊的主分区类型,在扩展分区中可以建立逻辑分区。主分区一般用来安装操作系统,扩展分区则多用来存储文件数据。
- 主分区和扩展分区的序号限制在1~4
- 逻辑分区的序号始终从5开始
2.3 文件系统类型
文件系统类型决定了向分区中存放、读取文件数据的方式和效率,在对分区进行格式化时需要选择使用的文件系统类型。最常用的文件系统主要包括以下几种格式:
-
EXT4:第4代扩展文件系统,用于存放文件和目录数据的分区,是 Linux系统中默认使用的文件系统。是典型的日志型文件系统,其特点是保存有磁盘存取记录的日志数据,便于恢复,在存取性能和稳定性方面更加出色。 -
SWAP:交换文件系统,用于为Linux系统建立交换分区。交换分区的作用相当于虚拟内存,能够在一定程度上缓解物理内存不足的问题。一般建议将交换分区的大小设置为物理内存的 1.5~2倍。例如,对于拥有 512MB物理内存的主机,其交换分区的大小建议设置为1024NB。如果服务器的物理内存足够大(如 8GB以上),也可以不设置交换分区。交换分区不用于直接存储用户的文件和目录等数据。 -
XFS:是一种高性能的日志文件系统,特别擅长于处理大文件,可支持上百万T字节的存储空间。由于XFS文件系统开启日志功能,所以即便发生宕机也不怕数据遭到破坏,这种文件系统可以根据日志记录在短时间内进行数据恢复。 -
Linux系统还广泛支持其他各种类型的文件系统: 如JFS、FAT16、FAT32、NTFS 等。 -
Centos 6默认使用EXT4而Centos 7默认使用XFS
二、管理磁盘及分区
在Linux服务器中,当现有硬盘的分区规划不能满足要求,例如,根分区的剩余空间过少,无法继续安装新的系统程序时,就需要对磁盘中的分区进行重新规划和调整,有时候还需要添加新的硬盘设备来扩展存储空间。
1.检测并确认新硬盘——fdisk
- 想要实现上面所说的操作需要用到 fdisk 磁盘及分区管理工具,fdisk 是大多数Linux系统中自带的基本工具之一,具有查看和管理磁盘分区的作用。
fdisk 命令格式如下:
fdisk -l [磁盘设备]
或
fdisk [磁盘设备]
案例 用fdisk 命令查看当前我的磁盘信息:
[root@localhost ~]#fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00090272
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 9414655 4194304 82 Linux swap / Solaris
/dev/sda3 9414656 125829119 58207232 83 Linux
磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4b3de2b9
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
上面输出信息中包含了各硬盘的整体情况和分区情况,其中“/dev/sda”为原有的硬盘设备,而“/dev/sdb”为新增的硬盘,对于已有的分区,将通过列表的方式输出以下的信息:
- Decice:分区的设备文件名称
- Boot:是否引导分区。是,则有“ * ”标识
- Start:该分区在硬盘中的起始位置(柱面数)
- End:该分区在硬盘中的结束位置(柱面数)
- Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节
- Id:分区对应的系统ID号。83表示Linux 中的EXT4分区、8e 表示LVM逻辑卷
- System:分区类型
2.规划硬盘中的分区
在硬盘中创建、删除、更改分区等操作同样通过 fdisk 命令进行
[root@localhost ~]#fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):
- 输入特定的分区操作指令可以完成各项分区管理任务,例如,输入“m” 指令后,可以查看各种操作指令的帮助信息:
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
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) : m #输入m指令
格式 | 说明 |
---|
-a | 设置可引导标记 | -b | 修改bsd的磁盘标签 | -C | 设置DoS操作系统兼容标记 | -d | 删除一个分区 | -l | 显示已知的分区类型,其中82为Linuxswap分区,83为Linux分区 | -p | 显示磁盘当前的分区表 | -w | 把设置写入硬盘分区表,然后退出 | -q | 退出fdisk程序,不保存任何修改 | -t | 更改分区类型 | -u | 切换所显示的分区大小的单位 | -m | 列出所有命令(显示帮助菜单) | -n | 创建一个新的分区 | -o | 创建一个新的空白的Dos分区表 |
三、管理文件系统
在Linux系统中,使用fdisk工具在硬盘中建立分区以后,还需要对分区进行格式化并挂载到系统中指定的目录,然后才能用于存储文件、目录等数据。
1.创建文件系统
创建文件系统的过程也即格式化分区的过程,在Linux系统中使用 mkfs 命令格式可以格式化 XFS 、EXT4 、FAT等不同类型的分区,而使用mkswap命令可以格式化Swap交换分区。
1.1mkfs 命令
mkfs -t 文件系统类型 分区设备
例如,把分区/dev/sdb1格式化为EXT4文件系统:
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
- 一般来说,不建议在Linux系统中创建或使用windows中的文件系统类型,包括FAT16、FAT32等,一些特殊情况,如Windows系统不可用、U盘系统被病毒破坏等除外。
1.2 mkswap 命令
在Linux系统中,Swap 分区的作用类型于windows系统中的“虚拟内存”,可以在一定程度上缓解物理内存不足的情况。当当前Linux主机运行的服务较多,需要更多的交换空间支撑时,可以为其增加新的交换分区。
mkswap 的基本命令格式如下:
mkswap 分区设备
示例:
[root@localhost ~]#fdisk /dev/sdb #首先需要把ID号设置为82
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux LVM”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w #保存并退出
[root@localhost ~]#mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 20971516 KiB
无标签,UUID=26a53c44-7a81-4b0d-943d-913d1f904fd5
[root@localhost ~]#cat /proc/meminfo |grep SwapTotal #开启之前可以先查看一下
SwapTotal: 4194300 kB
[root@localhost ~]#swapon /dev/sdb2 #启用交换空间
[root@localhost ~]#cat /proc/meminfo |grep SwapTotal #查看是否开启成功
SwapTotal: 25165816 kB
[root@localhost ~]#swapoff /dev/sdb2 #关闭交换空间
[root@localhost ~]#cat /proc/meminfo |grep SwapTotal #查看是否关闭成功
SwapTotal: 4194300 kB
2.挂载、卸载文件系统
在Linux系统中,对各种存储设备中的资源访问(如读取,保存文件等)都是通过目录结构进行的,虽然系统核心能够通过“设备文件”的方式操纵各种设备,但是对于用户来说,还需要增加一个“挂载”的过程,才能像正常访问目录一样访问存储设备中的资源。
2.1 挂载文件系统
mount命令基本格式如下:
mount [-t文件系统类型] [存储设备挂载点]
- 其中,文件系统类型通常可以省略,由系统自动识别,存储设备对应分区的设备文件名或网络资源路径,挂载点即用户指定用于挂载的目录,例如,以下操作用于将光盘设备挂载在 /media/cdrom 目录:
[root@localhost ~]#mount /dev/cdrom /media/cdrom
- 使用不带选项或者参数的mount命令时,将显示出当前系统中已挂载的各个分区的相关信息,最近挂载的文件系统将显示在最后边,如下所示:
- 在工作中,会经常从互联网中下载一些软件或应用系统的ISO镜像文件,在无法刻录光盘的情况下,需要将其解压才能浏览使用其中的文件数据。如果使用 mount 挂载则无需揭开文件包即可浏览、使用ISO镜像文件中的数据。
在挂载ISO镜像文件时,要注意的一点就是“.iso”镜像文件通常被视为一种特殊的“回环”文件系统,因此在挂载时需要添加“-o loop”选项。 案例,执行以下操作可以将下载的CentOS系统的DVD光盘镜像文件“CentOS-7-x86_64-DVD-1611.iso”挂载到/media/mnt 目录下
[root@localhost ~]#mount -o loop CentOS-7-x86_64-DVD-1611.iso /media/mnt
2.2 卸载文件系统
需要卸载文件系统时,使用的命令是 umount,使用挂载点目录或对应设备的文件名作为卸载参数。
- 卸载已挂载的文件系统——umount
命令格式如下:
umount [存储设备位置]
umount [挂载点目录]
- 由于同一个设备可以被挂载到多个目录下,所以一般建议通过挂载点的目录位置来进行卸载,例如,执行如下操作可以卸载掉挂载的光盘设备:
[root@localhost ~]#umount /dev/cdrom
2.3 设置文件系统的自动挂载
系统中的/etc/fstab文件可以视为mount命令的配置文件,其中存储了文件系统的静态挂载数据,Linux系统在每次开机时,会自动读取这个文件的内容,自动挂载所指定的文件系统 默认的fstab文件中包括了根分区,/boot分区、交换分区及proc、tmpfs等伪文件系统的挂载配置
[root@localhost ~]#cat /etc/fstab
UUID=e92a9632-e630-4f3b-8e13-b777bbd4c167 / xfs defaults 0 0
UUID=7ad71f91-b022-484a-8a4a-a05b63a67d32 /boot xfs defaults 0 0
UUID=34623334-0206-4e5b-be69-d2d85bdfcce4 swap swap defaults 0 0
/dev/sdb1 /home xfs defaults 0 0
在“/etc/fstab”文件中,每一行记录对应一个分区或设备的挂载配置信息,从左到右包括六个字段,含义如下:
- 第一个字段:设备名或分区
- 第二个字段:文件系统的挂载点目录的位置
- 第三个字段:文件系统类型
- 第四个字段:文件系统挂载参数
- 第五个字段:表示文件系统是否需要备份,一般1为需要,0为不需要。
- 第六个字段:该数字用于决定在系统启动时进行磁盘检查的顺序。0表示不进行检查,1表示优先检查。
通过在“/etc/fastb”文件中添加相应的挂载配置,可以实现开机后自动挂载指定的分区,例如,执行以下操作将添加自动挂载分区/dev/sdb1 的配置记录:
[root@localhost ~]#vim /etc/fstab
设置磁盘分区和自动挂载具体步骤请看案例操作
3.查看磁盘使用情况
3.1 mount 命令
不带选项及参数的mount 命令可以显示分区的挂载情况,若要了解系统中已挂载的文件系统磁盘使用情况,如剩余磁盘空间比例等,可以使用 df 命令。
df [选项] [文件] 或[设备]
格式 | 说明 |
---|
-i | 显示inode信息而非块使用量 | -h | 以容易理解的格式印出文件系统大小,例如136KB、2 4MB、21GB | -T | 显示文件系统类型 | -l | 计算所有的文件大小,对硬链接文件则计算多次 | -k | 以1024字节为单位列出磁盘空间使用情况 |
3.2 lsblk 命令
lsblk 命令能列出系统上所有的磁盘
命令格式如下:
lsblk [参数]
格式 | 说明 |
---|
-a | 显示所有设备 | -b | 以bytes方式显示设备大小 | -d | 仅列出磁盘本身,并不会列出该磁盘的分区数据 | -e | 排除设备 | -f | 同时列出该磁盘内的文件系统名称 | -h | 显示帮助信息 | -m | 显示权限信息 | -i | 使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用) | -p | 列出该设备的完整文件名!而不是仅列出最后的名字而已。 | -t | 列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等 |
例如,输入 lsblk 命令,会显示出我的所有磁盘信息:
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 55.5G 0 part /
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 20G 0 part
│ └─vgname1-lvname1 253:0 0 30G 0 lvm /opt
└─sdb2 8:18 0 20G 0 part
sdc 8:32 0 60G 0 disk
├─sdc1 8:33 0 20G 0 part
│ └─vgname1-lvname1 253:0 0 30G 0 lvm /opt
├─sdc2 8:34 0 20G 0 part
└─sdc3 8:35 0 20G 0 part
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
总结
在工作中出于谨慎考虑,对于磁盘及文件的管理需要非常熟练,需要了解各项报错的原因以及如何去解决问题,以免造成无法估量的后果。
|