admin 管理员组

文章数量: 887021

文章目录

    • 1 磁盘结构
      • 1.1 设备文件
      • 1.2 硬盘类型
      • 1.3 机械硬盘和固态硬盘
      • 1.4 硬盘存储术语
    • 2 管理存储
      • 2.1 磁盘分区
        • 2.1.1 为什么分区
        • 2.1.2 分区方式
          • 2.1.2.1 MBR分区
          • 2.1.2.2 GPT分区
        • 2.1.3 BIOS和UEFI
        • 2.1.3 管理分区
          • 2.1.3.1 parted命令
          • 2.1.3.2 分区工具fdisk和gdisk
      • 2.2 文件系统
        • 2.2.1 文件系统概念
        • 2.2.2 文件系统类型
        • 2.2.3 文件系统的组成部分
        • 2.2.4 文件系统选择管理
          • 2.2.4.1 创建文件系统
          • 2.4.4.2 查看和管理分区信息
          • 2.2.4.3 文件系统检测和修复
      • 2.3 挂载
        • 2.3.1 挂载文件系统mount
        • 2.3.3 查看挂载情况
        • 2.3.4 持久挂载
      • 2.4 处理交换文件和分区
        • 2.4.1 swap介绍
        • 2.4.2 交换分区实现过程
        • 2.4.3 swap的使用策略
      • 2.5移动介质
        • 2.5.1 使用光盘
        • 2.5.2 USB介质
      • 2.6磁盘常见工具
        • 2.6.1 文件系统空间实际真正占用等信息的查看工具df
        • 2.6.2 查看某目录总体空间实际占用状态du
        • 2.6.3 工具dd
    • 3 RAID
      • 3.1 什么是RAID
      • 3.2 RAID级别
        • 3.2.1 RAID-0 条带卷
        • 3.2.2 RAID-1 镜像卷
        • 3.2.3 RAID-4
        • 3.2.4 RAID-5
        • 3.2.5 RAID-6
        • 3.2.6 RAID-10
        • 3.2.7 RAID-01
        • 3.2.8 RAID-50
        • 3.2.9 RAID-60
        • 3.2.9 其他级别
        • 3.2.10 RAID总结
      • 3.3 实现软RAID
    • 逻辑卷管理器(LVM)
      • 4.1 LVM介绍
      • 4.2 实现逻辑卷
        • 4.2.1 pv管理工具
        • 4.2.2 vg管理工具
        • 4.2.3 lv管理工具
        • 4.2.4 扩展和缩减逻辑卷
          • 4.2.4.1 在线扩展逻辑卷
          • 4.2.4.2 缩减逻辑卷
        • 4.2.5 跨主机迁移卷组
        • 4.2.6 拆除指定的PV存储设备
      • 4.3 逻辑卷快照
        • 4.3.1 逻辑卷快照原理
        • 4.3.1 实现逻辑卷快照

1 磁盘结构

1.1 设备文件

一切皆文件:open(), read(), write(), close()
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:

  • 主设备号:major number,标识设备类型
  • 次设备号:minor number,标识同一类型下的不同设备
    设备类型:
  • 块设备:block,存取单位"块",磁盘
  • 字符设备:char,存取单位"字符",键盘
    磁盘设备的设备文件命名:
/dev/DEV_FILE
/dev/sdX	#SAS,SATA,SCSI,IDE,USB

虚拟磁盘:

/dev/vd
/dev/xvd

不同磁盘标识:a-z,aa,ab…
示例:

/dev/sda, /dev/sdb, ...

同一设备上的不同分区:1,2,…

/dev/sda1
/dev/sda5

范例:创建设备文件

[root@centos8 ~]#df /boot 
[root@centos8 ~]#ls /boot 
[root@centos8 ~]#mknod /data/partition-sda1 b 8 1
[root@centos8 ~]#ll /data/partition-sda1 
[root@centos8 ~]#mount /data/partition-sda1 /mnt
[root@centos8 ~]#ls /mnt
[root@centos8 ~]#ll /dev/zero
[root@centos8 ~]#mknod /data/zero c 1 5
[root@centos8 ~]#ll /data/zero

范例:操纵设备文件

[root@centos8 ~]#ll /dev/null /dev/zero
[root@centos8 ~]#mknod /data/testdev c 1 5
[root@centos8 ~]#ll /data/testdev
[root@centos8 ~]#dd if=/data/testdev of=/data/test1.img bs=1 count=10
[root@centos8 ~]#ll /data/test1.img
[root@centos8 ~]#hexdump -C /data/test1.img
[root@centos8 ~]#rm -f /data/testdev
[root@centos8 ~]#cp /dev/zero /data/zero
[root@centos8 ~]# ll -h /data/zero /dev/zero
[root@centos8 ~]#cp -a /dev/zero /data/zero
[root@centos8 ~]#ll /data/zero

