冯·诺依曼体系 = 运算器 + 控制器 + 存储器 + 输入设备 + 输出设备
I/O设备 = 输入设备 + 输出设备
#输入和输出均可以在内存中实现,但内存属于随机存储单元,断电就会导致数据的丢失,因此需要辅助存储设备(硬盘、光驱等)进行弥补
Linux上对设备的操作都是通过文件来实现的,因此称为设备文件,符合Linux一切皆文件的哲学思想
具体做法:
设备文件关联至一个设备驱动程序,通过操作系统的映射跟对应的硬件设备进行通信
在根目录下有一个存放设备文件的目录/dev/,此目录下的文件即为硬件设备映射对应的文件名称
设备类型:
块设备:block,存取单位为"块",磁盘
字符设备:char,存取单位为"字符",键盘
设备命名:
磁盘设备文件命名:sd
光盘设备文件命名:sr
磁盘 = 磁头(head) + 磁道(track)+ 柱面(cylinder)+ 扇区(sector)
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
# 每个磁片有上下两面,每个磁面对应一个磁头
# 一般而言,每个扇区有512bytes
寻址方式
CHS:最大寻址空间8GB(24位寻址,前10位cylinder,中间8位head,后6位sector)
LBA:ATA-1规范28位寻址,最大寻址空间为128GB,ATA-6规范48位寻址,最大寻址空间位128PB
# 磁盘容量在8GB以内时,CHS和LBA寻址方式均可,大于8GB时只能使用LBA寻址
分区优点:优化I/O性能、实现磁盘空间配额限制、提高修复速度、隔离系统和程序、安装多个os、采用不同文件系统
分区:MBR和GPT
分区运行流程:
MBR-BIOS
GPT-UEFI
MBR分区
主引导记录:Master Boot Record
分区方式:按柱面(cylinder)分区
组成部分:
主引导程序(446bytes,Boot Loader)
主分区表(64bytes,DPT,每16bytes表示1个分区)
结束标志(2bytes,55AA)
特点:
使用32位表示扇区,分区不超过2TB
最多支持4个分区
4个主分区
3个主分区+1个扩展分区(N个逻辑分区)
GPT分区:
全局唯一标识分区表:GUID(Global Unique Identifiers) Partition Table
组成部分:
MBR兼容区块:LBA0
GPT表头记录:LAB1
实际记录分区信息处:LBA2-33
特点:
分区数量没有限制,Windows最多支持128个分区。
使用64位表示扇区,支持512bytes/block和4096bytes/block,兼容MBR分区
使用LBA寻址方式
查看分区情况(以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] 卸载
磁盘阵列:Redundant Arrays of Independent Disks,多个磁盘合成一个阵列,以求更好的性能和冗余
优点:
提高I/O能力(磁盘并行读写)
提高耐用性(磁盘冗余实现)
实现方式:
外接式RAID:外接硬件扩展卡提供适配能力
内接式RAID:主板集成RAID控制器,BIOS内配置
软件RAID:通过OS实现
常用RAID级别:
RAID-0、RAID-1、RAID-5、RAID-6、RAID-10、RAID-01、RAID-50、JBOD
配置文件:/proc/mdstat
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}
3、创建文件系统ext4
4、实现开机自动挂载(配置/etc/fstab文件)
逻辑卷管理器: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 扫描系统上的逻辑卷
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/