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
posted @ 2021-02-04 18:05  bestvae  阅读(449)  评论(1编辑  收藏  举报