计算机有五大组成部件:输入设备、输出设备、存储器、运算器、控制器。输入输出设备我们统称为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表示前面的信息是有效的
GPT分区方式:
GPT是一种较新的分区方式,目前在市面上购买的电脑都是采用的gpt分区方式。GPT:GUID patition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)。使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位。UEFI (统一扩展固件接口)硬件支持GPT。
分区工具
根据不同的分区方式有不同的分区工具,mbr分区通常使用fdisk工具
fdisk:管理磁盘分区表
选项:
-b:指定扇区大小
-c:指定兼容模式,dos或nondos默认是nondos模式,在centos7中被废弃
-l:列出指定设备的分区表并退出
-s:打印指定分区的大小
-u:指定用扇区或柱面来表示磁盘大小
分区时的命令选项:
a:用*来表示启动分区
b:编辑BSD磁盘
c:标识dos标记
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=
(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:首先自检