Linux磁盘存储与文件系统

磁盘存储

介绍

冯·诺依曼体系 = 运算器 + 控制器 + 存储器 + 输入设备 + 输出设备
I/O设备 = 输入设备 + 输出设备
#输入和输出均可以在内存中实现,但内存属于随机存储单元,断电就会导致数据的丢失,因此需要辅助存储设备(硬盘、光驱等)进行弥补

Linux上对设备的操作都是通过文件来实现的,因此称为设备文件,符合Linux一切皆文件的哲学思想
具体做法:
	设备文件关联至一个设备驱动程序,通过操作系统的映射跟对应的硬件设备进行通信
	在根目录下有一个存放设备文件的目录/dev/,此目录下的文件即为硬件设备映射对应的文件名称
设备类型:
	块设备:block,存取单位为"块",磁盘
	字符设备:char,存取单位为"字符",键盘
设备命名:
	磁盘设备文件命名:sd
	光盘设备文件命名:sr

磁盘结构

磁盘 = 磁头(head) + 磁道(track)+ 柱面(cylinder)+ 扇区(sector)
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
# 每个磁片有上下两面,每个磁面对应一个磁头
# 一般而言,每个扇区有512bytes
寻址方式
	CHS:最大寻址空间8GB(24位寻址,前10位cylinder,中间8位head,后6位sector)
	LBAATA-1规范28位寻址,最大寻址空间为128GB,ATA-6规范48位寻址,最大寻址空间位128PB
	# 磁盘容量在8GB以内时,CHSLBA寻址方式均可,大于8GB时只能使用LBA寻址

磁盘组成:
磁盘组成

磁盘容量计算:
磁盘容量计算

磁盘分区

分区优点:优化I/O性能、实现磁盘空间配额限制、提高修复速度、隔离系统和程序、安装多个os、采用不同文件系统
分区:MBRGPT
分区运行流程:
	MBR-BIOS
	GPT-UEFI

BIOS与UEFI运行流程:
分区运行流程

MBR分区
	主引导记录:Master Boot Record
	分区方式:按柱面(cylinder)分区
	组成部分:
		主引导程序(446bytes,Boot Loader)
		主分区表(64bytes,DPT,每16bytes表示1个分区)
		结束标志(2bytes,55AA)
	特点:
		使用32位表示扇区,分区不超过2TB
		最多支持4个分区
			4个主分区
			3个主分区+1个扩展分区(N个逻辑分区)

MBR磁盘分区结构:
MBR磁盘分区结构图

主分区表DPT结构:
分区表DPT结构

GPT分区:
	全局唯一标识分区表:GUID(Global Unique Identifiers) Partition Table
	组成部分:
		MBR兼容区块:LBA0
		GPT表头记录:LAB1
		实际记录分区信息处:LBA2-33
	特点:
		分区数量没有限制,Windows最多支持128个分区。
		使用64位表示扇区,支持512bytes/block和4096bytes/block,兼容MBR分区
		使用LBA寻址方式

GPT分区结构:
GPT分区结构

分区管理

查看分区情况(以sdb为例):
	lsblk /dev/sdb				内存中分区表
	ls /dev/sdb*				内存中分区表
	cat /proc/partitions		内存中分区表
	fdisk -l /dev/sdb			硬盘中分区表
	# 可使用partprobe /dev/sdb(CentOS6上partx)同步分区表
分区工具:
	fdisk:交互式MBR分区工具
		m:查看可使用的命令有哪些
		p:显示当前磁盘的分区信息
		n:创建新分区
		d:删除分区
		w:保存分区信息并退出
		q:不保存分区信息退出
		t:修改分区的系统ID
		l:列出系统上所有的系统ID
	gdisk:类fdisk的GPT分区工具
	parted:既支持MBR分区也支持GPT分区,支持交互和命令行两种模式,实时生效
		parted /dev/sdb mklabel gpt|msdos(mbr)			定制磁盘格式为gpt或mbr
		partef /dev/sdb print 							显示硬盘信息
		parted /dev/sdb mkpart primary 1 200 			创建一个主分区;extended(扩展分区),logical(逻辑分区)
		parted /dev/sdb rm 1							删除编号为1的分区
		parted -l 										列出磁盘信息