1.2 硬盘类型

硬盘接口类型:

  • IDE:133MB/s,并行接口,早期家用电脑
  • SCSI:640MB/s,并行接口,早期服务器
  • SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
  • SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而 SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入 SAS主板上,反之不行
  • USB:480MB/s
  • M.2
    注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是快的
    服务器硬盘大小
  • LFF:3.5寸,一般见到的那种台式机硬盘的大小
  • SFF:Small Form Factor 小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘
    L、S分别是大、小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考虑增大单位密度内的磁盘 容量、增强散热、减小功耗

1.3 机械硬盘和固态硬盘

机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电 机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴 上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直 径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径 方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操 作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精 密设备,进入硬盘的空气必须过滤
固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单 元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的 完全相同,在产品外形和尺寸上也与普通硬盘一致 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD 的2倍
相较于SSD,HDD在价格、容量占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD

1.4 硬盘存储术语

** 硬盘存储术语 CHS **

  • head:磁头 磁头数=盘面数
  • track:磁道 磁道=柱面数
  • sector:扇区,512bytes
  • cylinder:柱面 1柱面=512sector数/trackhead数=51263255=7.84M
    CentOS 5之前版本以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区
    范例:
[root@centos8 ~]#fdisk -u=cylinder -l /dev/sda 

范例:识别SSD和机械硬盘类型

#1表示机械,0表示SSD
[root@centos8 ~]# lsblk -d -o name,rota
NAME ROTA
sda     1
sdb     1
sdc     1
sr0     1
nvme0n1    0 
nvme0n2    0

[root@centos8 ~]# ls /sys/block/
nvme0n1  nvme0n2  sda  sdb  sdc  sr0
[root@centos8 ~]#cat /sys/block/*/queue/rotational 
[root@centos8 ~]#cat /sys/block/sda/queue/rotational 
[root@centos8 ~]#cat /sys/block/sr0/queue/rotational 
[root@centos8 ~]#cat /sys/block/nvme0n1/queue/rotational 

** 区位记录磁盘扇区结构ZBR(Zoned Bit Recording) **
** CHS **

  • 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/O性能
  • 实现磁盘空间配额限制
  • 提高修复速度
  • 隔离系统和程序
  • 安装多个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
    446bytes:boot loader
    64bytes:分区表,其中每16bytes标识一个分区
    2bytes:55AA
    MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
    硬盘主引导记录MBR由4个部分组成:
  • 主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序
  • 出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节
  • 分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每个分
    区表项长16个 字节,共64字节为分区项1、分区项2、分区项3、分区项4
  • 结束标志字,偏移地址01FE–01FF的2个字节值为结束标志55AA
    范例:备份MBR的分区表,并破坏后恢复:
