10.磁盘和文件系统管理
1.磁盘基础知识
1.1 磁盘接口类型
- IDE:133MB/s,并行接口,早期家用电脑
- SCSI:640MB/s,并行接口,早期服务器
- SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
- SAT:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而 SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入 SAS主板上,反之不成
- USB
- M.2
注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的
1.2 硬盘存储术语
1.2.1 CHS
- CHS采用 24 bit位寻址
- 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
- 最大寻址空间 8 GB
- head:磁头 磁头数=盘面数
- track:磁道 磁道=柱面数
- sector:扇区,512bytes
- cylinder:柱面 1柱面=512 * sector数/trackhead数=51263*255=7.84M
1.2.2 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.管理存储
2.1 磁盘使用三部曲之磁盘分区
2.1.1 分区的意义
- 优化I/O性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
2.1.2 MBR分区
MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
MBR分区前512bytes
446bytes: boot loader
64bytes:分区表,其中每16bytes标识一个分区
2bytes: 55AA(表示分区正在被使用)
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5
2.1.3 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.4 查看分区
lsblk:列出磁盘设备
lsblk [options] [device...]
查看内核是否已经识别新的分区
cat /proc/partations
若硬盘添加无法显示可执行如下操作
[root@centos8 data]# ll /sys/block/sd*
lrwxrwxrwx. 1 root root 0 Jan 30 23:41 /sys/block/sda -> ../devices/pci0000:00/0000:00:10.0/host11/target11:0:0/11:0:0:0/block/sda
[root@centos8 data]echo "- - -" > /sys/class/scsi_host/host11/scan
此时可重新查看添加的硬盘
2.1.5 fdisk和gdisk创建分区
格式:
gdisk [device...] 类fdisk 的GPT分区工具
fdisk -l [-u] [device...] 查看分区
fdisk [device...] 管理MBR分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
分区后重读分区表:
#Centos6 通知内核重新读取硬盘分区表除了CentOS 6 以外的其它版本 5,7,8
partprobe
#Centos6 通知内核重新读取硬盘分区表
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用
partx -d --nr M-N /dev/DEVICE
MBR分区推荐使用fdisk命令,GPT推荐使用gdisk命令
2.1.6 parted 命令分区
注意:parted的操作与fdisk和gdisk不同的是它是实时生效
格式:
parted [选项]... [设备 [命令 [参数]...]...]
常用选项:
- -l 列出所有硬盘分区信息
- -p 进入交互命令模式
常见命令:
- mklabel label-type 指定分区方式(GPT或者MBR)
- mkpart [part-type name fs-type] start end 创建指定大小的分区,默认单位M
- print 显示所有分区
- rm 删除指定分区
- name 指定分区名字
范例:
[root@centos8 ~]# parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.
[root@centos8 ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
[root@centos8 ~]# parted /dev/sdb mkpart primary ext4 1001 2001
Information: You may need to update /etc/fstab
[root@centos8 ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1000MB 999MB extended lba
2 1001MB 2001MB 999MB primary
[root@centos8 ~]# parted /dev/sdb rm 1
Information: You may need to update /etc/fstab.
[root@centos8 ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
2 1001MB 2001MB 999MB primary
2.2 磁盘使用三部曲之创建文件系统
2.2.1 文件系统概念
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
查看支持的文件系统:
/lib/modules/`uname -r`/kernel/fs
cat /proc/filesystems
帮助:man 5 fs
2.2.2 文件系统类型
Linux 常用文件系统
- ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
- ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
- ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升
- xfs:SGI,支持最大8EB的文件系统
- swap
- iso9660 光盘
- btrfs(Oracle)
Windows 常用文件系统
- FAT32 :最多只能支持16TB的文件系统和4GB的文件
- NTFS :最多只能支持16EB的文件系统和16EB的文件
- exFAT
2.2.3 创建文件系统
mkfs:创建文件系统
mke2fs:ext系列文件系统专用管理工具
格式:
mkfs [options] [-t type] [fs-options] device [size]
mkfs.type device
mke2fs [options] device
常用选项:
- -t {ext2|ext3|ext4|xfs} 指定文件系统类型
- -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.2.4 查看文件系统
blkid:显示设备属性信息
格式:
blkid [OPTION]... [DEVICE]
常用选项:
- -L LABEL 根据指定的LABEL来查找对应的设备
- -U UUID 根据指定的UUID来查找对应的设备
e2label:管理ext系列文件系统的LABEL
格式:
e2label DEVICE [LABEL]
findfs:通过label和UUID查找分区
格式:
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
格式:
dumpe2fs [options] device
常用选项:
- -h:查看超级块信息,不显示分组信息
xfs_info:显示示挂载或已挂载的 xfs 文件系统信息
格式:
xfs_info mountpoint|devname
范例:
[root@centos8 ~]# xfs_info /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
2.2.5 修复文件系统
文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“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文件系统专用检测修复工具
格式:
xfs_repair [options] device
常用选项:
- -f 修复文件
- -n 只检查
- 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
2.3 磁盘使用三部曲之挂载文件系统
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入 口的行为
2.3.1 挂载文件系统mount
格式:
mount [-fnrsvw] [-t fstype] [-o options] device dir
device:指明要挂载的设备
- 设备文件:例如:/dev/sda5
- 卷标:-L 'LABEL', 例如 -L 'MYDATA'
- UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
- 伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录
常用选项:
-
-t vsftype 指定要挂载的设备上的文件系统类型
-
-r readonly,只读挂载
-
-w read and write, 读写挂载
-
-n 不更新/etc/mtab,mount不可见
-
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有 auto功能)
-
-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/noacl 启用此文件系统上的acl功能 loop 使用loop设备
_netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统 defaults 相当于rw, suid, dev, exec, auto, nouser, async
挂载规则:
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
2.3.2 卸载文件系统 umount
格式:
umount 设备名|挂载点
2.3.3 查看挂载情况
查看挂载
#通过文件查看
/etc/fstab, /etc/mtab and /proc/mounts
#通过命令查看
mount
查看挂载点情况
#用法
findmnt [options] device|mountpoint
#范例
[root@centos8 ~]# findmnt /boot
TARGET SOURCE FSTYPE OPTIONS
/boot /dev/sda1 ext4 rw,relatime,seclabel
管理正在访问指定文件系统的进程
#lsof
lsof MOUNT_POINT 查看所有正在访问文件系统的进程
#fuser
fuser -v MOUNT_POINT 查看所有正在访问文件系统的进程
fuser -km MOUNT_POINT 终止所有正在访问文件系统的进程
2.3.4 持久挂载
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
查看帮助:
man 5 fstab
mount -a #可以使新添加的挂载项生效
fstab格式:
[root@centos8 ~]# cat /etc/fstab
#
UUID=ccd25378-c82e-4bea-ad12-81fba73fdf70 / xfs defaults 0 0
-
要挂载的设备信息(UUID、LABLE等)
-
挂载点:必须是事先存在的目录
-
文件系统类型
-
挂载选项
-
转储频率:0:不做备份 1:每天转储 2:每隔一天转储
-
fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检 ,1:首先自检;一般只有rootfilesystems才用 2:非rootfilesystems使用
2.4 swap分区
2.4.1 swap 介绍
当没有足够的 RAM 保存系统处理的数据 时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。
官方推荐推荐系统 swap 空间
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_gui de/sect-disk-partitioning-setup-ppc#sect-recommended-partitioning-scheme-ppc
2.4.2 交换分区实现过程
1.创建交换分区或者文件
[root@centos8 ~]#echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdc
2.创建swap分区
[root@centos8 ~]#mkswap /dev/sdc1
3.写入配置文件fstab
[root@centos8 ~]#vim /etc/fstab
UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap swap defaults 0 0
4.使用swapon -a 激活交换空间
[root@centos8 ~]#swapon -a
[root@centos8 ~]#free -h
total used free shared buff/cache available
Mem: 3.7Gi 264Mi 3.2Gi 9.0Mi 261Mi 3.2Gi
Swap: 4.0Gi 0B 4.0Gi
[root@centos8 ~]#cat /proc/swaps
Filename Type Size Used Priority
/dev/sda5 partition 2097148 0 -2
/dev/sdc1 partition 2097148 0 -3
5.swapon和swapoff
#启用swap分区
swapon [OPTION]... [DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级,也可在/etc/fstab 在第4列指定:pri=value
#禁用swap分区
swapoff [OPTION]... [DEVICE]
swap优先级说明:可以指定swap分区0到32767的优先级,值越大优先级越高
2.5 移动介质使用
2.5.1 使用光盘
挂载和卸载
[root@centos8 ~]# mount /dev/cdrom /mnt/
[root@centos8 ~]# unmount /mnt/
创建ISO文件
[root@centos8 ~]# cp /dev/cdrom /root/centos.iso
[root@centos8 ~]# mkisofs -r -o /root/etc.iso /etc #来自于genisoimage包
2.5.2 USB介质
查看usb设备
[root@centos8 ~]# lsusb
[root@centos8 ~]#mount /dev/sdX# /mnt
查看硬件设备日志
[root@centos8 ~]#tail /var/log/messages -f
[root@centos8 ~]#dmesg
格式化U盘为 FAT32 文件系统
[root@centos8 ~]#dnf -y install 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:查看文件系统磁盘的已经使用空间
格式:
df [OPTION]... [FILE]...
常用选项:
- -H 以10为单位
- -T 文件系统类型
- -h 以更容易阅读的单位显示
- -i inode的占用数量
- -P 以整理好的格式输出
范例:
[root@centos8 data]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 943M 0 943M 0% /dev
tmpfs tmpfs 958M 0 958M 0% /dev/shm
tmpfs tmpfs 958M 467k 958M 1% /run
tmpfs tmpfs 958M 0 958M 0% /sys/fs/cgroup
/dev/vda1 xfs 54G 3.5G 51G 7% /
tmpfs tmpfs 192M 0 192M 0% /run/user/0
[root@centos8 data]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 899M 0 899M 0% /dev
tmpfs tmpfs 914M 0 914M 0% /dev/shm
tmpfs tmpfs 914M 456K 914M 1% /run
tmpfs tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/vda1 xfs 50G 3.2G 47G 7% /
tmpfs tmpfs 183M 0 183M 0% /run/user/0
2.6.2 du
du:统计目录占用空间
格式:
du [OPTION]... [FILE]...
常用选项:
- -h 以更容易阅读的单位显示
- -s 只统计文件夹的大小,而不统计子目录
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)
-
skip=blocks 从开头忽略blocks个ibs大小的块
-
seek=blocks 从开头忽略blocks个obs大小的块
-
count=n 复制n个bs
-
conv=conversion[,conversion...] 用指定的参数转换文件
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
fdatasync 写完成前,物理写入输出文件
范例:
[root@centos8 data]# echo abcdef > f1.txt
[root@centos8 data]# echo 12345678 > f2.txt
[root@centos8 data]# dd if=f1.txt of=f2.txt bs=1 seek=3
7+0 records in
7+0 records out
7 bytes copied, 6.0037e-05 s, 117 kB/s
[root@centos8 data]# cat f2.txt
123abcdef
3.RAID
3.1 什么是RAID
RAID:Redundant Arrays of Inexpensive(Independent) Disks 廉价(独立)磁盘冗余阵列 1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for Redundant Arrays of Inexpensive Disks”,多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供
3.2 RAID级别
3.2.1 RAID-0
以 chunk 单位,读写数据
组合方式:
-
Disk0:A1 A3 A5 A7
-
Disk0:A2 A4 A6 A8
最少磁盘数:2
3.2.2 RAID-1
组合方式:
- Disk0:A1 A2 A3 A4
- Disk1:A1 A2 A3 A4
最少磁盘数:2
3.2.3 RAID-4
组合方式:
- Disk0:A1 B1 C1 D1
- Disk1:A2 B2 C2 D2
- Disk2:Ap Bp Cp Dp
使用一块硬盘做校验位,至少3块硬盘才可以实现(不过校验位硬盘容易损坏)
3.2.4 RAID-5
组合方式:
- Disk0:A1 B1 Cp
- Disk1:A2 Bp C2
- Disk1:Ap B3 C3
每块磁盘上都放置一个校验位,允许损坏1块磁盘,最少要3块硬盘实现
3.2.5 RAID-6
组合方式:
- Disk0:A1 B1 Cp Dq
- Disk1:A1 Bp Cq D1
- Disk2:Ap Bq C2 D2
- Disk3:Aq B3 C3 Dp
每块磁盘上放置两个校验位,允许损坏2块磁盘,至少要4块硬盘实现
3.2.6 RAID-10
组合方式:
- Disk0:A1 A2
- Disk1:A1 A2
- Disk2:A3 A4
- Disk3:A3 A4
先将Disk0和Disk1组成RAID1、Disk2和Disk3组成RAID1,在将两个RAID1组合成RAID0.至少要4块硬盘实现该功能。
3.2.7 RAID-01
组合方式:
- Disk0:A1 A2
- Disk1:A3 A4
- Disk2:A1 A2
- Disk3:A3 A4
先将Disk0和Disk1组成RAID0、Disk2和Disk3组成RAID0,在将两个RAID1组合成RAID1.至少要4块硬盘实现该功能。
3.2.8 JBOD
组合方式:
- Disk0:A1 A2 A3
- Disk1:A4 A5 A6
- Disk2:A7 A8 A9
将多个磁盘空间合并成一个大空间使用
RAID7 可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的 RAID模式
常用级别: RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
4.逻辑卷管理(LVM)
4.1 LVM介绍
LVM可以弹性的更改LVM的容量
实现过程:
- 将设备指定为物理卷
- 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent, PE)来定义的
- 创建逻辑卷,在逻辑卷上创建文件系统并挂载
4.2 实现逻辑卷
4.2.1 pv管理工具
显示pv信息
pvs:简要pv信息显示
pvdisplay
删除和创建pv
pvremove /dev/DEVICE
pvcreate /dev/DEVICE
4.2.2 vg管理工具
显示卷组信息
vgs
vgdisplay
创建卷组:
vgcreate [-s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE]] VolumeGroupName PhysicalDevi‐cePath [PhysicalDevicePath...]
扩展和减少卷组:
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
4.2.3 lv管理工具
显示逻辑卷
lvs
lvsdisplay
创建逻辑卷
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]]
#调整ext系列文件系统大小
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
#调整xfs系列文件系统大小
xfs_growfs /mountpoints
4.2.4 扩展和缩减逻辑卷
注意:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减
#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
#2.缩减逻辑卷
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.3 逻辑卷快照
4.3.1 逻辑卷快照原理
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移 动到快照区,没有改动的区域则由快照区和文件系统共享
快照特点:
- 备份速度快,瞬间完
- 应用场景是测试环境,不能完成代替备份
- 快照后,逻辑卷的修改速度会一定有影响
4.3.2 实现逻辑卷快照
范例:
#为现有逻辑卷创建快照
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/databackup
练习:
1.创建一个2G的文件系统,块大小为2048byte,预留1%的可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,并且有acl挂载选项。
[root@centos8 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition number (2-128, default 2): 2
First sector (2099200-41943006, default 2099200):
Last sector, +sectors or +size{K,M,G,T,P} (2099200-41943006, default 41943006): +2G
Created a new partition 2 of type 'Linux filesystem' and of size 2 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos8 ~]# mkfs.ext4 -L TEST -m 1 -b 2048 /dev/sdb2
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 49dcc4bf-f2c2-4ef0-b707-bbc1f3081d7a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[root@centos8 ~]# blkid /dev/sdb2
/dev/sdb2: LABEL="TEST" UUID="49dcc4bf-f2c2-4ef0-b707-bbc1f3081d7a" TYPE="ext4" PARTUUID="f88db445-edbd-0e43-8453-0f70b1fc198a"
#写入配置文件实现持久挂载
[root@centos8 ~]# vim /etc/fstab
UUID=ccd25378-c82e-4bea-ad12-81fba73fdf70 / xfs defaults 0 0
UUID=49dcc4bf-f2c2-4ef0-b707-bbc1f3081d7a /test xfs defaults,acl 0 0
[root@centos8 ~]# mount -a
3.创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/data/test目录
#1.添加两块新硬盘sdb和sdc,使用fdisk创建sdb1和sdc1并且将分区类型改为8e
[root@Centos7 data]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 10G 0 part
sdc 8:32 0 20G 0 disk
sr0 11:0 1 9.5G 0 rom /mnt
[root@Centos7 data]# fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcf597f02
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 8e Linux LVM
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5cec7bc0
Device Boot Start End Blocks Id System
/dev/sdc1 2048 20973567 10485760 8e Linux LVM
#2.创建pv
[root@Centos7 data]# pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
#3.创建物理卷组,设置PE大小为16M
[root@Centos7 data]# vgcreate -s 16M testvg /dev/sdb1 /dev/sdc1
Volume group "testvg" successfully created
[root@Centos7 data]# vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <19.97 GiB
PE Size 16.00 MiB
Total PE 1278
Alloc PE / Size 0 / 0
Free PE / Size 1278 / <19.97 GiB
VG UUID H6l3Hu-WKI7-zAIo-A4Zy-k3hp-ojkP-YEqI1H
#4.创建逻辑卷
[root@Centos7 data]# lvcreate -L 5G -n testlv testvg
Logical volume "testlv" created.
[root@Centos7 data]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv testvg -wi-a----- 5.00g
[root@Centos7 data]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID YCrkZc-J2PL-PwZF-DWvu-8xvO-EuQm-xo2RIk
LV Write Access read/write
LV Creation host, time Centos7, 2021-02-04 19:56:33 +0800
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 320
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
#5.创建文件系统并挂载至挂载点
[root@Centos7 data]# mkfs.ext4 /dev/testvg/testlv
[root@Centos7 data]# blkid
/dev/sdb1: UUID="8Ru2tC-P9rW-3TDt-fHiH-BEDT-32sq-4rt9OK" TYPE="LVM2_member"
/dev/sdc1: UUID="vZDdu2-1obH-hLfi-NkZo-LCad-UJAU-ZlWLR7" TYPE="LVM2_member"
/dev/mapper/testvg-testlv: UUID="682fa042-9b2e-4376-8ef9-1c785fc13bca" TYPE="ext4"
[root@Centos7 data]# vim /etc/fstab
UUID=682fa042-9b2e-4376-8ef9-1c785fc13bca /data/test ext4 defaults 0 0
[root@Centos7 data]# mount -a
[root@Centos7 data]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda2 100G 1.5G 99G 2% /
/dev/sda3 50G 33M 50G 1% /data
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/sr0 9.5G 9.5G 0 100% /mnt
/dev/mapper/testvg-testlv 4.8G 20M 4.6G 1% /data/test
#6.为逻辑卷扩展5G空间
[root@Centos7 data]# lvextend -L +5G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 10.00 GiB (640 extents).
Logical volume testvg/testlv successfully resized.
[root@Centos7 data]# resize2fs /dev/testvg/testlv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/testvg/testlv is mounted on /data/test; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/testvg/testlv is now 2621440 blocks long.
[root@Centos7 data]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda2 100G 1.5G 99G 2% /
/dev/sda3 50G 33M 50G 1% /data
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/sr0 9.5G 9.5G 0 100% /mnt
/dev/mapper/testvg-testlv 9.8G 23M 9.3G 1% /data/test