磁盘存储和文件系统
磁盘结构与分区方式MBR和GPT
for i in {0..32};do echo '- - -' > /sys/class/scsi_host/host$i/scan;done
磁盘存储和文件系统
内容概述
- 磁盘结构
- 分区类型
- 管理分区
- 管理文件系统
- 挂载设备
- 管理swap空间
- RAID管理
- LVM管理和LVM快照
1.磁盘结构:
1.1设备文件
一切皆文件: open(). read(). write(). close()
设备文件:关联至一个设备驱动程序, 进而能够跟与之对应硬件设备进行通信
设备号码:
- 主设备号: major number,标识设备类型
- 次设备号: minor number,标识同一类型下的不同设备
设备类型:
- 块设备: block, 存取单位“块",磁盘
- 字符设备: char, 存取单位”字符”,键盘
磁盘设备的设备文件命名:
/dev/DEV_ FILE
/dev/sdx #SCSI, SATA, SAS, IDE ,USB
虚拟磁盘:
/dev/vd
/dev/xvd
不同磁盘标识: a-z.aa,ab…
示例:
/dev/sda, /dev/sdb, ...
同一设备上的不同分区:1,2,…
/dev/sda1
/dev/sda5
1.2硬盘类型
硬盘接口类型:
- IDE: 133MB/s
- SCSI: 640MB/s
- SATA: 6Gbps
- SAS: 6Gbps,
- USB: 480MB/S,
- M.2
1.3机械硬盘和固态硬盘
机械硬盘(HDD) : Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上, 每张盘片之间是平行的,在每个盘片的存储面上有一个磁头, 磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
固态硬盘(SSD) : Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
相较于HDD, SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍。相较于SSD.,HDD在价格、容量占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD
机械硬盘结构(HDD)
固态硬盘(SSD)
1.4硬盘存储术语
磁盘存储术语 CHS
-
head:磁头 磁头数=盘面数
-
track: 磁道 磁道数=柱面数
-
sector: 扇区,512bytes
-
cylinder: 柱面 1柱面=512bytes * sector数/track * head数=7.84M
早期的Linux(CentOS 5)以往以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区
范例:
[root@centOS7: ~]#echo "scale=2;512*63*255/1024/1024"|bc 7.84
CHS和LBA
- CHS采用24bit位寻址
- 其中前10位表示cylinder, 中间8位表示head,后面6位表示sector
- 最大寻址空间8GB
LBA (logical block addressing)
- LBA是一 个整数,通过转换成CHS格式完成磁盘具体寻址
- ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容最小于大概8GB时,可以使用CHS寻址方式或是LBA
寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
2 管理存储
使用磁盘空间过程
1.设备分区
2.创建文件系统
3.挂载新的文件系统
2.1磁盘分区
2.1.1为什么分区
- 优化I/0性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系統和程序
- 安装多个OS
- 采用不同文件系統
2.1.2分区方式
两种分区方式: MBR,GPT
2.1.2.1 MBR分区
MBR: Master Boot Record, 1982年, 使用32位表示扇区数,分区不超过2T
划分分区的单位:
- CentOS 5之前按整柱面分
- CentOS 6版本后可以按sector分
0磁道0扇区: 512bytes
- 446 bytes: boot loader
- 64 bytes:分区表,其中每16bytes标识一个分区
- 2 bytes: 55AA
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+ 1扩展(N个逻辑分区)
MBR分区结构
硬盘主引导记录MBR由4个部分组成
0000-0088 | Master Boot Record 主引导程序 | 主引导程序 |
0089-01BD | 出错信息数据区 | 数据区 |
01BE-01CD | 分区项1(16字节) | 分区表 |
01CE-01DD | 分区项2(16字节) | |
01DE-01ED | 分区项3(16字节) | |
01EE-01FD | 分区项4(16字节) | |
01FE | 55 | 结束标志 |
01FF | AA |
- 主引导程序(偏移地址000H–0088H),它负责从活动分区中装载,并运行系统引导程序
- 出错信息数据区,偏移地址0089H–00E1H为出错信息, 00E2H-01 BDH全为0字节
- 分区表(DPT,Disk Partition Table) 含4个分区项,偏移地址01BEH-01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
- 结束标志字,偏移地址01FE–01FF的2个字节值为结束标志55AA
MBR中DPT结构
存储字节位 | 内容及定义 |
第一字节 | 引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。 |
第2、3、4字节 | 本分区的起始磁头号、扇区号、柱面号。其中: 磁头号 - - 第2字节; 扇区号 - - 第3字节的低6位; 柱面号 - - 为第3字节高2位+第4字节8位。 |
第5字节 | 分区类型符。 00H - - 表示该分区未用(即没有指定), 06H - - FAT16基本分区; OBH - - FAT32基本分区; 05H - - 扩展分区; 07H - - NTFS分区; OFH - - (LBA模式)扩展分区( 83H为Linux分区等)。 |
第6、7、8字节 | 本分区的结束磁头号、扇区号、柱面号。其中: 磁头号 - - 第6字节: 扇区号 - - 第7字节的低6位: 柱面号 - - 第7字节的高2位+第8字节。 |
第9、10、11、12字节 | 本分区之前已用了的扇区数。 |
第13、14、15、16字节 | 本分区的总扇区数。 |
范例:备份MBR的分区表,并破坏恢复
[root@centos7: ~]#dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
[root@centos7: ~]#scp /data/dpt.img 192.168.2.101:
[root@centos7: ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
#无法启动
[root@centos7: ~]#reboot
#用光盘启动。进入rescure mode,选第3项skip to shell
#ifconfig ens160 192.168.2.100/24
#scp 192.168.2.101:/root/dpt.img .
#dd if=dpt.img of=/dev/sda bs=1 seek=446
#exit
2.1.2.2 GPT分区
GPT: GUID (Globals Unique Identifiers) partition table支持128个分区,使用64位, 支持8Z (512Byte/block) 64Z ( 4096Byte/block)
使用128位UUID(Universally Unique ldentifier)表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
GPT分区结构
GPT分区结构分为4个区域:
- GPT头
- 分区表
- GPT分区
- 备份区域
**2.1.3 BIOS和UEFI **
BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是UEFI启动BIOS (Basic Input Output System基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长短不同的“滴滴音",可以简单的判断硬件故障,比如”1长1短通常表示内存故障,“1长3短”通 常表示显卡故障
BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问1M的内存,其中前640K称为基本内存,后384K内存留给开机和各类BIOS本身使用。BIOS只能识别到主引导记录(MBR) 初始化的硬盘,最大支持2T的硬盘,4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系统,传统的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了
EFI (Extensible Firmware Interface) 可扩展固件接口,是Intel为PC固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在OS加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是BIOS的继任者
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织UEF(Unified Extensible Firmware Interface)統一的可扩 展固件接口,是一种详细描述类型接口的标准。UEFI 相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制
BIOS和UEFI区别
BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址)下,可访问的内存空间为1MB,只支持字符操作界面
UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作界面
BIOS+MBR与UEFI+GPT
分区相关管理工具
2.1.3 管理分区
列出块设备
lsblk
创建分区命令
fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作
重新设置内存中得内核分区表版本
partprobe
2.1.3.1 parted命令
parted的操作都是实时生效的,小心使用
格式:
parted [option]... [设备[命令[参数]...]...]
范例:
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认单位M)
parted /dev/sdb rm 1 (分区Number)
parted -l 列出所有硬盘分区信息
范例:
[root@centos7: ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sdc 8:32 0 5G 0 disk
sr0 11:0 1 4.3G 0 rom /run/media/centos7/CentOS 7 x86_64
[root@centos7: ~]#parted /dev/sdb print
Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
[root@centos7: ~]#parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.
[root@centos7: ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
[root@centos7: ~]#parted /dev/sdb mkpart primary 1 1001
Information: You may need to update /etc/fstab.
[root@centos7: ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB primary
[root@centos7: ~]#parted /dev/sdb rm 1
Information: You may need to update /etc/fstab.
[root@centos7: ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2.1.3.2 分区工具fdisk和gdisk
#管理GPT分区
gdisk /dev/sdb
# 查看分区
fdisk -l [-u][device...]
#管理MGR分区
fdisk /dev/sdb
#子命令:
p 分区表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存退出
查看内核是否已经识别新的分区
cat /proc/partations
CentOS 6 通知内核重新读取硬盘分区表
新增分区用:
# 同步
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用
# 同步(M,N是分区号)
partx -d --nr M-N /dev/DEVICE
CentOS 5,7,8 使用partprobe 同步分区表
partprobe [/dev/DEVICE]
2.2 文件系统
2.2.1 文件系统概念
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
支持的文件系统:
/lib/modules/`uname -r`/kernel/fs
各种文件系统:https://wiki.deepin.org/wiki/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F
帮助:man 5 fs
2.2.2文件系统类型
#查看文件系统类型
df -T
Linux常用文件系统
ext2 | Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,列如/boot 分区 |
ext3 | 是ext2的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复 |
ext4 | 是ext文件系统的最新版,提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB),最大1EB的文件系统,以及速度的提升 |
xfs | SGI,支持最大8EB的文件系统 |
swap | 交换分区,虚拟内存 |
iso9660 | 光盘 |
btrfs | Oracle |
relserfs |
Windows 常用文件系统
FAT32 | |
NTFS | |
exFAT |
Unix
FFS | fast |
UFS | unix |
IFS2 |
网络文件系统
NFS | |
CIFS |
集群文件系统
GFS2 | |
OCFS2 | Oracle |
分布式文件系统
fastdfs | |
ceph | |
moosefs | |
mogilefs | |
glusterfs | |
Lustre |
RAW
未经处理,或者未经格式化产生的文件系统
常用的文件系统特性
FAT32 | 最多只能支持16TB的文件系统和4GB的文件 |
NTFS | 最多只能支持16EB的文件系统和16EB的文件 |
EXT3 | 1.最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件 2.Ext3目前只支持32000个子目录 3.Ext3文件系统使用32位空间记录块数量和inode数量 4.当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块 |
EXT4 | 1.EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本 2.EXT4的文件系统容量达到1EB,而支持单个文件则达到16TB 3.理论上支持无限数量的子目录 4.EXT4文件系统使用64位空间记录块数量和inode数量 5.EXT4的多块分配器支持一次调用分配多个数据块 6.修复速度更快 |
XFS | 1.根据所记录的日志在很短的时间内迅速恢复磁盘文件内容 2.用优化算法,日志记录对整体文件操作影响非常小 3.是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB 4.能以接近裸设备I/O的性能存储数据 |
目前支持的文件系统:
cat /proc/filesystems
2.2.3 文件系统的组成部分
#查看已经加载在内存中的文件系统
lsmod
- 内核中的模块:ext4,xfs,vfat
- Linux的虚拟文件系统:VFS
- 用户矿建的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat
2.2.4 文件系统选择管理
2.2.4.1 创建文件系统
创建文件管理工具
mkfs命令 | mkfs.FS_TYPE /dev/DEVICE ext4 xfs btrfs vfat |
mkfs -t FS_TYPE /dev/DEVICE -L 'LABEL' 设定卷标 | |
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 |
-l | 一个inode记录占用的磁盘空间大小,128...4096 |
-m # | 默认5%,为管理人员预留空间占总空间的百分比 |
-O FEATURE[.....] | 启用指定特性 |
-O ^FEATURE[.....] | 关闭指定特性 |
2.2.4.2 查看和管理分区信息
查看块设备属性信息 | blkid |
格式 | blkid [OPTION]...[DEVICE] |
常用选项 | -U UUID 根据指定的UUID来查找对应的设备 |
-L LABEL 根据指定的LABEL来查找对应的设 |
e2label | 管理ext系列文件系统的LABEL |
格式 | e2label DEVICE [LABEL] |
findfs | 查找分区 |
格式 | findfs [options] LABEL=label |
findfs [options] UUID=uuid |
tune2fs | 重新设定ext系列文件系统可调整参数的值 |
常用选项 | -l 查看指定文件系统超级块信息:super block |
-L 'LABEL' 修改卷标 | |
-m # 修改留给管理员的空间百分比 | |
-j 将ext2升级为ext3 | |
-O 文件系统属性启用或禁用,-O ^has_journal | |
-o 调整文件系统的默认挂载选项,-o ^acl | |
-U UUID 修改UUID号 |
dumpe2fs | 显示ext文件系统信息,将磁盘块分组管理 |
选项 | -h 查看超级块信息,不显示分组信息 |
xfs_info | 显示已挂载的xfs文件系统信息 |
格式 | xfs_info mountpoint | devname |
超级块个INODE TABLE
2.2.4.3 文件系统检测和修复
文件系统夹故障常发生于死机或者正常关机之后,挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下执行命令修复。
fsck:File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
注意:FS_TYPE 一定要与分区上已经文件类型相同
常用选项:
- -a 自动修复
- -r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
- -y 自动回答为yes
- -f 强制修复
- -p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
常用选项:
- -f 修复文件而设备
- -n 只检查
- -d 允许修复只读的挂载设备,在单用户下修复时使用,然后立即reboot
2.3 挂载
挂载:将额外文件系统与根文件系统某现存的目录建立关联关系,进而使得此目录作为其它文件访问入口的行为。
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空
进程正在使用中的设备无法被挂载
2.3.1 挂载文件系统 mount
格式:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备
- 设备文件:例如/dev/sda5
- 卷标:-L ‘LABEL’,例如-L ‘MYDATA’
- UUID:-U ‘UUID’ 例如 -U ‘fa846700-2ffa-41f8-85d9-0f47152f051e’
- 为文件系统名称:proc,sysfs,devtmpfs,configfs
dir:挂载点
事先存在,建议使用空目录
mount常用命令选项
-t vsftype | 指定要挂载的设备上的文件系统类型 |
-r | readonly,只读挂载 |
-w | read and write,读写挂载 |
-n | 不更新/etc/mtab,mount不可见 |
-a | 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能) |
-L 'LABEL' | 以卷标指定挂载设备 |
-U 'UUID' | 以UUID指定要挂载的设备 |
-B, --bind | 绑定目录到另一个目录上 |
-o options | (挂载文件系统的选项)多个选项使用逗号分隔 |
async:异步模式(内存更改时,写入缓存区buffer,过一段时间再写到磁盘中);sync同步模式,内存更改时,同时写磁盘 | |
atime/noatime:包含目录和文件 | |
diratime/nodiratime:目录的访问时间戳 | |
auto/noauto:是否支持自动挂载,是否支持-a选项 | |
exec/noexec:是否支持将文件系统上运行应用程序 | |
dev/nodev:是否支持在此文件系统上使用设备文件 | |
suid/nosuid:是否支持suid和sgid权限 | |
remount:重新挂载 | |
ro:只读;rw:读写 | |
user/nouser:是否允许普通用户挂载此设备,/etc/fstab使用 | |
acl:启用此文件系统上的acl功能 | |
loop:启用loop设备 | |
_netdev:当网络可用时才对网络资源进行挂载,如:NFS文件系统 | |
defaults:相当于rw,suid,dev,exec,auto,nouser,async |
挂载规则:
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常一个挂载点一般是已存在的空的目录
2.3.2 卸载文件系统 umount
卸载时:可使用设备,也可以使用挂载点
umount 设备名 | 挂载点
2.3.3 查看挂载情况
查看挂载
#通过查看/etc/mtab 文件显示当前已挂载的所有设备
mount
# 查看内核追踪到的已挂载的所有设备
cat /proc/mounts
查看挂载点情况
findmnt MOUNT_POINT | device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有正在访问指定的文件系统的进程
fuser -km MOUNT_POINT
2.3.4 持久挂载
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
/etc/fstab 格式:man 5 fstab
每行定义一个要挂载的文件系统,其中包括6项
1.要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=“”
UUID:UUID=“”
伪文件系统名称:proc,sysfs
2.挂载点:必须是事先存在的目录
3.文件系统类型:ext4,xfs,iso9660,nfs,none
4.挂载选项:defaults,acl,bind
5.转储频率:0:不做备份;1:每天转储;2:每隔一天转储
6.fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检;1:首先自检,一般只有rootfs采用;2:非rootfs使用
添加新的挂载项,需要执行下面的命令生效
mount -a
mount -o remount /mnt/sda6
2.4 处理交换文件和分区
2.4.1 swap介绍
swap交换分区是系统RAM的补充,swap分区支持虚拟内存。当没有猪狗的RAM保存系统处理的数据时,会将数据写入swap分区,当系统缺乏swap空间时,内核会因RAM内存耗尽而终止进程。配置过多swap空间会造成存储设备处于分配状态但闲置,造成浪费,过多swap空间还会掩盖内存泄漏
注意:为优化性能,可以将swap分区分布存放,或高性能磁盘存放
官方推荐系统swap空间
系统中的RAM量 | 推荐的swap空间 | 允许休眠的建议swap空间大小 |
---|---|---|
低于2GB | RAM 量的倍数 | RAM 容量的三倍 |
2GB - 8GB | 等于RAM量 | RAM 容量的倍数 |
8GB - 64GB | 4GB到RAM容量的0.5倍 | RAM 容量的1.5倍 |
超过64GB | 独立负载(至少4GB) | 不建议使用休眠功能 |
2.4.2 交换分区实现过程
1.创建交换分区或者文件
2.使用mkswap写入特殊签名
3.在/etc/fstab文件中添加适当的条目
4.使用swapon -a 激活交换空间
启用swap分区
swapon [OPTION] ... [DEVICE]
SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越高;如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一。
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
swap的使用策略
/proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间
范例:
[root@centos7: ~]# cat /proc/sys/vm/swappiness
30
说明:内存正在使用到100-30=70%的时候,就开始出现交换分区的使用。简单地说这个参数定义了系统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性
范例:创建swap分区
[root@centos7: ~]# echo -e 'n\np\n\n\n+2G\nt\n82\n\w\n' | fdisk /dev/sdc
[root@centos7: ~]#mkswap /dev/sdc1
#添加
[root@centos7: ~]#vim /etc/fstab
#生效
[root@centos7: ~]#swapon -a
[root@centos7: ~]#cat /proc/swap
swapon -s
# 全部禁用
swapoff -a
2.5 移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分,所有移动介质也需要挂载,挂载点通常在/media或mnt下
访问前,介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
2.5.1 使用光盘
在图形环境下自动启动挂载/run/media//
手工挂载
mount /dev/cdrom /mnt/
操作光盘
eject 弹出光盘
eject -t 弹入光盘
创建ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc
刻录光盘
wodim -v -eject centos.iso
2.5.2 USB介质
查看USB设备是否识别
lsusb
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX或类似的设备文件
在图形环境中自动挂载在/run/media//
手动挂载
mount /dev/sdx# /mnt
2.6 磁盘常见工具
2.6.1 文件系统空间占用等信息的查看工具 df
df [OPTION] ... [FILE] ...
常用选项
-H:以10为单位
-T:文件系统类型
-h:human-readable
-i:inodes instead of blocks
-p:以Posix兼容的格式输出
2.6.2 查看某目录总体空间占用状态 du
du [OPTION]...DIR
常用选项
-h;human-readable
-s:summary
--max-depth=#:指定最大目录层级
2.6.3 工具 dd
dd命令:convert and copy a file
格式:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=# skip=# seek=#
if=file | 从所命名文件读取而不是从标准输入 |
of=file | 写到所命名的文件而不是到标准输出 |
ibs=size | 一次读size个byte |
obs=size | 一次写size个byte |
bs=size | block size,指定块大小(既是ibs也是obs) |
cbs=size | 一次转化size个byte |
count=n | 复制n个bs |
skip=n | 跳过if源(input file)n个字符 |
seek=n | 跳过of源(output file)n个字符 |
conv=conversion [,conversion...] | 用指定的参数转换文件 |
conversion | 转换参数 |
ascii 转换EBCDIC为ASCII | |
ebcdic 转换ASCII为EBCDIC | |
lcase 把大写字符转换为小写字符 | |
ucase 把小写字符转换为大写字符 | |
nocreat 不创建输出文件 | |
noerror 出错时不停止 | |
notrunc 不截短输出文件 | |
sync 把每个输入快填充到libs个字节,不足部分用空(NUL)字符补齐 | |
fdatasync 写完成前,物理写入输出文件 |
范例:
#备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
#破环MBR中的boot loader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
#有一个大于2k的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128bytes。又有fileB,想把上面弄读取到的128Bytes写到32个字节开始的位置,替换128Bytes,实现如下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
#将本地的/dev/sdx整盘备份到 /dev/sdy
dd if=/dev/sdx of=/dev/sdy
#将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx of=/path/to/image
#备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
dd if=/dev/sdx | gzip > /path/to/image.gz
#将备份文件恢复到指定盘
dd if=/path/to/image of=/dev/sdx
#将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
#将内存里的数据拷贝到root目录下的mem.bin文件
dd if=/dev/mem of=/root/mem.bin bs=1024
#拷贝光盘数据到root文件夹下,并保存为drrom.iso文件
dd if=/dev/cdrom of=/root/cdrom.iso
#销毁磁盘数据
dd if/dev/urandom of=/dev/sda1
#通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size 大小
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
#出硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
#测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
练习:
1.创建一个2G的文件系统,块大小为2048Byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求次分区开机后自动挂载至/test目录,且默认有acl挂载选项
2.写一个脚本,完成如下功能:
(1)列出当前系统识别到的所有磁盘设备
(2)如磁盘数量为1,则显示其空间使用信息;否则,则显示最后一个磁盘上的空间使用
3 RAID
3.1 什么是RAID
RAID:Redundant Arrays of Inexpensive (independent) Disks
1988年由加利福尼亚大学克利分校(University of California-Berkeley)“A Case for Redundant ” Arryas of Inexpensive Disks"
多个磁盘合成一个“阵列”来提供更好的性能,冗余,或者两者都提供
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qJKPUdKU-1589093824348)(…\typora-user-images\1585269325505.png)]
RAID
提高IO能力:磁盘并行读写
提高耐用性:磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式有所不同
RAID实现的方式
-
外接式磁盘阵列:通过扩展卡提供适配能力
-
内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
-
软件RAID:通过OS实现
3.2 RAID级别
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-2
…
RAID-5
RAID-6
RAID-10
RAID-01
RAID级别
3.2.1 RAID-0
以chunk为单位,读写数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BoKRxof-1589093824350)(…\typora-user-images\1585269875617.png)]
读写性能提升
可用空间:N*min(s1,s2…)
无容错能力
最少磁盘数:2,2+
3.2.2 RAID-1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1mfURiBe-1589093824354)(…\typora-user-images\1585270227707.png)]
读性能提升,写性能略有下降
可用空间1*min(s1,s2…)
有个冗余能力
最少磁盘数:2,2N
3.2.3 RAID-4
多块数据盘异或运算值存于专用校验盘
磁盘利用率(N-1)/N
有冗余能力
至少三块硬盘才可以实现
3.2.4 RAID-5
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXwEs6yz-1589093824358)(…\typora-user-images\1585270465235.png)]
读写性能提升
可用空间(N-1)*min(s1,s2,…)
有容错能力,允许最多一块磁盘损坏
最少磁盘数:3,3+
3.2.5 RAID-6
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZW6M4bu-1589093824360)(…\typora-user-images\1585270848402.png)]
读、写性能提升
可用空间:(N-2)*min(S1,S2…)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4,4+
3.2.6 RAID-10
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gOrprBiL-1589093824364)(…\typora-user-images\1585270973388.png)]
读写性能提升
可用空间 N*min(S1,S2…)/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4,4+
3.2.7 RAID-01
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eHIDPt1w-1589093824366)(…\typora-user-images\1585271096600.png)]
多块磁盘先实现RAID0,再组合成RAID1
3.2.8 RAID-50
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddu3auee-1589093824432)(…\typora-user-images\1585271374839.png)]
多块磁盘先实现RAID5,再组合成RAID0
3.2.9 其它级别
JBOD:Just a Bunch Of Disks
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o4bkimuz-1589093824446)(…\typora-user-images\1585271492279.png)]
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间:sum(S1,S2…)
RAID7
可以理解为一个独立存储计算机,自身 带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式
常用级别:
RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
3.3 实现软RAID
4 逻辑卷管理器(LVM)
4.1 LVM介绍
LVM:Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统
LVM可以弹性的更改LVM的容量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfCJq6Nb-1589093824448)(…\typora-user-images\1585271964549.png)]
通过交换PE来进行资料的转换,将原来LV内的PE转移到其它的设备中以降低LV的容量,获将其他设备中的PE加到LV中以加大容量
实现过程
-
将设备指定为物理卷
-
用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent ,PE)来定义的。
-
在物理卷上创建的逻辑卷,是由物理区域(PE)组成
-
可以在逻辑卷上创建文件系统并挂载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMaabDlV-1589093824449)(…\typora-user-images\1585293823601.png)]
第一个逻辑卷对应设备名:/dev/dm-#
dm:device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
软连接:
/dev/mapper/VG_NAME-LV_NAME
/dev/VG_NAME/LV_NAME
范例:
/dev/mapper/vol0-root
/dev/vol0/root
4.2 实现逻辑卷
4.2.1 pv管理工具
显示pv信息
pvs :简要pv信息显示
pvdisplay
创建pv
#创建PV
pvcreate /dev/sdb
#显示详细信息
pvdisplay
#查看当前pv的信息
pvs
4.2.2 vg管理工具
创建卷组(VG),并将PV加入到卷组中 通过 vgcreate 命令
在创建完PV以后,这时候我们需要创建一个VG,然后将我们的PV都加入到这个卷组当中,在创建卷组时要给该卷组起一个名字
#创建卷组
vgcreate xiaoluo /dev/sdb
#查看VG的信息
vgdisplay
vgs
4.2.3 lv管理工具
基于卷组(VG)创建逻辑卷(LV) 通过 lvcreate 命令
lvcreate -n mylv -L 2G xiaoluo
通过 lvcreate 命令基于VG创建好我们的逻辑卷,名字为mylv,大小为2G,同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息
lvdisplay
lvs
格式化创建文件系统
mkfs.ext4 /dev/xiaoluo/mylv
4.2.4 删除逻辑卷
我们在创建好逻辑卷后可以通过创建文件系统,挂载逻辑卷来使用它,如果说我们不想用了也可以将其删除掉。
【注意:】对于创建物理卷、创建卷组以及创建逻辑卷我们是有严格顺序的,同样,对于删除逻辑卷、删除卷组以及删除物理卷也是有严格顺序要求的
①首先将正在使用的逻辑卷卸载掉 通过 umount 命令
②将逻辑卷先删除 通过 lvremove 命令
③删除卷组 通过 vgremove 命令
④最后再来删除我们的物理卷 通过 pvremove 命令
#挂载逻辑卷
mount /dev/xiaoluo/mylv /mnt/
#卸载逻辑卷
umont /mnt/
#删除
lvremove /dev/xiaoluo/mylv
vgremove xiaoluo
pvremove /dev/sdb
#检查
lvs
vgs
pvs
扩展逻辑分区:
lvextend -r -L +2G /dev/vg0/data
范例:
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n youlv testvg
删除逻辑卷
lvremove /dev/VG_NAME/LV_NAME
重设文件系统大小
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-p] [-P] device [new_size]
xfs_growfs /mountpoint
范例:
#创建物理卷
pvcreate /dev/sda3
#为卷组分配物理卷
vgcreate vg0 /dev/sda3
#从卷组创建逻辑卷
lvcreate -L 256M -n data vg0
#mkfs.xfs /dev/vg0/data
#挂载
mount /dev/vg0/data /mnt/data#
4.2.4 扩展和缩减逻辑卷
扩展逻辑卷:
lvextend -L [+][mMgGtT] /dev/VG_NAME/LV_NAME
#针对ext系列
resize2fs /dev/VG_NAME/LV_NAME
#针对xfs
xfs_growfs MOUNTPOINT
#针对所有系统
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
缩减逻辑卷
umount /dev/VG_NAME/LV_nAME
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount
4.2.5 跨主机迁移卷组
源计算机上
1.在旧系统中,umount所有卷组上的逻辑卷
2.禁用卷组
vgchange -a n vg0
lvdisplay
3.导出卷组
vgexport vg0
pvscan
vgdisplay
4.拆下旧硬盘在目标计算机上,并导入卷标
vgimport vg0
5.启用
vgchange -ay vg0
6.mount 所有卷组上的逻辑卷
4.3 逻辑卷快照
4.3.1 逻辑卷快照原理
快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择,快照只有在它们和原来的逻辑卷不同时才会消耗空间,建立快照的卷大小小于等于原始逻辑卷,也可以使用lvextend扩展快照。
逻辑卷管理器快照
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。
逻辑卷快照工作原理
- 在生成快照时会分配给它一定的空间,但只是在原来的逻辑卷或者快照有所改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中,系统恢复的时候的文件数量不能高于快照区的实际容量
4.3.1 实现逻辑卷快照
范例:
#为现有逻辑卷创建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
#挂载快照
mkdir -p /mnt/snap
mount -o ro /dev/vgo/data-snapshot /mnt/snap
#恢复快照
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvret --merge /dev/vg0/data-snapshot
#删除快照
umount /mnt/databackup
lvremove /dev/vg0/databackup
testvg
lvcreate -l 100%FREE -n youlv testvg
删除逻辑卷
```bash
lvremove /dev/VG_NAME/LV_NAME
重设文件系统大小
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-p] [-P] device [new_size]
xfs_growfs /mountpoint
范例:
#创建物理卷
pvcreate /dev/sda3
#为卷组分配物理卷
vgcreate vg0 /dev/sda3
#从卷组创建逻辑卷
lvcreate -L 256M -n data vg0
#mkfs.xfs /dev/vg0/data
#挂载
mount /dev/vg0/data /mnt/data#
4.2.4 扩展和缩减逻辑卷
扩展逻辑卷:
lvextend -L [+][mMgGtT] /dev/VG_NAME/LV_NAME
#针对ext系列
resize2fs /dev/VG_NAME/LV_NAME
#针对xfs
xfs_growfs MOUNTPOINT
#针对所有系统
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
缩减逻辑卷
umount /dev/VG_NAME/LV_nAME
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount
4.2.5 跨主机迁移卷组
源计算机上
1.在旧系统中,umount所有卷组上的逻辑卷
2.禁用卷组
vgchange -a n vg0
lvdisplay
3.导出卷组
vgexport vg0
pvscan
vgdisplay
4.拆下旧硬盘在目标计算机上,并导入卷标
vgimport vg0
5.启用
vgchange -ay vg0
6.mount 所有卷组上的逻辑卷
4.3 逻辑卷快照
4.3.1 逻辑卷快照原理
快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择,快照只有在它们和原来的逻辑卷不同时才会消耗空间,建立快照的卷大小小于等于原始逻辑卷,也可以使用lvextend扩展快照。
逻辑卷管理器快照
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。
逻辑卷快照工作原理
- 在生成快照时会分配给它一定的空间,但只是在原来的逻辑卷或者快照有所改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中,系统恢复的时候的文件数量不能高于快照区的实际容量
4.3.1 实现逻辑卷快照
范例:
#为现有逻辑卷创建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
#挂载快照
mkdir -p /mnt/snap
mount -o ro /dev/vgo/data-snapshot /mnt/snap
#恢复快照
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvret --merge /dev/vg0/data-snapshot
#删除快照
umount /mnt/databackup
lvremove /dev/vg0/databackup