文件系统

文件系统类型

Linux:
	ext2(无日志功能)、ext3、ext4、xfs、swap、iso9660、VFS(虚拟文件系统)等
	# Linux支持的文件系统查看:/proc/filesystems
Windows:
	NAT32(不支持超过4GB的文件)、exFAT、NTFS(Linux无法识别)

文件系统相关操作

创建

/dev/sdb1设备,ext4文件系统为例:
mkfs -t ext4 /dev/sdb1
mkfs.ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb1
#可使用参数-L设定卷标,类似于注释

mkswap /dev/sdb1	创建交换文件系统(注意系统ID调整为8e)

查看

df:列出文件系统的整体磁盘使用量	
	-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
	-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
	-T :显示文件系统类型;
	-i :不用硬盘容量,而以inode的数量来显示
du:检查磁盘空间使用量
	-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
	-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
blkid:查看指定设备的属性信息
	-U:根据UUID查找到对应的设备
	-L:根据卷标查找到对应的设备
	
dumpe2fs:显示文件系统属性信息
	-h:只显示超级块中的信息
	
tune2fs:调整文件系统的相关属性
	-l:查看超级块中的信息
	-L:设定或修改卷标
	-m:调整预留百分比
	-r:指定预留块数
	-o:设定默认挂在选项
	-c #:指定挂载次数达到#次后进行自检,0-1为关闭此功能
	-i #:每次挂载多少天之后进行自检,0-1为关闭此功能
	
#超级块
	存放元数据metadata,超级块如果损坏则磁盘就基本无法恢复
	超级块占用第一号物理块,是文件系统的控制块
	超级块包括:文件系统的大小,空闲块数目,空闲块索引表,空闲iNode节点数目,空闲iNode索引表等
	为了防止超级块损坏,就需要对超级块进行备份,以便损坏时可以修复

挂载

挂载:将分区或者磁盘和根文件系统下的某一目录进行关联,进而使得此目录作为其他文件的访问入口
配置文件:/etc/fstab
mount [Option] [Device] [Mnt_Point]
	-t:指定文件系统类型
	-r:只读挂载,目录下内容只可以读
	-w:读写挂载,目录下内容可读可写,可修改
	-L label:以卷标方式指定设备,mount -L label 挂载点,很少用
	-U UUID:以UUID的方式指定设备,通常写在/etc/fstab文件中,常用
	-a:自动挂载/etc/fstab文件中的所有设备,会自动扫描,没有挂载的就会挂载,已经挂载的忽略
	-n:挂载时,不更新/etc/mtab文件
	-B:绑定到一个目录上
	-o option:mount的-o选项丰富多彩,定制很多可用的挂载选项;
		remount:重新挂载,在不卸载的情况下添加额外挂载选项
		ro:只读挂载
		rw:读写挂载
		async:异步I/O,数据写操作先在内存完成,然后在整体同步到磁盘上
		sync:同步I/O,数据一边写一边存到磁盘上
		atime/noatime:是否修改文件的访问时间,追求性格时可关闭,因为修改访问时间也会有写磁盘操作
		dirname/nodirname:是否修改目录的访问时间
		auto/noauto:设备是否支持自动挂载,mount -a选项
		dev/nodev:是否支持在此设备上使用设备文件
		exec/noexec:是否允许执行此设备上的二进制程序
		suid/nosuid:是否支持次设备上的文件拥有特殊权限
		user/nouser:是否支持普通用户挂在此设备
		acl:在此设备上是否支持使用ACL,centos7默认支持,之前的版本默认不支持
	#挂载目录必须存在,且最好为空目录,否则目录下文件将被隐藏
	#默认挂载点:/mnt、/opt、/media
	#默认挂载选项:rw,suid,dev,exec,auto,nouser,async
	
