计算机有五大组成部件:输入设备、输出设备、存储器、运算器、控制器。输入输出设备我们统称为IO设备,运算器和控制器称为CPU,存储器有断电丢失数据的内存和数据持久存储的磁盘等。对于企业而言,用户数据就是资本,由此可见,一个合理的磁盘管理方案显得至关重要。如何创建一个符合特定业务的磁盘管理方案呢?下面就让我们一起来看看吧。

一、硬盘结构

对于Linux而言,一切设备皆文件,对于磁盘的访问就如同访问文件一样,因为磁盘使用的是文件系统接口。每一个文件都有一个文件作为它的访问入口,此文件称之为设备文件。如果同一个设备有两个,它们如何于文件系统相关联呢?Linux中将同一种设备文件用主设备好来标识,对于同种设备的多个设备则用次设备号来表示。

[root@linux ~]# ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Aug 25 17:21 /dev/sda

上面中的8就是主设备号(major number),0是次设备号(minor number)。

硬盘有多种接口类型:

并行接口:IDE:133MB/S,SCSI:640MB/S

串行接口:SATA:6Gbps,SAS:6Gbps,USB:480MB/S

硬盘由盘片、主轴马达、磁头和磁臂等组成,盘片上有磁性的存储介质,我们将盘片划分为磁道(track)、柱面(cylinder)和扇区(sector:512bytes)等几个部分,在centos6中分区以柱面为单位,而在centos7中则以扇区为单位。

除了机械硬盘外,还有更快速的固态硬盘(ssd),和传统硬盘技术不同,固态硬盘没有马达和盘片,厂商用适当的闪存配合一些控制芯片就可以制造固态硬盘,其耗电量仅有传统机械硬盘的5%,读取速度是机械硬盘的3倍,写入速度是传统磁盘的1.5倍,如果采用pcie的接口甚至可以达到内存的存取速度,且没有任何噪音。

二、磁盘分区

为什么要对磁盘分区呢?磁盘分区的主要作用是保护数据,同一个磁盘如果文件系统发生故障必须重新格式化(这样的情形应该很少),如果只有一个分区则整个硬盘的数据都会丢失,如果磁盘分为了好几个区则只会丢失当前分区的数据。但是对于异常稳定的Linux系统,其文件系统并不是那么容易出问题,而且Linux的数据一般都会备份,所以单从数据安全来说,Linux并没有必要将硬盘分为多个区。但是Linux经常面临复杂的业务环境,有的业务可能有很多小文件,有的业务会生成大文件,当他们运行在同一个系统上时就必须要有针对的进行分区。

  • 分区方式:

MBR:使用32位表示扇区数,分区不超过2T,最多有4个主分区,如果有需要可以将一个主分区替换为扩展分区,然后在扩展分区下创建逻辑分区。mbr是传统的分区方式,现在大多数的分区仍然采用mbr的方式。mbr在0磁道(盘片的最外层)0扇区,共512个字节。

mbr分为三个部分:

第一部分:446bytes,存储boot loader,系统开机要加载的程序文件

第二部分:64bytes,存储分区表,每16bytes标识一个分区,一共存储4个,扩展分区里存放的是指向逻辑分区所在的分区信息,它在磁盘的其他地方存储。

第三部分:2bytes标识信息,55AA表示前面的信息是有效的

Linux磁盘管理——磁盘分区、文件系统和设备挂载_磁盘

GPT分区方式:

GPT是一种较新的分区方式,目前在市面上购买的电脑都是采用的gpt分区方式。GPT:GUID patition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)。使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位。UEFI (统一扩展固件接口)硬件支持GPT。

Linux磁盘管理——磁盘分区、文件系统和设备挂载_分区_02

  • 分区工具

根据不同的分区方式有不同的分区工具,mbr分区通常使用fdisk工具

fdisk:管理磁盘分区表

选项:

-b:指定扇区大小

-c:指定兼容模式,dos或nondos默认是nondos模式,在centos7中被废弃

-l:列出指定设备的分区表并退出

-s:打印指定分区的大小

