Linux_8_磁盘存储和文件系统
1 磁盘结构
1.1 设备文件
一切皆文件: open(),read(),write(),close()
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:
- 主设备号 major number,标识设备类型
- 次设备号 minor number,标识同一类型下的不同设备
设备类型:
- 块设备 block,存取单位“块”,磁盘
- 字符设备 char,存取单位“字符”,键盘
磁盘设备的设备文件命名
- /dev/DEV_FILE
- /dev/sdx #SCSI,SATA,SAS,IDE,USB
- /dev/nvme0n1p5 259:5 nvme协议
虚拟磁盘:
- /dev/vd
- /dev/xvd
不同磁盘标识: a-z,aa,ab…
示例:
/dev/sda,/dev/sdb ,...
同一设备上的不同分区: 1,2,…
- /dev/sda1
- /dev/sda5
例:创建设备文件
[root@CentOS8 ~]#mknod /data/partation-sda1 b 8 1
[root@CentOS8 ~]#ll /data/partation-sda1
brw-r--r-- 1 root root 8, 1 Aug 1 12:41 /data/partation-sda1
[root@CentOS8 ~]#mount /data/partation-sda1 /mnt/
[root@CentOS8 ~]#ls /mnt/
config-4.18.0-348.el8.x86_64
efi
grub2
[root@CentOS8 ~]#ls /boot
config-4.18.0-348.el8.x86_64
efi
grub2例2
[root@CentOS8 ~]#ll /dev/zero
crw-rw-rw- 1 root root 1, 5 Jul 30 14:43 /dev/zero
[root@CentOS8 ~]#mknod /data/zero c 1 5
[root@CentOS8 ~]#ll /data/zero
crw-r--r-- 1 root root 1, 5 Aug 1 12:44 /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 Large Form Factor大形状因数,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 磁道,磁道 = 柱面数 盘面各1个0磁道
-
sector 扇区,固定512bytes
-
cvlinder 柱面 一列0磁道,即6个0磁道,为0柱面
1柱面512sector数/trackhead数=51263255=7.84M
C5之前版本Linux以柱面的整数倍划分分区,Centos 6之后可以支持以扇区划分分区
要想更快地读取机械硬盘的数据,应把数据放在低磁道,1,2…即硬盘外圈
ZBR(Zoned Bit Recording):区位记录磁盘扇区结构
CHS
- CHS采用24 bit位寻圳
- 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
- 最大寻址空间2^24*512/10 24/1024/1024=8GB
LBA (logical block addressing)
- LBA是一个整数,通过转换成 CHS格式完成磁盘具体寻址
- ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128GiB。
- 2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128Petabytes
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式,在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
[root@CentOS8 ~]#lsblk -d -o name,rota rota即旋转,1则代表机械硬盘,0固态
NAME ROTA
sda 1
sr0 1[root@CentOS8 ~]#cat /sys/block/*/queue/rotational 同上,*代表不同的磁盘
1
1
2 管理存储
使用磁盘空间过程
- 设备分区
- 创建文件系统
- 挂载新的文件系统
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=2048G
划分分区的单位:
Centos 5之前按整柱面划分
Centos 6版本后可以按Sector划分
-
0磁道0扇区 512bytes=446+64+2
-
446bytes boot loader,启动计算机
-
64bytes 分区表,其中每16bytes标识一个分区
-
2bytes 55AA
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区: 主和扩展分区对应的1–4,/dev/sda3,逻辑分区从5开始,/dev/sda5
硬盘主引导记录MBR由4个部分组成:
| 0000-0088 | ]aster Boot Record主引导程序 | 主引导程序 |
|---|---|---|
| 0089-01BD | 出错信息数据区 | 数据区 |
| 01BE-01CD | 分区项1(16字节) | 分区表 |
| 01CE-01DD | 分区项2(16字节) | |
| 01DE-01ED | 分区项3(16字节) | |
| 01EE-01FD | 分区项4(16字节) | |
| 01FE | 55 | |
| 0lFF | AA | 结束标志 |
主引导程序(偏移地址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中DPT结构:
| 存贮字节位 | 内容及含义 |
|---|---|
| 第1字节 | 引导标志。若值为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的分区表,破坏后恢复
#备份MBR分区表
[rootacentos8~]#dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
[root@centos8 ~]#scp /data/dpt.img 10.0.0.8:#破坏MBR分区表,将分区表里446字节开始后的64个字节清空为0
[root@centos8 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446#无法启动
[root@centos8 ~]#reboot#用光盘启动,进入rescue mode,选第3项skip to shell
#配置网络
[root@centos8 ~]#ifconfig ens160 10.0.0.201/24
或
[root@centos8 ~]#ip a a 10.0.0.201/24 /dev/ens160
[root@centos8 ~]#scp 10.0.0.8:/data/dpt.img#恢复MBR分区表
[root@centos8 ~]#dd if=dpt.img of=/dev/sda bs=1 seek=446
[root@centos8 ~]#exit
ps:如果未备份,可以将分区策略相同的其他主机的分区表来恢复和还原当前主机被破坏的分区表
2.1.2.2 GPT分区
GPT: GUID (Globals Unique ldentifiers) partition table 支持128个分区,使用64位,支持8Z(512Bvte/block)64Z (4096Bvte/block)
使用128位UUID(Universally Unique ldentifier)表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI(Unified Extensible Firmware lnterface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
GPT分区结构分为4个区域
- GPT头
- 分区表
- GPT分区
- 备份区域
2.1.3 BIOS和UEFI
BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是UEFI启动
BIOS(Basic nput Output System 基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。
系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长短不同的"滴滴"音,可以简单的判断硬件故障,比如“1长1短”通常表示内存故障,“1长3短”通常表示显卡故障
BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问1M的内存,其中前640K称为基本内存,后384K内存留给开机和各类BIOS本身使用。
BIOS只能识别到主引导记录(MBR)初始化的硬盘,最大支持2T的硬盘,4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系统,
传统的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了
EFI(Extensible Firmware nterface) 可扩展固件接口,是 Intel为PC 固件的体系结构、接口和服务提出的建议标准。
其主要目的是为了提供一组在 OS 加载之前(启动前在所有平台上一致的、正确指定的启动服务,被看做是BIOS的继任者,或者理解为新版BIOS。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是lntel,而是一个称作Unified EFI Form的国际组织
UEFI(Unified Extensible Firmware nterface)统一的可扩展固件接口,是一种详细描术类型接口的标准。UEFI相当于一个轻量化的操作系统,
提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制
BIOS和UEFI区别:
BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址)下,
可访问的内存空间为1MB,只支持字符操作界面UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,
支持图形操作界面,使用文件方式保存信息,支持GPT分区启动,适合和较新的系统和硬件的配合使用
BIOS+MBR与UEFI+GPT
2.1.3 管理分区
列出块设备
lsblk
创建分区命令
fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作,可以是交互或非交互式方式
重新设置内存中的内核分区表版本(即同步内存和硬盘中的分区表,C5/7/8均支持,除了C6)
partprobe
对于C6,强行同步内存和硬盘的分区表(以sda硬盘为例,且是增加分区后,非删除分区)
partx -a /dev/sda
强行同步内存和硬盘的分区表(以sda硬盘的sda6,sda7,sda8为例,且删除分区)
partx -d --nr 6-8 /dev/sda
2.1.3.1 parted 命令
格式:
panted [选项]... [设备 [命令 [参数]...]...]
注意parted的操作实时生效,小心使用
范例:
parted /dev/sdb mklabel gpt|msdos 修改分区类型
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200(默认M) 创建新的分区
parted /dev/sdb rm 1 删除分区1
parted -l 列出所有硬盘分区信息
2.1.3.2 分区工具fdisk和gdisk
不会立即生效
gdisk [device...] 类fdisk的GPT分区工具
fdisk -l[-u][device...] 查看分区
fdisk [device...] 管理MBR分区
子命令:
- p 分区列表
- t 更改分区类型,然后使用L可以查看所有的分区类型
- n 创建新分区
- d 删除分区
- v 校验分区
- u 转换单位
- w 保存并退出
- q 不保存并退出
查看内核是否已经识别新的分区
fdisk -l 查看硬盘上的
lsblk 查看内存上的
cat /proc/partitions 内存上的
C6 通知内核重新读取硬盘分区表:
partx -a /dev/sda (以sda硬盘为例,且是增加分区后,非删除分区)
或kpartx -a /dev/sda -f: forcepartx -d --nr 6-8 /dev/sda (以sda硬盘的sda6,sda7,sda8为例,且删除分区)
范例:非交互式创建分区,创建一个2G的分区
echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc
2.2 文件系统
2.2.1 文件系统概念
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
查看支持的文件系统:
[root@CentOS8 ~]#ls /lib/modules/`uname -r`/kernel/fs
binfmt_misc.ko.xz cifs ext4 fuse jbd2 nfs nls squashfs
cachefiles cramfs fat gfs2 lockd nfs_common overlayfs udf
ceph dlm fscache isofs mbcache.ko.xz nfsd pstore xfs
各种文件系统: https://en.wikipedia.org/wiki/Comparison_of_file_systems
帮助: man 5fs
2.2.2 文件系统类型
Linux常用文件系统
- ext2: Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如/boot 分区
- ext3:是ext2的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
- ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
- xfs:SGl,支持最大8EB的文件系统
- swap
- iso9660 光盘
- btrfs (Oracle)
- reiserfs
Windows常用文件系统
- FAT32
- NTFS
- exFAT
Unix:
- FFS (fast)
- UFS (unix)
- JFS2
网络文件系统:
- NFS
- CIFS
集群文件系统:
- GFS2
- OCFS2 (oracle)
分布式文件系统
- fastdfs
- ceph
- moosefs
- mogilefs
- glusterfs
- Lustre
RAW:
未经处理或者未经格式化产生的文件系统
常用的文件系统特性:
FAT32
最多只能支持16TB的文件系统和4GB的文件
NTFS
最多只能支持16EB的文件系统和16EB的文件
EXT3
- 最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
- 目前只支持32000个子目录
- 件系统使用32位空间记录块数量和inode数量
- 当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
EXT4:
- Linux系统下的日志文件系统,是EXT3文件系统的后继版本
- 文件系统容量达到1EB,而支持单个文件则达到16TB
- 理论上支持无限数量的子目录
- 文件系统使用64位空间记录块数量和inode数量
- 多块分配器支持一次调用分配多个数据块
- 修复速度更快
XFS
- 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
- 用优化算法,日志记录对整体文件操作影响非常小
- 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
- 能以接近裸设备I/0的性能存储数据
查前支持的文件系统:
cat /proc/filesystems
2.2.3 文件系统的组成部分
-
内核中的模块:ext4xfs,vfat
-
Linux的虚拟文件系统:VFS(virtual file system)
-
用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
2.2.4 文件系统选择管理
2.2.4.1 创建文件系统
创建文件管理工具
mkfs命令(1) mkfs.FS_TYPE /dev/DEVICETYPE:ext4xfsbtrfsvfat(2) mkfs -t FS_TYPE /dev/DEVICE-L 'LABEL' 设定卷标
mke2fs:ext系列文件系统专用管理工具
常用选项:(tune2fs也可以使用)
-t {ext2|ext3|ext4|xfs} 指定文件系统类型
-b {1024|2048|4096|1K} 指定块 block 大小
-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 [OPTION]...[DEVICE]
常用选项:
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL
e2Tabel DEVICE [LABEL]
findfs:查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
tune2fs:重新设定ext系列文件系统可调整参数的值-I 查看指定文件系统超级块信息;super block
-L 'LABEL' 修改卷标
-m # 预留给管理员的空间百分比reserved
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用-O ^has_journal
-o 调整文件系统的默认挂载选项,-o/ac
-U UUID 修改UUID号
dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
-h:查看超级块信息,不显示分组信息xfsinfo:显示挂载或已挂载的xfs文件系统信息
xfs_info mountpoint|devname
块组描述符表(GDT)
ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描术符组成块组描术符表GDT(group descriptor table)。
虽然每个块组都需要块组描述符来记录块组的信息和属性元数据,但是不是每个块组中都存放了块组描述符。
将所有块组的块组信息组成一个GDT保存并将该GDT存放于某些块组中,类似存放superblock和备份superblock的块
例:
[root@CentOS8 ~]#xfs_info /dev/sda3 查看xfs文件系统的数据
meta-data=/dev/sda3 isize=512 agcount=4, agsize=3276800 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1
data = bsize=4096 blocks=13107200, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0[root@CentOS8 ~]#dumpe2fs /dev/sda1 查看ext文件系统信息
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name: <none>
Last mounted on: /boot
Filesystem UUID: 54ead45a-7577-4b54-9de2-501aef04207a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 262144
Reserved block count: 13107 预留块数量,默认是5%,创建时可以指定
Free blocks: 201341
Free inodes: 65219
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 127
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Tue May 30 23:28:40 2023
Last mount time: Tue Aug 1 12:59:56 2023
Last write time: Tue Aug 1 12:59:56 2023
Mount count: 26
Maximum mount count: -1
Last checked: Tue May 30 23:28:40 2023
Check interval: 0 (<none>)
Lifetime writes: 363 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: ddab75df-d9e9-4a68-87fd-de316f1c554c
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0xb2b01099
Journal features: journal_incompat_revoke journal_64bit journal_checksum_v3
Journal size: 32M
Journal length: 8192
Journal sequence: 0x000001aa
Journal start: 0
Journal checksum type: crc32c
Journal checksum: 0x8efdc7e4Group 0: (Blocks 0-32767) csum 0x7c0c [ITABLE_ZEROED]Primary superblock at 0, Group descriptors at 1-1Reserved GDT blocks at 2-128Block bitmap at 129 (+129), csum 0x0f6fb285Inode bitmap at 137 (+137), csum 0xc57429e2Inode table at 145-656 (+145)28511 free blocks, 7877 free inodes, 8 directories, 7874 unused inodesFree blocks: 4257-32767Free inodes: 312, 317-8192
Group 1: (Blocks 32768-65535) csum 0x97c8 [ITABLE_ZEROED]Backup superblock at 32768, Group descriptors at 32769-32769Reserved GDT blocks at 32770-32896Block bitmap at 130 (bg #0 + 130), csum 0xedd9dd9dInode bitmap at 138 (bg #0 + 138), csum 0x262496e3Inode table at 657-1168 (bg #0 + 657)13514 free blocks, 8190 free inodes, 2 directories, 8189 unused inodesFree blocks: 34446-34705, 34709-34815, 36864-37887, 37889-38911, 38914-49151, 51660-51711, 52042-52223, 52611-52735, 52745-53247Free inodes: 8195-16384
Group 2: (Blocks 65536-98303) csum 0x53c2 [INODE_UNINIT, ITABLE_ZEROED]Block bitmap at 131 (bg #0 + 131), csum 0xf08f643aInode bitmap at 139 (bg #0 + 139), csum 0x00000000Inode table at 1169-1680 (bg #0 + 1169)14554 free blocks, 8192 free inodes, 0 directories, 8192 unused inodesFree blocks: 80990-80991, 81017-81407, 81920-94495, 94518-94527, 94567-94719, 94834-96255Free inodes: 16385-24576
Group 3: (Blocks 98304-131071) csum 0x2057 [INODE_UNINIT, ITABLE_ZEROED]Backup superblock at 98304, Group descriptors at 98305-98305Reserved GDT blocks at 98306-98432Block bitmap at 132 (bg #0 + 132), csum 0x8667e55bInode bitmap at 140 (bg #0 + 140), csum 0x00000000Inode table at 1681-2192 (bg #0 + 1681)22140 free blocks, 8192 free inodes, 0 directories, 8192 unused inodesFree blocks: 98433-100351, 110851-131071Free inodes: 24577-32768
Group 4: (Blocks 131072-163839) csum 0xa83b [INODE_UNINIT, ITABLE_ZEROED]Block bitmap at 133 (bg #0 + 133), csum 0x1cf11b2dInode bitmap at 141 (bg #0 + 141), csum 0x00000000Inode table at 2193-2704 (bg #0 + 2193)24576 free blocks, 8192 free inodes, 0 directories, 8192 unused inodesFree blocks: 139264-163839Free inodes: 32769-40960
Group 5: (Blocks 163840-196607) csum 0xf707 [INODE_UNINIT, ITABLE_ZEROED]Backup superblock at 163840, Group descriptors at 163841-163841Reserved GDT blocks at 163842-163968Block bitmap at 134 (bg #0 + 134), csum 0x07eabc99Inode bitmap at 142 (bg #0 + 142), csum 0x00000000Inode table at 2705-3216 (bg #0 + 2705)32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodesFree blocks: 163969-196607Free inodes: 40961-49152
Group 6: (Blocks 196608-229375) csum 0xda29 [INODE_UNINIT, ITABLE_ZEROED]Block bitmap at 135 (bg #0 + 135), csum 0x14dbff1eInode bitmap at 143 (bg #0 + 143), csum 0x00000000Inode table at 3217-3728 (bg #0 + 3217)32768 free blocks, 8192 free inodes, 0 directories, 8192 unused inodesFree blocks: 196608-229375Free inodes: 49153-57344
Group 7: (Blocks 229376-262143) csum 0xcf6b [INODE_UNINIT, ITABLE_ZEROED]Backup superblock at 229376, Group descriptors at 229377-229377Reserved GDT blocks at 229378-229504Block bitmap at 136 (bg #0 + 136), csum 0x07eabc99Inode bitmap at 144 (bg #0 + 144), csum 0x00000000Inode table at 3729-4240 (bg #0 + 3729)32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodesFree blocks: 229505-262143Free inodes: 57345-65536
2.2.4.3 文件系统检测和修复
文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“noclean”
注意:一定不要在挂载状态下执行下面命令修复
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 mountpoint
device:指明要挂载的设备设备文件 例如:/dev/sda5卷标 -L 'LABEL' 例如mount LABEL=test mountpointUUID -U 'UUID' 例如-U 0c50523C-43f1-45e7-85c0-a126711d406e伪文件系统名称: proc,sysfs,devtmpfs,configfsmountpoint:挂载点目录必须事先存在,建议使用空目录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 包含目录和文件,noatime使文件被访问或修改时不再修改atime,可以减少磁盘IO,提升性能diratime/nodiratime 目录的访问时间戳auto/noauto 是否支持开机自动挂载,是否支持-a选项exec/noexec 是否支持将文件系统上运行应用程序dev/nodev 是否支持在此文件系统上使用设备文件suid/nosuid 是否支持suid和sgid权限remount 重新挂载ro只读 rw读写user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用acl/noacl 启用或关闭此文件系统上的acl功能loop 使用loop设备,回环,将文件挂载_netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统defaults 默认值,相当于rw,suid,dev,exec,auto,nouser,async
例:
mount -o remount,rw /dev/sdb2 重新以rw方式挂载sdb2
挂载规则:
- 一个挂载点,同一时间只能挂载一个设备
- 一个挂载点,同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录,否则原文件将被隐藏无法访问,但仍会在磁盘占据空间
2.3.2 卸载文件系统 umount
卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点
2.3.3 查看挂载情况
查看挂载:
#通过查看/etc/mtab 文件显示当前已挂载的所有设备
mount
#查看内核追踪到的已挂载的所有设备
cat /proc/mounts
查看挂载点情况,是返回0
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 项:
- 要挂载的设备或伪文件系统
设备文件
LABEL: LABEL="
UUID: UUID="
伪文件系统名称: proc,sysfs
-
挂载点 必须是事先存在的目录
-
文件系统类型 ext4,xfs,iso9660,nfs,none
-
挂载选项 defaults,acl,bind
-
转储频率 0:不做备份 1: 每天转储 2: 每隔一天转储
-
fsck检查的文件系统的顺序 允许的数字是0 1 2,0: 不自检,1: 首先自检;一般只有rootfs才用 2: 非rootfs使用
添加新的挂载项,需要执行下面命令生效
mount -a
范例: C8/C7 /etc/fstab 的分区UUID错误,无法启动
自动进入emergency mode,输入root 密码
#vim /etc/fstab 直接将错误的UUID行#注释。因为第六项是否为0都无法忽略错误,都无法启动
#reboot 后修改UUID
范例: centos6 /etc/fstab 的分区UUID错误,无法启动
如果/etc/fatab 的挂载设备出错,比如文件系统故障,并且文件系统检测项(即第6项为非0),将导致无法启动
自动进入emergency mode 输入root 密码
#cat /proc/mounts 可以查看到/ 以ro方式挂载,无法直接修改配置文件
#mount -o remount .rw
#vim /etc/fstab
将故障行的最后1项,即第6项修改为0,开机不检测此项挂载设备的健康性,从而忽略错误,能实现启动 | 或将错误的UUID行#注释
启动后将UUID修改为真实的UUID即可
挂载文件时,C7/C8在fstab里不能写UUID,因为文件太多UUID无法找到,而要写文件名才能挂。且C6要加 -o loop 才能挂上文件
fstab:
/filename /mountpoint type defaults 0 0
C6:
/filename /mountpoint type loop 0 0挂载目录时,在fstab里文件类型要写none,选项写bind
fstab:
/dirname /mountpoint none bind 0 0
2.4 处理交换文件和分区
2.4.1 swap 介绍
swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据时会将数据写入 swap 分区,当系统缺乏 swap 空间时,
内核会因 RAM 内存耗尽而终止进程。配置过多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露
注意:为优化性能,可以将swap 分布存放,或高性能磁盘存放
官方推荐推荐系统 swap 空间
https://accessredhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/sect-disk-partitioning-setup-ppc#sect-recommended-partitioning-scheme-ppc
| 系统中的 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) | 不建议使用休眠功能 |
-
缓冲区:buffer | buffer cache | write cache
-
缓存:cache | read cache
2.4.2 交换分区实现过程
- 创建交换分区或者文件
- 使用mkswap写入特殊签名
- 在/etc/fstab文件中添加适当的条目
- 使用swapon -a 激活交换空间
创建swap文件系统
mkswap [DEVICE]启用swap分区 on
swapon [OPTION]... [DEVICE]
选项:
-a:激活所有的交换分区
-p PRIORITY: 指定优先级,也可在/etc/fstab 在第4列指定: pri=value
范例:创建swap分区
禁用swap分区 off
swapoff [OPTION]... [DEVICE]
范例:禁用swap分区
[root@centos8 ~]#sed -i.bak '/swap/d' /etc/fstab
[root@centos8 ~]#swapoff -a
Priorty:SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越高
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
2.4.3 swap的使用策略
/proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间
范例:
[root@centos8 ~]#cat /proc/sys/vm/swappiness
30
说明: 内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。简单地说这个参数定义了系统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性
修改swappiness的值
[root@CentOS8 ~]#echo 0 > /proc/sys/vm/swappiness
[root@CentOS8 ~]#cat /proc/sys/vm/swappiness
0
2.5 移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分,所有移动介质也需要挂载,挂载点通常在/media或/mnt下
访问前,介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
2.5.1 使用光盘
在图形环境下自动启动挂载/run/media//
手工挂载
mount /dev/cdrom /mntDEVICE mountpoint
[root@CentOS8 ~]#ll /dev/cdrom
lrwxrwxrwx 1 root root 3 Aug 1 12:59 /dev/cdrom -> sr0
操作光盘
eject 弹出光盘
eject -t 弹入光盘
创建ISO文件(相当于打包,并不压缩)
cp /dev/cdrom /root/centos.iso 将cdrom光盘内容制作为iso文件
mkisofs -r -o /root/etc.iso /etc
刻录光盘
wodim -v -eject centos.iso
2.5.2 USB介质
查看USB设备是否识别,来源于usbutils包
1susb
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX或类似的设备文件
在图形环境中自动挂载在/run/media/<user>/<label>
手动挂载
mount /dev/sdX# /mnt
范例:格式化U盘为FAT32文件系统
[root@centos8 ~]#dnf -y instal1 dosfstools
[root@centos8 ~]#mkfs.vfat /dev/sdd1
mkfs.fat 4.1 (2017-01-24)
[root@centos8 ~]#mount /dev/sdd1 /mnt
2.6 磁盘常见工具
2.6.1 文件系统空间占用等信息的查看工具df
df [OPTION]...[FILE]...
常用选项
-H 以10为单位,10的多少次方
-T 文件系统类型
-h human-readable,以2为单位,2的多少次方
-i inodes instead of blocks,inode节点
-P 以Posix兼容的格式输出,格式整齐
例:显示文件系统类型等
[root@CentOS8 ~]#df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 970012 0 970012 0% /dev
tmpfs tmpfs 998404 0 998404 0% /dev/shm
tmpfs tmpfs 998404 9256 989148 1% /run
tmpfs tmpfs 998404 0 998404 0% /sys/fs/cgroup
/dev/sda2 xfs 104806400 21520536 83285864 21% /
/dev/sda3 xfs 52403200 398544 52004656 1% /data
/dev/sda1 ext4 999320 193956 736552 21% /boot
tmpfs tmpfs 199680 0 199680 0% /run/user/0[root@CentOS8 ~]#lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 54ead45a-7577-4b54-9de2-501aef04207a /boot
├─sda2 xfs f2c173be-7848-43e9-9d0b-da0f1841f93f /
├─sda3 xfs 499afcaa-85a4-4b87-9223-20497b0bcf94 /data
├─sda4
└─sda5 swap 80ee59c8-b184-4f49-9039-5150257143b8 [SWAP]
sr0 iso9660 CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00
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=#
常用选项
if=file 从所命名文件读取而不是从标准输入
of=file 写到所命名的文件而不是到标准输出
ibs=size 一次读size个byte
obs=size 一次写size个byte
bs=size block size,指定块大小(既是是ibs也是obs)
cbs=size 一次转化size个byte
skip=b1ocks 从开头忽略b1ocks个ibs大小的块
seek=b1ocks 从开头忽略b1ocks个obs大小的块
count=n 复制n个bsconv=conversion[,conversion...] 用指定的参数转换文件
conversion 转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补文
fdatasync 写完成前,物理写入输出文件
例:
#备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1#破坏MBR中的bootoader
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/sdal#通过比较dd指令输出中命令的执行时间,即可确定系统最佳的b1ock 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: Redundant Arrays of lnexpensive (lndependent) Disks 廉价磁盘冗余阵列,现称独立磁盘冗余阵列
1988年由加利福尼亚大学伯克利分校 (University of California-Berkeley)“A Case for Redundant Arrays of expensive Disks”多个磁盘合成一个“阵列”来提供更好的性能、几余,或者两者都提供
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为单位,读写数据
读、写性能提升
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数: 2,2+
利用率:能达到100%
3.2.2 RAID-1
读性能提升、写性能略有下降
可用空间:1*min(S1,S2,…)
有冗余能力
最少磁盘数: 2,2N
利用率:能达到50%
3.2.3 RAID-4
多块数据盘异或运算值存于专用校验盘
磁盘利用率(N-1)/N
有冗余能力: 允许最多1块磁盘损坏
至少3块硬盘才可以实现
3.2.4 RAID-5
读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力: 允许最多1块磁盘损坏
最少磁盘数: 3,3+
3.2.5 RAID-6
读、写性能提升
可用空间:(N-2)*min(S1,S2,…)
有容错能力:允许最多2块磁盘损坏
最少磁盘数: 4,4+
3.2.6 RAID-10
多块磁盘先实现RAID1,再组合成RAID0
读、写性能提升
可用空间: N*min(S1,S2,…)/2
有容错能力: 每组镜像最多只能坏一块
最少磁盘数: 4,4+
利用率:50%
容错性大于01
3.2.7 RAID-01
多块磁盘先实现RAID0,再组合成RAID1
利用率:50%
3.2.8 RAID-50
多块磁盘先实现RAID5,再组合成RAID0
3.2.9 其它级别
JBOD: Just a Bunch Of Disks
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间: sum(S1,S2…)
RAID7
可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式
常用级别:
RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
3.3 实现软RAID
mdadm工具: 为软RAID提供管理界面,为空余磁盘添加几余,结合内核中的md(multi devices)
RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
mdadm:模式化的工具,支持的RAID级别: LINEAR,RAIDO,RAID1,RAID4,RAID5,RAID6,RAID10
命令的语法格式:
mdadm [mode] <raiddevice> [options] <component-devices>
常用选项说明:
模式:
创建:-C
装配:-A
监控:-F
管理: -f,-r,-a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备
创建模式
-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 -1 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/sdal#系统日志信息
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
4 辑卷管理器 (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,将一个或多个底层块设备组织成一个逻辑设备的模块
dm不便记忆与分辨,可以使用软链接:
/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
pvcreate /dev/DEVICE
删除pv
pvmove /dev/sdb1 将sdb1里使用的PE转移到同卷组VG下其他物理卷PV,释放sdb1的PE
4.2.2 vg管理工具
显示vg信息
vgs: 简要pv信息显示
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 取卷组中的60%制作为逻辑卷
lvcreate -l 100%FREE -n yourlv testvg 取卷组中剩余空间的60%制作逻辑卷
删除逻辑卷
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
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缩减逻辑卷
缩减数据有风险损坏,建议提前备份
umount /dev/VG_NAME/LV_NAME 取消挂载
e2fsck -f /dev/VG_NAME/LV_NAME 或 fsck -f /dev/VG_NAME/LV_NAME 检查文件系统完整性
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] 缩减文件系统
lvreduce -L [-]#[mMggtT] /dev/VG_NAME/LV_NAME 缩减逻辑卷
mount 重新挂载
注意:xfs文件系统不支持缩减
4.2.5 跨主机迁移卷组
源计算机上
1在旧系统中,umount所有卷组上的逻辑卷2禁用卷组
vgchange -a n vg0
lvdisplay3导出卷组
vgexport vg0
pvscan
vgdisplay4拆下旧硬盘在目标计算机上,并导入卷组
vgimport vg05启用
vgchange -ay vg06mount所有卷组的逻辑卷
4.3 逻辑卷快照
特点:
- 备份速度快,瞬间完成
- 应用场景:测试环境。且不能完全代替备份
- 快照后,逻辑卷的使用速度会有影响
4.3.1 逻辑卷快照原理
快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择,快照只有在它们和原来的逻辑卷不同时才会消耗空间,建立快照的卷大小小于等于原始逻辑卷也可以使用lvextend扩展快照
逻辑卷管理器快照
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
逻辑卷快照工作原理
- 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中.系统恢复的时候的文件数量不能高于快照区的实际容量
4.3.2 实现逻辑卷快照
范例:
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 /dev/vg0/data-snapshot /mnt/snap#恢复快照
umount /dev/vg0/data-snapshot 取消挂载
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot#删除快照
umount /mnt/databackup
lvremove /dev/vg0/databackupvgreduce vg0 /dev/sdb1 从vg0卷组里删掉sdb1
相关文章:
Linux_8_磁盘存储和文件系统
1 磁盘结构 1.1 设备文件 一切皆文件: open(),read(),write(),close() 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 设备号码: 主设备号 major number,标识设备类型 次设备号 minor number,标识同一类型下的不同设备 设备类型:…...
VS + QT 封装带UI界面的DLL
一、创建编译DLL的项目 1.新建Qt Class Liabrary 2.新建项目,选择Qt Widgets Class 3.新建C类,可以在此类里面写算法函数用于调用。 4.下面是添加完Qt窗体类和C类之后的项目截图 5.修改头文件并编译 将uidemo_global.h中的ifdef内容复制到dialog.h上…...
逆向工程-架构真题(二十)
结构化程序设计采用自顶向下、逐步求精及模块化程序设计方法,通过()三种基本控制结构可以构造出任何单入口单出口程序。 顺序、选择和嵌套顺序、分支和循环分支、并发和循环跳转、选择和并发 答案:B 解析: 结构化设…...
Zookeeper 入门
第 1 章 Zookeeper 入门 1.1概述 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将…...
记录--前端使用a链接下载内容增加loading效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 问题描述:最近工作中出现一个需求,纯前端下载 Excel 数据,并且有的下载内容很多,这时需要给下载增加一个 loading 效果。 代码如下: // util…...
如何获取用户的ip地址
用户的 IP 地址可能会被隐藏或者修改,例如使用代理服务器、VPN 等工具,这样就无法准确获取用户的真实 IP 地址。 除了以上特殊情况,一般情况下 用户访问可能会经过一下链路 : 前端—>nginx—>网关—>服务 。 一般情况下后…...
单片机-控制按键点亮LED灯
1、按键电路图 定义四个按键引脚 1、按键按下 为 输入为低电平 2、按键不按下 IO有上拉电阻,为高电平 // 定义 按键的 管教 sbit KEY1 P3^1; sbit KEY2 P3^0; sbit KEY3 P3^2; sbit KEY4 P3^3; 2、LED灯电路图 LED 输出高电平为亮 // 定义LED灯 管教 sbit LED1…...
微信小程序新版隐私协议弹窗实现最新版
1. 微信小程序又双叒叕更新了 2023.08.22更新: 以下指南中涉及的 getPrivacySetting、onNeedPrivacyAuthorization、requirePrivacyAuthorize 等接口目前可以正常接入调试。调试说明: 在 2023年9月15号之前,在 app.json 中配置 __usePriva…...
GO语言圣经 第五章习题
练习5.1 修改findlinks代码中遍历n.FirstChild链表的部分,将循环调用visit,改成递归调用。 func visit(links []string, n *html.Node) []string {if n nil {return links}if n.Type html.ElementNode && n.Data "a" {for _, a : r…...
用kotlin 开发一个简单的多页面跳转
本文介绍一个简单的安卓应用的页面跳转例子,用的是kotlin。 运行时主页面是一个hello 和Jump 按钮,你按一下jump 按钮就转到 从页面,只是标识从页面。 开始建立一个简单工程,名为hello, 选择的是Empty views Activit…...
记录我的tensorrt 部署yolov8
系统 :ubuntu 18.04 代码 :GitHub - noahmr/yolov5-tensorrt: Real-time object detection with YOLOv5 and TensorRT conda 环境 : GitHub - noahmr/yolov5-tensorrt: Real-time object detection with YOLOv5 and TensorRT cuda : 11.8 …...
什么是用户界面? 优漫动游
什么是用户界面? 用户界面(UI,UserInterface)也称人机界面,是人机交互、操作逻辑和界面表现的整体设计。每一种设计都有其对应的职业角色,其中,人机交互的设计人员叫做用户研究工程师,操作逻辑设计人员叫…...
基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)
系统:Macbook M1 镜像版本:mysql:5.7 如果是要查 slave连接不上 master的问题,可以直接跳到文章末尾踩坑处 准备工作 拉取镜像 docker pull mysql:5.7本地数据卷挂载 因为mysql不挂载的话,重启丢失数据,所以在本地创…...
【Locomotor运动模块】瞬移
文章目录 一、原理二、两种类型1、Instant(立刻)2、Dash(猛冲) 三、瞬移区域、瞬移点1、瞬移区域2、瞬移点 一、原理 抛物线指针选择好目标位置,然后告诉瞬移预设体:你想法把游戏区域弄到目标位置来 解释:抛物线指针选…...
【负载均衡】常见的负载均衡策略有哪些?
文章目录 前言负载均衡分类常见负载均衡策略小结 前言 负载均衡策略是实现负载均衡器的关键,而负载均衡器又是分布式系统中不可或缺的重要组件。使用它有助于提高系统的整体性能、可用性、可靠性和安全性,同时支持系统的扩展和故障容忍性。对于处理大量…...
ChatGPT如何应对紧急救援和医疗应急?
ChatGPT在紧急救援和医疗应急方面具有潜在的重要用途。它可以用于提供信息、建议和支持,以帮助应对各种突发事件,如自然灾害、流行病爆发、事故等。以下是ChatGPT如何应对紧急救援和医疗应急的方式以及相关挑战的详细讨论。 ### 紧急救援 #### 1. 提供…...
vue3 ref reactive响应式数据 赋值的问题
文章目录 vue3 ref reactive响应式数据 赋值的问题场景1:将响应式数据赋值请求后的数据错误示范:直接赋值正确写法 场景2:响应式数据解构之后失去响应式原因分析解决办法 toRefs/toRef方法创建ref引用对象 vue3 ref reactive响应式数据 赋值的问题 doing…...
【美团秋招】20230922小美的彩虹糖
小美的彩虹糖 小美有很多的彩虹糖,每颗彩虹糖都有一个颜色,她每天可以吃两颗彩虹糖,如果今天吃的彩虹糖组合是之前没吃过的组合,则小美今天会很高兴。 例如,小美有 6 颗彩虹糖,颜色分别是 [1,1,4,5,1,4]。…...
论文阅读_扩散模型_DM
英文名称: Deep Unsupervised Learning using Nonequilibrium Thermodynamics 中文名称: 使用非平衡热力学原理的深度无监督学习 论文地址: http://arxiv.org/abs/1503.03585 代码地址: https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models 时间: 2015-11-18 作…...
【每日运维】RockyLinux8.6升级OpenSSH9.4p1
为什么需要升级openssh呢,因为很多项目进行漏扫结果都会涉及到这个服务器核心组件,一想到以前升级openssh带来的各种依赖性问题就头疼,不管是什么发行版,升级这个东西真的很烦,这次发现可能还会有好一点的通用一点的升…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