交换分区:
	swapon:启用swap分区
	swapoff:禁用swap分区

检测和修复

fsck:检查并修复Linux文件系统
	-t:指定文件系统类型
	-a:自动修复
	-r:交互式修复
e2fsck:专用于修复ext系列的文件系统
	-y:对问题自定回复yes
	-f:强制检查
	-p:自动修复
#一定不要在挂载状态下进行修复
#挂载文件系统标记为"no clean"时进行修复

卸载

#挂载点目录在被访问时无法被卸载
findmnt [Mnt_Point]|[Device]				查看挂载点或某设备的挂载情况
lsof [Mnt_Point]|fuser -v [Mnt_Point]		查看正在访问指定文件系统的进程
fuser -km [Mnt_Point]						终止所有正在访问指定文件系统的进程
umount [Mnt_Point]|[Device]					卸载

RAID

介绍

磁盘阵列:Redundant Arrays of Independent Disks,多个磁盘合成一个阵列,以求更好的性能和冗余
优点:
	提高I/O能力(磁盘并行读写)
	提高耐用性(磁盘冗余实现)
实现方式:
	外接式RAID:外接硬件扩展卡提供适配能力
	内接式RAID:主板集成RAID控制器,BIOS内配置
	软件RAID:通过OS实现
常用RAID级别:
	RAID-0RAID-1RAID-5RAID-6RAID-10RAID-01RAID-50JBOD
配置文件:/proc/mdstat

常用RAID级别

RAID-0:分布式存储数据
	读、写性能提升
	无容错能力
	最少磁盘数2
	磁盘利用率100%

RAID-1:镜像式存储数据
	读性能提升、写性能略有下降
	有冗余能力
	最少磁盘数2
	磁盘利用率50%
	