-u:指定用扇区或柱面来表示磁盘大小

分区时的命令选项:

a:用*来表示启动分区

Linux磁盘管理——磁盘分区、文件系统和设备挂载_管理_03

b:编辑BSD磁盘

c:标识dos标记

Linux磁盘管理——磁盘分区、文件系统和设备挂载_分区_04

d:删除一个分区

g:创建一个新的空GPT分区表,创建完重启虚拟机后提示重装操作系统

l:列出已知的分区类型

n:添加一个新的分区

o:创建新的空dos分区表

q:不保存退出

t:改变分区系统编号,给boot分区改变文件系统后系统无法启动

u:改变磁盘大小单位,在sector和cylinder间切换

v:校验分区表

w:将分区表写入磁盘并退出

x:专业人员使用选项

专业级的命令:

b:移动分区的起始位置

c:改变磁盘柱面数

d:打印mbr

e:列出扩展分区的信息

f:修复磁盘顺序

g:创建一个SGI的分区表

h:改变磁头的数量

i:改变磁盘标识符,十六进制

r:回到主菜单

s:改变每个磁道的扇区数

查看内核是否已经识别新的分区:

[root@linux ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0 48.8G  0 part /
├─sda3   8:3    0    4G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0 19.5G  0 part /testdir
sr0     11:0    1  7.2G  0 rom  
[root@linux ~]# cat /proc/partitions 
major minor  #blocks  name
   8        0  209715200 sda
   8        1     512000 sda1
   8        2   51200000 sda2
   8        3    4194304 sda3
   8        4          1 sda4
   8        5   20480000 sda5
  11        0    7587840 sr0

通知内核重新读取硬盘分区表

新增分区用:

partx-a -n M:N /dev/DEVICE

kpartx-a /dev/DEVICE -f: force

删除分区用:

partx-d --n M:N /dev/DEVICE

centos6: --nr N-M

CentOS 5,7: 使用partprobe

parted命令:操作都是实时生效的,小心使用
    用法:parted [选项]... [设备 [命令 [参数]...]...]
    parted /dev/sdb mklabel gpt|msdos 将磁盘转换为GPT格式或MBR格式
    parted /dev/sdb print 打印某个磁盘分区表
    parted /dev/sdb mkpart primary 1 200 (默认M)分割出一个200M的分区
    parted /dev/sdb rm 1 删除磁盘分区1
    parted -l 打印所有磁盘的分区表

  • 分区格式化

(一)文件系统定义:
1、操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
2、从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
(二)常见文件系统类型

1、Linux文件系统:
ext2, ext3, ext4扩展文件系统
VFS:Linux的虚拟文件系统
xfs(SGI), btrfs(Oracle)

reiserfs, jfs(AIX), swap
交换分区:swap光盘:iso9660
2、Windows:fat32, ntfs
3、Unix: FFS(fast), UFS(unix), JFS2
4、网络文件系统:NFS(linux常用网络文件系统), CIFS(windows局域网文件系统)
5、集群文件系统:GFS2, OCFS2(oracle)
6、分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre
7、未经处理或者未经格式化产生的文件系统:RAW
8、ext2和ext3、ext4的区别:
ext2:非日志文件系统ext3、ext4:日志文件系统
速度稍快    速度稍慢
数据安全性低    数据安全性高

9、查前内核支持的文件系统:cat /proc/filesystems
(三)文件系统分类
1、根据其是否支持"journal"功能:

日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat
2、文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
(四)创建文件系统
mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
.ext4  格式化为ext4格式
.xfs   格式化为xfs格式
.btrfs 格式化为btrfs格式

.vfat  格式化为vfat格式
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 设定卷标

ext4  格式化为ext4格式
xfs   格式化为xfs格式
btrfs 格式化为btrfs格式
vfat  格式化为vfat格式
(3)创建ext文件系统
mke2fs:ext系列文件系统专用管理工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j: 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-N #:为数据空间创建多少个inode
-I 一个inode记录大小128---4096
-m #: 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...]:启用指定特性
-O ^FEATURE:关闭指定特性
(4)文件系统卷标
指向设备的另一种方法,与设备无关
blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
(5)findfs :查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
(五)调整文件系统
(1)tune2fs调整ext文件系统属性
-l:查看指定文件系统超级块信息;super block
-L "LABEL":修改卷标
-m #:修改预留给管理员的空间百分比
-j: 将ext2升级为ext3(无损操作),不可逆操作
-o: 调整文件系统的默认挂载选项,–o ^acl(挂载文件系统访问控制列表)
-O: 文件系统属性启用或禁用, –O ^has_journal(启用或禁用日志功能)
-U UUID: 修改UUID号
-c #:指定挂载次数达到#次之后进行自检(0、-1关闭自检功能)
-i #:指定挂载使用#天后进行自检
-l:显示超级块中的信息

(2 )dumpe2fs:显示文件系统属性信息
-h:查看超级块信息(分组信息),分区用分组管理
(3)文件系统检测和修复
常发生于死机或者非正常关机之后

挂载为文件系统标记为“dirty”
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-a: 自动修复错误
-r: 交互式修复错误
注意: FS_TYPE一定要与分区上已经存在的文件类型相同
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复

分区挂载

挂载:将其它文件系统与根文件系统中现存的目录建立起关联关系,进而使得此目录成为其它文件系统访问入口的行为
卸载:将某文件系统与当前根文件系统的关联关系移除
(1)mount设备 挂载点

设备:UUID、LABLE、/dev/sd#
1、设备文件:例如/dev/sda5
2、 卷标:-L 'LABEL', 例如 -L 'MYDATA'
3、 UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
4、伪文件系统名称:proc, sysfs, devtmpfs, configfs
挂载点:

1、目录得事先存在
2、目录没有被其它进程使用
3、目录下原有文件在挂载完成后会被临时隐藏
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
(2)umount设备/挂载点
注意:挂载的设备(文件系统)没有被其它进程使用
(3)mount常用命令选项
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新/etc/mtab,隐藏挂载
只有cat /proc/mounts可以查看到实际是挂载中的
df -h cat /etc/mtab 都查看不到真实挂载状态
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L 'LABEL': 以卷标指定挂载设备
-U 'UUID': 以UUID指定要挂载的设备
-B, --bind: 绑定目录到另一个目录上(写入fstab文件时,需要使用none bind)
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async:异步模式
sync:同步模式,内存更改时,同时写磁盘
atime/noatime:是否每次更新atime
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,需要与-a选项并用
exec/noexec:是否支持文件系统上的程序自动运行
dev/nodev:是否允许在此文件系统上启用设备文件访问设备内容
loop:挂载为本地回设备(挂载ISO镜像文件时)
remount:重新挂载
ro:只读
rw:读写
acl:启用此文件系统上的acl功能
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
suid/nosuid:是否支持文件系统上程序的suid和sgid权限
Defaults:相当于rw, suid, dev, exec, auto, nouser, async

注意:默认挂载选项启用的权限是比较丰富的,作为管理员使用时要谨慎对待
对于外来设备挂载时一定要关闭suid和exec功能,防止病毒入侵与木马自动提权
(4)查看挂载情况:
findmnt MOUNT_POINT
cat /proc/mounts:查看内核追踪到的已挂载的所有设备
查看正在访问指定文件系统的进程
lsof MOUNT_POINT

fuser -v MOUNT_POINT
(5)终止所有在正访问指定的文件系统的进程

fuser -km MOUNT_POINT 正在访问当前目录的用户会被直接踢出登录终端
(6)文件挂载配置文件:/etc/fstab
每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统:UUID(UUID="")、LABEL(LABEL="")、设备文件名、伪文件系统名称(proc, sysfs)——当然使用UUID最专业,也最精确了,使用其它名称容易出错。
挂载点
文件系统类型
挂载选项:defaults    相当于rw, suid, dev, exec, auto, nouser, async功能集合
转储频率(每多少天做一次完全备份) 0:不做备份 1:每天转储 2:每隔一天转储
自检次序(只有根可以为1)0:不自检1:首先自检