#备份MBR分区表
[root@centos8 ~]#dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446   
[root@centos8 ~]#scp /data/dpt.img 10.0.0.102:
#破坏MBR分区表:
[root@centos8 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
#无法启动 
[root@centos8 ~]#reboot
#用光盘启动,进入rescue mode,选第3项skip to shell
#配置网络 
#ifconfig ens160 10.0.0.8/24 
#scp  10.0.0.102:/root/dpt.img .
#恢复MBR分区表 
#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 Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份, 并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持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的国际 组织
UEFI(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 [选项]... [设备 [命令 [参数]...]...] 
parted /dev/sdb  mklabel gpt|msdos 
parted /dev/sdb  print 
parted /dev/sdb  mkpart primary 1 200 (默认M) 
parted /dev/sdb  rm 1 
parted –l   列出所有硬盘分区信息

范例:

[root@centos8 ~]#parted /dev/sdb print
[root@centos8 ~]#parted /dev/sdb mklabel gpt
[root@centos8 ~]#parted /dev/sdb print
[root@centos8 ~]#parted /dev/sdb mkpart primary  1 1001 
[root@centos8 ~]#parted /dev/sdb print 
[root@centos8 ~]#parted /dev/sdb mkpart primary  1002 1102 
[root@centos8 ~]#parted /dev/sdb print 
[root@centos8 ~]#parted /dev/sdb rm 2 
[root@centos8 ~]#parted /dev/sdb print 
[root@centos8 ~]#parted /dev/sdb mklabel msdos 
[root@centos8 ~]#parted /dev/sdb print 
[root@centos8 ~]#parted /dev/sdb 
2.1.3.2 分区工具fdisk和gdisk
gdisk [device...]		类fdisk的GPT分区工具
fdisk -l [-u] [device...] 	查看分区
fdisk [device...]		管理MBR分区

子命令:

p 显示分区列表
t	更改分区类型
n	创建新分区
d	删除分区
v	校验分区
u	转换单位
w	保存并退出
q	不保存并退出

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

cat /proc/partations

CentOS 5,7,8同步分区表:

 partprobe

CentOS 6通知内核重新读取硬盘分区表
新增分区用:

partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f:force
#示例:
[root@centos6 ~]#partx -a /dev/sda

删除分区用:

partx -d --nr M-N /dev/DEVICE
#示例:
[root@centos6 ~]#partx -d --nr 6-8 /dev/sda

范例:非交互式创建分区:

echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc

范例:

#增加了6,7分区 
[root@centos6 ~]#fdisk /dev/sda 
#分区表不同步 
[root@centos6 ~]#lsblk
#同步分区表
[root@centos6 ~]#partx  -a /dev/sda
[root@centos6 ~]#lsblk 
#删除了6,7分区
[root@centos6 ~]#fdisk /dev/sda
[root@centos6 ~]#lsblk 
#同步分区表 
[root@centos6 ~]#partx -d --nr 6-7 /dev/sda 
[root@centos6 ~]#lsblk 

范例:批量创建分区

[root@centos8 ~]#echo -e 'n\np\n\n\n+1G\nw' | fdisk /dev/sdb
[root@centos8 ~]#fdisk /dev/sdb <<EOF 
n 
p


+1G 
w 
EOF 
[root@centos8 ~]#lsblk /dev/sdb 

2.2 文件系统

2.2.1 文件系统概念

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

/lib/modules/`uname -r`/kernel/fs 
2.2.2 文件系统类型

** Linux常用文件系统: **

  • ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,
    例如 /boot 分 区
  • ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常
    中恢复
  • ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和
    使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升
  • xfs:SGI,支持最大8EB的文件系统
  • swap
  • iso9660 光盘
  • btrfs(Oracle)
  • reiserfs
    ** Windows 常用文件系统 **
  • FAT32
  • NTFS
  • exFAT
    ** Unix **
  • FFS(fast)
  • UFS(unix)
  • JFS2
    ** 网络文件系统 **
  • NFS
  • CIFS
    ** 集群文件系统 **
  • GFS2
  • OCFS2
    ** 分布式文件系统: **
  • fastdfs
  • ceph
  • moosefs
  • mogilefs
  • glusterfs
  • Lustre
    ** RAW **
    未经处理或者未经格式化产生的文件系统
    常用的文件系统特性:
    ** FAT32 **
  • 最多只能支持16TB的文件系统和4GB的文件
    ** NTFS **
  • 最多只能支持16EB的文件系统和16EB的文件
    ** EXT3 **
  • 最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB
    的文件
  • Ext3目前只支持32000个子目录
  • Ext3文件系统使用32位空间记录块数量和 inode数量
  • 当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
    ** EXT4 **
  • EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
  • Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
  • 理论上支持无限数量的子目录
  • Ext4文件系统使用64位空间记录块数量和 inode数量
  • Ext4的多块分配器支持一次调用分配多个数据块
  • 修复速度更快
    ** XFS **
  • 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
  • 用优化算法,日志记录对整体文件操作影响非常小
  • 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到
    8EB
  • 能以接近裸设备I/O的性能存储数据
    支持的文件系统:
cat /proc/filesystems
2.2.3 文件系统的组成部分
  • 内核中的模块:ext4, xfs, vfat
  • Linux的虚拟文件系统:VFS
  • 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
2.2.4 文件系统选择管理
2.2.4.1 创建文件系统

创建文件管理工具

  • mkfs命令:
    (1) mkfs.FS_TYPE /dev/DEVICE
    ext4
    xfs
    btrfs
    vfat
    (2) mkfs -t FS_TYPE /dev/DEVICE
    -L ‘LABEL’ 设定卷标
    • mke2fs:ext系列文件系统专用管理工具
      常用选项:
-t {ext2|ext3|ext4}   指定文件系统类型 
-b {1024|2048|4096}  指定块 block 大小 
-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 关闭指定特性
2.4.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>

范例:

[root@centos8 ~]#findfs UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15 
/dev/sda2
[root@centos8 ~]#findfs `sed -En '/data/s#^([^ ]+).*#\1#p' /etc/fstab ` 
/dev/sda3

tune2fs:重新设定ext系列文件系统可调整参数的值

-l 查看指定文件系统超级块信息;super block 
-L 'LABEL’ 修改卷标 
-m # 预留给管理员的空间百分比 
-j 将ext2升级为ext3 
-O 文件系统属性启用或禁用, –O ^has_journal 
-o 调整文件系统的默认挂载选项,–o ^acl 
-U UUID 修改UUID号
dumpe2fs:显示ext文件系统信息,将磁盘块分组管理 
-h:查看超级块信息,不显示分组信息 

范例:查看ext文件系统的元数据和块组信息

[root@centos8 ~]#dumpe2fs  /dev/sda1 

xfs_info:显示未挂载的 xfs 文件系统信息

xfs_info mountpoint|devname

范例:

[root@centos8 ~]#xfs_info  /dev/sda7

块组描述符表(GDT)
ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组
成块组描述符表GDT(group descriptor table)。虽然每个块组都需要块组描述符来记录块组的信息和属 性元数据,但是不是每个块组中都存放了块组描述符。将所有块组的块组信息组成一个GDT保存,并将该 GDT存放于某些块组中,类似存放superblock和备份superblock的块

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

范例:修改破坏的ext文件系统

[root@centos8 ~]#mount /dev/sdb2 /mnt
[root@centos8 ~]#cp /etc/fstab /mnt/f1
[root@centos8 ~]#cp /etc/fstab /mnt/f2
[root@centos8 ~]#ls /mnt
f1  f2  lost+found 
[root@centos8 ~]#dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
[root@centos8 ~]#ls /mnt 
[root@centos8 ~]#tune2fs  -l /dev/sdb2 
[root@centos8 ~]#df
[root@centos8 ~]#umount /mnt
[root@centos8 ~]#e2fsck /dev/sdb2  
[root@centos8 ~]#e2fsck /dev/sdb2 -y 
[root@centos8 ~]#tune2fs  -l /dev/sdb2 
[root@centos8 ~]#mount /dev/sdb2 /mnt 
[root@centos8 ~]#ls /mnt 
f1  f2  lost+found 
[root@centos8 ~]#cat /mnt/f1 

2.3 挂载

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空
进程正在使用中的设备无法被卸载

2.3.1 挂载文件系统mount

格式:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint 

device:指明要挂载的设备

  • 设备文件:例如:/dev/sda5
  • 卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’
  • UUID: -U ‘UUID’:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e’
  • 伪文件系统名称:proc, sysfs, devtmpfs, configfs
    mountpoint:挂载点必须事先存在,建议使用空目录
    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
卸载时:可使用设备,也可以使用挂载点
```sh
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

范例:centos8 /etc/fstab 的分区UUID错误,无法启动

自动进入emergency mode,输入root 密码 
#cat /proc/mounts 可以查看到/ 以rw方式挂载 
#vim /etc/fstab #reboot

范例:centos6 /etc/fstab 的分区UUID错误,无法启动

如果/etc/fstab 的挂载设备出错,比如文件系统故障,并且文件系统检测项(即第6项为  
非0),将导致无 法启动

自动进入emergency mode,输入root 密码 
#cat /proc/mounts 可以查看到/ 以ro方式挂 
载,无法直接修改配置文件 
#mount -o remount,rw  / 
#vim /etc/fstab 
将故障行的后1项,即第6项修改为0,开机不检测此项挂载设备的健康性,从而忽略错
误,能实现启动

2.4 处理交换文件和分区

2.4.1 swap介绍

系统中的 RAM 量 推荐的 swap 空间 允许休眠的建议 swap 空间大小
低于2 GB RAM 量的2倍数 RAM 容量的三倍
2 GB - 8 GB 等于 RAM 量 RAM 量的倍数
8 GB - 64 GB 4 GB 到 RAM 容量的 0.5 倍 RAM 容量的 1.5 倍
超过 64 GB 独立负载(至少 4GB) 不建议使用休眠功能

swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据 时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过 多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露
注意:为优化性能,可以将swap 分布存放,或高性能磁盘存放

2.4.2 交换分区实现过程
1.创建交换分区或者文件
2.使用mkswap写入特殊签名
3.在/etc/fstab文件中添加适当的条目
4.使用swapon -a激活交换空间

启用swap分区

swapon [OPTION]... [DEVICE]

选项:
-a:激活所有的交换分区
-p PRIORITY:指定优先级,也可在/etc/fstab 在第4列指定:pri=value
范例:创建swap分区

[root@centos8 ~]#echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdc 
[root@centos8 ~]#mkswap  /dev/sdc1
[root@centos8 ~]#blkid  /dev/sdc1 
#设置/dev/sdc1为开机自动挂载
[root@centos8 ~]#vim /etc/fstab 
UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap          swap defaults 0 0 
[root@centos8 ~]#swapon -a 
[root@centos8 ~]#free -h
[root@centos8 ~]#cat /proc/swaps 

禁用swap分区:

swapoff [OPTION]... [DEVICE]

范例:禁用swap分区

[root@centos8 ~]#sed -i.bak  '/swap/d'  /etc/fstab 
[root@centos8 ~]#swapoff -a 

SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越大
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的 没有用户指定优先级的swap,会给这个优先级减一
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远 高于核心缺省指定的优先级(是负数)

范例:修改swap分区的优先级

[root@centos8 ~]#cat /etc/fstab 
# 
UUID=acf9bd1f-caae-4e28-87be-e53afec61347 /              xfs     defaults        0 0 
UUID=1770b87e-db5a-445e-bff1-1653ac64b3d6 /boot      ext4    defaults        1 2 
UUID=ffffd919-d674-44d9-a4e7-402874f0a1f0 /data          xfs     defaults        0 0 
UUID=409e36d2-ac5e-423f-ad78-9b12db4576bd swap     swap    defaults        0 0 
UUID=509ee336-6aec-48b0-b390-12c1f9889520 swap     swap    pri=100         0 0

范例:以文件实现swap功能

[root@centos8 ~]#dd if=/dev/zero of=/swapfile bs=1M count=1024 
[root@centos8 ~]#mkswap  /swapfile 
[root@centos8 ~]#blkid /swapfile >> /etc/fstab 
[root@centos8 ~]#cat /etc/fstab 
/swapfile            swap         swap    defaults        0 0 
[root@centos8 ~]#chmod 600 /swapfile 
[root@centos8 ~]#swapon -a 
[root@centos8 ~]#swapon -s 
Filename              Type        Size    		Used    Priority 
/dev/sda5             partition   2097148 		0   	-2 
/swapfile                file        1048572 		0   	 -3

注意:设置为开机自动挂载,只能为文件名,不能是UUID,原因是系统只能识别到文件系统的UUID,不能识别文件的UUID

2.4.3 swap的使用策略

/proc/sys/vm/swappiness的值决定了当内存占用到一定的百分比时,会启用swap分区的空间
范例:

[root@centos8 ~]# cat /proc/sys/vm/swappiness 
[root@rhel5 ~]#  cat /proc/sys/vm/swappiness 

说明:内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。简单地说这个参数定义了系统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性

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	#来自于genisooimage包

刻录光盘:

wodim -v -eject centos.iso

将ISO制作为U盘工具Rufus
Rufus 是一个开源免费的快速制作 U 盘系统启动盘和格式化 USB 的实用小工具,它可以快速把 ISO 格 式的系统镜像文件快速制作成可引导的 USB 启动安装盘,支持 Windows 或 Linux 启动。Rufus 小巧玲 珑,软件体积仅 7 百多 KB,然而麻雀虽小,它却五脏俱全

2.5.2 USB介质

查看USB设备是否识别:

lsusb

被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX或类似的设备文件
在图形环境中自动挂载在/run/media/
手动挂载:

mount /dev/sdX# /mnt

范例:插入U盘后可以看到日志信息

[root@centos8 ~]#tail -f /var/log/messages
[root@centos8 ~]#dmesg

范例:格式化U盘为FAT32文件系统

[root@centos8 ~]#dnf -y install dosfstools
[root@centos8 ~]#mkfs.vfat /dev/sdd1
[root@centos8 ~]#mount /dev/sdd1 /mnt

范例:查看USB设备

[root@centos8 ~]#yum -y install usbutils
[root@centos8 ~]#lsusb

2.6磁盘常见工具

2.6.1 文件系统空间实际真正占用等信息的查看工具df
df [OPTION]... [FILE]...

常用选项:

-H	以10为单位
-T	文件系统类型
-h	human-readable
-i inodes 
-P	以Posix兼容的格式输出

范例:

[root@centos8 ~]#df -Th
[root@centos8 ~]#lsblk -f

范例:

[root@centos8 ~]#df
[root@centos8 ~]#df -P
2.6.2 查看某目录总体空间实际占用状态du
du [OPTION]... DIR

常用选项:

-h	human-readable
-s	summary
--max-depth=#	指定最大目录层级
-x,--one-file-system	忽略不在同一个文件系统的目录

范例:

[root@centos8 ~]#du -sh /* 
[root@centos8 /]#du -h -x --max-depth=1 
2.6.3 工具dd

dd命令:convert and copy file
格式:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#

常用选项:

if=file             从所命名文件读取而不是从标准输入 
of=file             写到所命名的文件而不是到标准输出 
ibs=size            一次读size个byte 
obs=size            一次写size个byte 
bs=size             block size, 指定块大小(既是是ibs也是obs) 
cbs=size            一次转化size个byte 
skip=blocks         从开头忽略blocks个ibs大小的块 
seek=blocks     从开头忽略blocks个obs大小的块 
count=n         复制n个bs 
conv=conversion[,conversion...] 用指定的参数转换文件 

conversion 转换参数: 
ascii 转换 EBCDIC 为 ASCII 
ebcdic 转换 ASCII 为 EBCDIC 
lcase 把大写字符转换为小写字符 
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件 
noerror 出错时不停止 
notrunc 不截短输出文件 
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐 
fdatasync  写完成前,物理写入输出文件

范例:

[root@centos8 ~]#cat f1.txt
abcdef 
[root@centos8 ~]#cat f2.txt 
123456789 
[root@centos8 ~]#dd if=f1.txt of=f2.txt bs=1 count=2 skip=3 seek=4 
[root@centos8 ~]#cat f2.txt 
1234de[root@centos8 ~]#echo 123456789 > f2.txt
[root@centos8 ~]#cat f2.txt 
123456789 
[root@centos8 ~]#cat f1.txt 
abcdef 
[root@centos8 ~]#dd if=f1.txt of=f2.txt bs=1 count=2 skip=3 seek=4  conv=notrunc 
[root@centos8 ~]#cat f2.txt 
1234de789

范例:

#备份MBR 
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

#破坏MBR中的bootloader 
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

#有一个大于2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大  
小是128Byts。又有 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文件夹下,并保存为cdrom.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 

3 RAID

3.1 什么是RAID

"RAID"一词是由David Patterson, Garth A. Gibson, Randy Katz 于1987年在加州大学伯克利分校发明 的。在1988年6月SIGMOD会议上提交的论文"A Case for Redundant Arrays of Inexpensive Disks”"中 提出,当时性能好的大型机不断增长的个人电脑市场开发的一系列廉价驱动器的性能所击败。尽管故 障与驱动器数量的比例会上升,但通过配置冗余,阵列的可靠性可能远远超过任何大型单个驱动器的可靠性
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列 (Redundant Array of Inexpensive Disks),简称磁盘阵列。利用虚拟化存储技术把多个硬盘组合起 来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。
RAID 层级不同,数据会以多种模式分散于各个硬盘,RAID 层级的命名会以 RAID 开头并带数字,例 如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每种等级 都有其理论上的优缺点,不同的等级在两个目标间获取平衡,分别是增加数据可靠性以及增加存储器 (群)读写性能。
简单来说,RAID把多个硬盘组合成为一个逻辑硬盘,因此,操作系统只会把它当作一个实体硬盘。 RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID 功能更加有效地与主板集成,它也成为普通用户的一个选择,特别是需要大容量存储空间的工作,如: 视频与音频制作。
RAID功能实现

  • 提高IO能力,磁盘并行读写
  • 提高耐用性,磁盘冗余算法来实现
    RAID实现的方式
  • 外接式磁盘阵列:通过扩展卡提供适配能力
  • 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
  • 软件RAID:通过OS实现,比如:群晖的NAS

3.2 RAID级别

级别:多块磁盘组织在一起的工作方式有所不同
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-2

RAID-5
RAID-6
RAID-10
RAID-01

3.2.1 RAID-0 条带卷


以chunk 单位,读写数据,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余能力,也不具备容错能力,如果一个磁盘(物理损坏),所有数据都会丢失
特性:
读、写性能提升
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数:1+

3.2.2 RAID-1 镜像卷


两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。
特性:
读性能提升、写性能略有下降
可用空间:1*min(S1,S2…)
有冗余能力
最少磁盘数:2+

3.2.3 RAID-4


特性:
多块数据盘异或运算值存于专用校验盘
磁盘利用率(N-1)/N
有冗余能力
至少3块硬盘才可以实现

3.2.4 RAID-5


特性:
读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力:允许最多一块磁盘损坏
最少磁盘数:3,3+

3.2.5 RAID-6


特性:
读、写性能提升
可用空间:(N-2)*min(S1,S2,…)
有容错能力:允许多2块磁盘损坏
最少磁盘数:4, 4+

3.2.6 RAID-10


特性:
读、写性能提升
可用空间:N*min(S1,S2,…)/2
有容错能力:每组镜像多只能坏一块
最少磁盘数:4, 4+

3.2.7 RAID-01


多块磁盘先实现RAID0,再组合成RAID1

3.2.8 RAID-50


多块磁盘先实现RAID5,再组合成RAID0

3.2.9 RAID-60

3.2.9 其他级别

JBOD:Just a Bunch Of Disks

功能:将多块磁盘的空间合并成一个大的连续空间使用
可用空间:sum(S1,S2,…)
RAID7
RAID 7并非公开的RAID标准,而是Storage Computer Corporation的专利硬件产品名称,RAID 7是以 RAID 3及RAID 4为基础所发展,但是经过强化以解决原来的一些限制。另外,在实现中使用大量的缓冲存储器以及用以实现异步数组管理的专用即时处理器,使得RAID 7可以同时处理大量的IO要求,所以性 能甚至超越了许多其他RAID标准的实际产品。但也因为如此,在价格方面非常的高昂.RAID7 可以理解 为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上是性能高的RAID模式

3.2.10 RAID总结

常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50

3.3 实现软RAID

mdadm工具:为软RAID提供管理界面,为空余磁盘添加冗余,结合内核中的md(multi devices) RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
mdadm:模式化的工具,支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
命令的语法格式:

mdadm [mode] <raiddevice> [options] <component-devices>

常用选项:

mode:
  	创建:-C
  	装配:-A
  	监控:-F
  	管理:-f, -r, -a
<raiddevice>:/dev/md#
<component-devices>: 任意块设备 
-C: 创建模式    
		-n #: 使用#个块设备来创建此RAID    
		-l #:指明要创建的RAID的级别    
		-a {yes|no}:自动创建目标RAID设备的设备文件
		 -c CHUNK_SIZE: 指明块大小,单位k   
		  -x #: 指明空闲盘的个数
 -D:显示raid的详细信息   
         mdadm -D /dev/md#
管理模式:
     -f: 标记指定磁盘为损坏    
     -a: 添加磁盘   
      -r: 移除磁盘
观察md的状态:    cat /proc/mdstat	

范例:

#使用mdadm创建并定义RAID设备 
mdadm -C  /dev/md0 -a yes -l 5 -n 3 -x 1  /dev/sd{b,c,d,e}1 
#用文件系统对每个RAID设备进行格式化 
mkfs.xfs /dev/md0
#使用mdadm检查RAID设备的状况 
mdadm --detail|D  /dev/md0 
#增加新的成员 
mdadm –G /dev/md0 –n4  -a /dev/sdf1 
#模拟磁盘故障 
mdadm  /dev/md0  -f  /dev/sda1 
#移除磁盘 
mdadm   /dev/md0 –r /dev/sda1
#在备用驱动器上重建分区 
mdadm  /dev/md0  -a  /dev/sda1
#系统日志信息 
cat /proc/mdstat

生成配置文件:

mdadm -D -s >> /etc/mdadm.conf

停止设备:

mdadm -S /dev/md0

激活设备:

mdadm -A -s /dev/md0

强制启动:

mdadm -R /dev/md0

删除raid信息;

mdadm --zero-superblock /dev/sdb1

逻辑卷管理器(LVM)

4.1 LVM介绍

LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小, 允许在多个物理设备间重新组织文件系统
LVM可以弹性的更改LVM的容量
通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备 中的PE加到LV中以加大容量
实现过程

  • 将设备指定为物理卷
  • 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent, PE)来定义的
  • 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
  • 可以在逻辑卷上创建文件系统并挂载
    第一个逻辑卷对应设备名:/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 实现逻辑卷

相关工具来自于 lvm2 包

[root@centos8 ~]#yum -y install lvm2
4.2.1 pv管理工具

显示pv信息:

pvs	简要pv信息显示
pvdisplay

创建pv:

pvcreate /dev/DEVICE

删除pv:

pvremove /dev/DEVICE
4.2.2 vg管理工具

显示卷组

vgs
vgdisplay

创建卷组:

vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath   
[PhysicalDevicePath...]

管理卷组

vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...] 
vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

删除卷组:

  • 先做pvmove
  • 再做vgremove
4.2.3 lv管理工具

显示逻辑卷:

lvs
lvdisplay

创建逻辑卷:

lvcreate -L  #[mMgGtT] -n NAME VolumeGroup

范例:

lvcreate -l 60%VG -n mylv testvg 
lvcreate -l 100%FREE -n yourlv 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 扩展和缩减逻辑卷
4.2.4.1 在线扩展逻辑卷
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
4.2.4.2 缩减逻辑卷

注意:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减

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

范例:

[root@centos8 ~]#blkid /dev/vg0/mysql
[root@centos8 ~]#lvs
[root@centos8 ~]#df

#第一步 
[root@centos8 ~]#umount /data/mysql 
[root@centos8 ~]#resize2fs /dev/vg0/mysql  1G 
resize2fs 1.44.6 (5-Mar-2019) Please run 'e2fsck -f /dev/vg0/mysql' first.

#第二步 
[root@centos8 ~]#fsck -f /dev/vg0/mysql

#第三步 
[root@centos8 ~]#resize2fs /dev/vg0/mysql  1G 
[root@centos8 ~]#lvs
[root@centos8 ~]#df 
[root@centos8 ~]#mount -a 
[root@centos8 ~]#df 
[root@centos8 ~]#df -h 
[root@centos8 ~]#lvs
[root@centos8 ~]#umount /data/mysql

#第四步
[root@centos8 ~]#lvreduce -L 1G /dev/vg0/mysql

#第五步 
[root@centos8 ~]#mount -a 
[root@centos8 ~]#lvs
[root@centos8 ~]#df -h 
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.2.6 拆除指定的PV存储设备

范例:

[root@centos8 ~]# pvdisplay 
--- Physical volume ---
PV Name               /dev/sdb
VG Name               myvg
PV Size               10.00 GiB / not usable 4.00 MiB
Allocatable           yes 
PE Size               4.00 MiB
Total PE              2559
Free PE               2047
Allocated PE          512
PV UUID               mw3D7X-vNSW-9Wm7-X0yY-EksC-KSTg-9bG6W4
 
--- Physical volume ---
PV Name               /dev/sdc1
VG Name               myvg
PV Size               2.00 GiB / not usable 4.00 MiB
Allocatable           yes 
PE Size               4.00 MiB
Total PE              511
Free PE               511
Allocated PE          0
PV UUID               bZ2O3y-SFnv-oQxy-dFCw-T5WT-AgKf-THSWF5
 
--- Physical volume ---
PV Name               /dev/sdc2
VG Name               myvg
PV Size               1.00 GiB / not usable 4.00 MiB
Allocatable           yes 
PE Size               4.00 MiB
Total PE              255
Free PE               255
Allocated PE          0
PV UUID               yUfZp1-BsMR-qUv8-Jwg7-KoMC-3JFm-FoUnm5

[root@centos8 ~]# pvmove /dev/sdb
/dev/sdb: Moved: 0.98%
/dev/sdb: Moved: 99.80%
/dev/sdb: Moved: 100.00%
[root@centos8 ~]# pvdisplay 
--- Physical volume ---
PV Name               /dev/sdb
VG Name               myvg
PV Size               10.00 GiB / not usable 4.00 MiB
Allocatable           yes 
PE Size               4.00 MiB
Total PE              2559
Free PE               2559
Allocated PE          0
PV UUID               mw3D7X-vNSW-9Wm7-X0yY-EksC-KSTg-9bG6W4
 
--- Physical volume ---
PV Name               /dev/sdc1
VG Name               myvg
PV Size               2.00 GiB / not usable 4.00 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              511
Free PE               0
Allocated PE          511
PV UUID               bZ2O3y-SFnv-oQxy-dFCw-T5WT-AgKf-THSWF5
 
--- Physical volume ---
PV Name               /dev/sdc2
VG Name               myvg
PV Size               1.00 GiB / not usable 4.00 MiB
Allocatable           yes 
PE Size               4.00 MiB
Total PE              255
Free PE               254
Allocated PE          1
PV UUID               yUfZp1-BsMR-qUv8-Jwg7-KoMC-3JFm-FoUnm5

[root@centos8 ~]# vgreduce myvg /dev/sdb
Removed "/dev/sdb" from volume group "myvg"

[root@centos8 ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped.

4.3 逻辑卷快照

4.3.1 逻辑卷快照原理

快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据临 时拷贝以及其它操作来说,快照是最合适的选择,快照只有在它们和原来的逻辑卷不同时才会消耗空间, 建立快照的卷大小小于等于原始逻辑卷,也可以使用lvextend扩展快照
逻辑卷管理器快照
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
逻辑卷快照工作原理

  • 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会
    使用这些空间
  • 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
  • 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
    由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中.系统恢复的时候 的文件数量不能高于快照区的实际容量
    快照特点:
  • 备份速度快,瞬间完
  • 应用场景是测试环境,不能完全代替备份
  • 快照后,逻辑卷的修改速度会有一定影响
4.3.1 实现逻辑卷快照

范例:

mkfs.xfs /dev/vg0/data 
mount /dev/vg0/data/  /mnt/data

#为现有逻辑卷创建快照 
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data

#挂载快照 
mkdir  -p  /mnt/snap mount -o ro,nouuid /dev/vg0/data-snapshot   /mnt/snap

#恢复快照 
umount /dev/vg0/data-snapshot
umount /dev/vg0/data 
lvconvert --merge /dev/vg0/data-snapshot 

#删除快照 
umount  /mnt/snap 
lvremove  /dev/vg0/data-snapshot

注意:xfs文件系统不支持相同的UUID挂载

本文标签: 文件系统 磁盘