RAID-5:
	读、写性能提升
	有冗余能力,允许最多一块磁盘损坏
	最少磁盘数3
	磁盘利用率(N-1/N
	
RAID-6:
	读、写性能提升
	有容错能力,允许最多两块盘损坏
	最少磁盘数4
	可用空间 :(N-2/N

[cf]
	RAID-10:多块磁盘线组合成RAID-1再组合成RAID-0
	RAID-01:多块磁盘线组合成RAID-0再组合成RAID-1 
	#RAID-10容错性高于RAID-01

实验

要求:创建一个可用空间为1G的RAID-1设备,文件系统为ext4,有一个空闲盘并且开机自动挂载至/backup目录
1、使用/dev/sdb和/dev/sdc两块磁盘进行实验,首先使用fdisk工具对这两块儿磁盘进行分区,分区结果如下图
分区结果
2、使用mdadm创建RAID,sdb1和sdc1用于创建RAID,sdd作为空闲盘

mdadm -C -a yes /dev/md0 -n 2 -l 1 -x 1 /dev/sd{b1,c1,d}

RAID创建结果
3、创建文件系统ext4
文件系统创建
4、实现开机自动挂载(配置/etc/fstab文件)
实现开机自动挂载

LVM

介绍

逻辑卷管理器:Logical Volume Manager,将多个从逻辑上将多个物理磁盘整合在一起,使其可看作一个磁盘
特点:
	磁盘弹性管理
	数据的存储效率及安全性无提升
实现方式:
	Linux块设备->物理卷(PV->卷组(VG->逻辑卷(LV)
实现原理:
	逻辑卷是在物理卷基础之上创建的,物理卷通过固定大小的物理区
	域(PE)定义,通过修改逻辑卷上PE数量实现弹性管理逻辑卷大小
组成部分:
	PV:物理卷,指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如Raid),LVM的基本存储逻辑块
	VG:卷组,由物理卷组成,可以在卷组上创建一个或多个LVM逻辑卷,LVM卷组由一个或多个物理卷组成
	LV:逻辑卷,类似硬盘分区,在逻辑卷之上可以创建文件系统

管理工具

PV管理工具
	pvcreate 			将普通磁盘制作为物理卷,可以一次指定多个物理磁盘
	pvdisplay			显示当前系统上逻辑卷的信息
	pvscan				扫描系统里具有逻辑卷的磁盘
	pvremove			删除逻辑卷,让磁盘不具有逻辑卷的属性

VG管理工具
	vgcreate			创建卷组
	vgdisplay			显示系统上卷组的信息
	vgextend			向卷组中添加物理卷
	vgreduce			从卷组中删除物理卷
	vgremove			删除一个卷组
	vgchange			配置卷组是否启动
	vgscan				扫描系统上具有卷组属性的磁盘

LV管理工具
	lvcreate			创建逻辑卷
	lvdisplay			显示逻辑卷的信息
	lvextend			为逻辑卷扩充容量,不需要取消挂载
	lvreduce			为逻辑卷缩减容量
	lvremove			删除一个逻辑卷
	lvresize			调整逻辑卷容量的大小
	lvscan				扫描系统上的逻辑卷

LVM快照

snapshot:快照,写时复制(Copy on Write),即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(metadata)
当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里
#创建时无数据的物理拷贝,因此snapshot的创建几乎是实时的
快照缺点:在同一逻辑卷中,所有当逻辑卷损坏时,备份的数据自然也就不能用了,所以快照起不了完全备份的作用

快照原理

实验

要求:创建一个至少由两个PV组成的大小为10G的名为testvg的VG;要求PE大小为16MB,而后在VG中创建大小为5G的逻辑卷testlv;挂载至/users目录;扩展testlv至7G且archlinux用户文件不能丢失;缩减testlv至3G且archlinux用户文件不能丢失;对testlv创建快照,并尝试基于快照备份数据,验证快照功能

1、使用/dev/sdb和/dev/sdc两块磁盘上的两个分区进行实验,首先使用fdisk工具对这两块儿磁盘进行分区,分区结果如下
分区结果
2、创建物理卷PV(pvcreate /dev/sd{b,c}2)
创建物理卷
3、创建卷组VG,名为testvg(vgcreate -s 16m testvg /dev/sd{b,c}2)
创建卷组
4、创建逻辑卷LV,名为testlv(lvcreate -L 5G -n testlv testvg)
创建逻辑卷
5、挂载至/users目录(创建文件系统mke2fs -t ext4 /dev/testvg/testlv;挂载mount /dev/testvg/testlv /users/)
挂载至目录
6、扩展testlv至7G且archlinux用户文件不能丢失
扩容前情况:
扩容前情况
扩容(lvextend -L +2G /dev/testvg/testlv;resize2fs /dev/testvg/testlv)
#注意:xfs文件系统扩容需要使用xfs_growfs [Mnt_Point]命令实现
扩容
扩容后情况:
扩容后情况
7、缩减testlv至3G且archlinux用户文件不能丢失
缩减前情况
缩减前情况
缩减容量:
umount /users --> e2fsck -f /dev/testvg/testlv --> lvreduce -L 3G /dev/testvg/testlv --> mount /dev/testvg/testlv /users/
缩减容量
缩减后情况:
缩减后情况
8、对testlv创建快照,并尝试基于快照备份数据,验证快照功能
创建快照(lvcreate -n testlv_snap -s -L 1G /dev/testvg/testlv):
创建快照
挂载(mke2fs -t ext4 /dev/testvg/testlv_snap;mount /dev/testvg/testlv_snap /snap/):
创建文件系统并挂载

修改后恢复:
umount /dev/testvg/testlv --> umount /dev/testvg/testlv_snap
–> lvconvert --merge /dev/testvg/testlv_snap -->mount /dev/testvg/testlv /snap/
恢复

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值