linux存储之(逻辑卷)

RAID与逻辑卷

使用场景:
1、RAID适用于 “要求数据冗余和高性能” 的环境。例如,关键业务系统、数据库服务器和存储密集型应用程序等。RAID可以提供数据冗余和恢复能力,以及并行读/写操作加速数据访问。
2、逻辑卷适用于 “对存储管理灵活性和易管理性” 要求较高的环境。通过逻辑卷,管理员可以根据需要划分和管理存储空间,实现数据的逻辑隔离和动态调整。

结合使用与选择:
1、RAID和逻辑卷可以结合使用。RAID可以提供数据冗余和性能,而逻辑卷提供更灵活的存储管理能力。这可以通过在RAID阵列上创建逻辑卷来实现。管理员可以在RAID上创建逻辑卷,并根据需求调整其大小、分配给不同的应用程序等。
2、在某些情况下,只需要选择RAID或逻辑卷中的一个应用于生产环境。这取决于您的特定需求和环境。如果您更关注数据冗余和性能,那么RAID可能是更合适的选择。如果您更关注存储灵活性和可管理性,那么逻辑卷可能更适合您的需求。

总结:对于关键的生产环境,通常建议使用RAID与逻辑卷结合,以提供数据冗余、性能和灵活的存储管理能力。

一、PV(物理卷)

pvcreate(创建物理卷)
功能
1、pvcreate命令用于创建物理卷,使其成为逻辑卷管理器的一部分。
2、物理卷是LVM中的基本单元,用于构建逻辑卷组(Volume Group)。
3、物理卷负责管理存储设备的分配和分块,它们可以被添加到逻辑卷组中,并进一步分配给逻辑卷(Logical Volume)。
4、在执行pvcreate命令时,可以指定一个或多个物理设备作为参数,这些设备将被标记为物理卷。
5、在创建物理卷之前,建议确保指定的设备没有包含重要数据,因为pvcreate命令可能会擦除该设备上的数据。
6、创建物理卷后,可以使用pvdisplay命令来查看物理卷的详细信息。
# 物理设备分区
在使用pvcreate创建物理卷之前,通常需要在物理设备上进行分区操作。分区可以使用工具如fdisk或parted来完成。下面是一个常见的创建物理卷的步骤:
1、使用fdisk -l或其他分区工具查看当前系统上的磁盘和分区信息。这将列出所有可用的物理设备和它们的分区。
2、选择一个空闲的物理设备(如未分区的磁盘或一个未使用的分区)来创建物理卷。确保这个设备上没有重要的数据,因为分区操作会擦除设备上的数据。
3、使用fdisk或parted等分区工具对选定的物理设备进行分区。
4、对于fdisk,可以执行sudo fdisk /dev/<device>(例如,sudo fdisk /dev/sdb)来进入交互界面,然后按照提示进行分区操作。
5、对于parted,可以执行sudo parted /dev/<device>(例如,sudo parted /dev/sdb),然后使用其命令行界面进行分区操作。
6、创建完分区后,执行pvcreate命令来将分区标记为物理卷。例如,sudo pvcreate /dev/<partition>(例如,sudo pvcreate /dev/sdb1)。
7、使用pvdisplay命令验证物理卷的创建结果。例如,sudo pvdisplay。

# 物理设备分区
1、空间管理:物理设备的整体空间可能超出所需的物理卷大小。通过进行分区,可以将设备的空间划分为较小的部分,使每个分区都可以用作独立的物理卷。这样可以更好地管理和利用设备的空间,将其分配给不同的逻辑卷或卷组。
2、数据隔离:分区可以实现数据的逻辑隔离。通过将不同的数据存储在不同的分区中,可以避免数据交叉和冲突的问题,提高数据的安全性和可管理性。
3、灾难恢复:分区可以简化灾难恢复的过程。当一个分区发生问题时,只需恢复该分区的数据,而不影响其他分区。这有助于减少数据丢失的风险和提高恢复的效率。
4、不同的需求:通过将设备分区,可以根据不同的需求或用途将不同的分区格式化为不同的文件系统类型。例如,一个分区可以格式化为ext4文件系统用于存储操作系统文件,另一个分区可以格式化为XFS文件系统用于存储数据库文件。
5、硬件限制:某些硬件设备要求对其进行分区才能使用。例如,某些磁盘阵列控制器可能要求将其硬盘驱动器分区为逻辑驱动器,然后才能创建物理卷和逻辑卷。

# 物理设备不分区
1、然而,有一种特殊情况是直接使用整个磁盘作为物理卷的情况,而不需要额外的分区划分。这种方式被称为裸设备(raw device)或整个设备(whole device)操作。
2、使用整个设备创建物理卷可能会失去分区带来的一些好处,如更好的管理和隔离数据。因此,在普遍的实践中,将物理设备进行分区是更常见和推荐的做法。
# 针对三个设备/dev/sdd,/dev/sdc,/dev/sdd创建三个分区
# /dev/sdb
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@ubuntu ~]# echo -e 'g\nn\n\n\n+1G\nt\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: A8E64868-3206-6A43-A117-92A853F07658

Device     Start     End Sectors Size Type
/dev/sdb1   2048 2099199 2097152   1G Linux LVM

[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n2\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: 572E99F2-8D56-0F4D-BD0A-24CD521FC7C5

Device       Start     End Sectors Size Type
/dev/sdb1     2048 2099199 2097152   1G Linux LVM
/dev/sdb2  2099200 4196351 2097152   1G Linux LVM

[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n3\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: 572E99F2-8D56-0F4D-BD0A-24CD521FC7C5

Device       Start     End Sectors Size Type
/dev/sdb1     2048 2099199 2097152   1G Linux LVM
/dev/sdb2  2099200 4196351 2097152   1G Linux LVM
/dev/sdb3  4196352 6293503 2097152   1G Linux LVM
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# /dev/sdc
[root@ubuntu ~]# echo -e 'g\nn\n\n\n+1G\nt\n30\np\nw\n' | fdisk /dev/sdc | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: B41C78D3-FDA4-FA45-8CED-FF85199246B3

Device     Start     End Sectors Size Type
/dev/sdc1   2048 2099199 2097152   1G Linux LVM

[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n2\n30\np\nw\n' | fdisk /dev/sdc | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: B41C78D3-FDA4-FA45-8CED-FF85199246B3

Device       Start     End Sectors Size Type
/dev/sdc1     2048 2099199 2097152   1G Linux LVM
/dev/sdc2  2099200 4196351 2097152   1G Linux LVM

[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n3\n30\np\nw\n' | fdisk /dev/sdc | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: B41C78D3-FDA4-FA45-8CED-FF85199246B3

Device       Start     End Sectors Size Type
/dev/sdc1     2048 2099199 2097152   1G Linux LVM
/dev/sdc2  2099200 4196351 2097152   1G Linux LVM
/dev/sdc3  4196352 6293503 2097152   1G Linux LVM
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# /dev/sdd
[root@ubuntu ~]# echo -e 'g\nn\n\n\n+1G\nt\n30\np\nw\n' | fdisk /dev/sdd | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: 6A83F9D1-E178-9140-90B1-2366091D1611

Device     Start     End Sectors Size Type
/dev/sdd1   2048 2099199 2097152   1G Linux LVM

[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n2\n30\np\nw\n' | fdisk /dev/sdd | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: 6A83F9D1-E178-9140-90B1-2366091D1611

Device       Start     End Sectors Size Type
/dev/sdd1     2048 2099199 2097152   1G Linux LVM
/dev/sdd2  2099200 4196351 2097152   1G Linux LVM

[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n3\n30\np\nw\n' | fdisk /dev/sdd | sed -nr '/Disklabel type/,$p' | head -n -4
Disklabel type: gpt
Disk identifier: 6A83F9D1-E178-9140-90B1-2366091D1611

Device       Start     End Sectors Size Type
/dev/sdd1     2048 2099199 2097152   1G Linux LVM
/dev/sdd2  2099200 4196351 2097152   1G Linux LVM
/dev/sdd3  4196352 6293503 2097152   1G Linux LVM

# echo -e 'g\nn\n\n\n+1G\nt\n30\np\nw\n': 使用非交互式的方式;创建分区时每个输入符都不一样哦
# fdisk /dev/sdb: 使用fdisk工具
# sed -nr '/Disklabel type/,$p': 命令/Disklabel type/,$p表示从匹配的行开始,打印(输出)匹配行及其之后的所有行。
# /Disklabel type/: //为正则表达式中字符串定界符,定界符之间的内容被视为正则表达式的模式。使用斜杠作为定界符是约定俗成的惯例,但实际上你也可以选择其他字符作为定界符,例如#号。
# head -n -4: 排除输出的后四行

[root@ubuntu ~]# lsblk /dev/sdb /dev/sdc /dev/sdd -o name,size
NAME   SIZE
sdb     20G
├─sdb1   1G
├─sdb2   1G
└─sdb3   1G
sdc     20G
├─sdc1   1G
├─sdc2   1G
└─sdc3   1G
sdd     20G
├─sdd1   1G
├─sdd2   1G
└─sdd3   1G
# 创建物理卷
[root@ubuntu ~]# pvcreate /dev/sdb{1..3} /dev/sdc{1..3} /dev/sdd{1..3}
pvs(显示pv的简要信息)
[root@ubuntu ~]# pvs
  PV         VG        Fmt  Attr PSize    PFree 
  /dev/sdb1            lvm2 ---     1.00g  1.00g
  /dev/sdb2            lvm2 ---     1.00g  1.00g
  /dev/sdb3            lvm2 ---     1.00g  1.00g
  /dev/sdc1            lvm2 ---     1.00g  1.00g
  /dev/sdc2            lvm2 ---     1.00g  1.00g
  /dev/sdc3            lvm2 ---     1.00g  1.00g
  /dev/sdd1            lvm2 ---     1.00g  1.00g
  /dev/sdd2            lvm2 ---     1.00g  1.00g
  /dev/sdd3            lvm2 ---     1.00g  1.00g
pvdisplay(显示物理卷属性信息)
  [root@ubuntu ~]# pvdisplay | grep 'PV Name'
  PV Name               /dev/sdb1
  PV Name               /dev/sdb2
  PV Name               /dev/sdb3
  PV Name               /dev/sdc1
  PV Name               /dev/sdc2
  PV Name               /dev/sdc3
  PV Name               /dev/sdd1
  PV Name               /dev/sdd2
  PV Name               /dev/sdd3
[root@ubuntu ~]# pvdisplay -s
  Device "/dev/sdb1" has a capacity of 1.00 GiB
  Device "/dev/sdb2" has a capacity of 1.00 GiB
  Device "/dev/sdb3" has a capacity of 1.00 GiB
  Device "/dev/sdc1" has a capacity of 1.00 GiB
  Device "/dev/sdc2" has a capacity of 1.00 GiB
  Device "/dev/sdc3" has a capacity of 1.00 GiB
  Device "/dev/sdd1" has a capacity of 1.00 GiB
  Device "/dev/sdd2" has a capacity of 1.00 GiB
  Device "/dev/sdd3" has a capacity of 1.00 GiB
 [root@ubuntu ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1	# 物理卷(Physical Volume)的路径和名称
  VG Name               vg1	# 物理卷所属的卷组(Volume Group)名称
  PV Size               1.00 GiB / not usable 16.00 MiB	# 这表示物理卷的大小;1G可用的物理卷空间,16M不可用的物理卷空间
  Allocatable           yes (but full)	# 该物理卷是否可供分配;yes标识可供分配,但but full标识已满,没有可用空间
  PE Size               16.00 MiB	# 这表示物理区(Physical Extent)的大小,即一次分配的最小空间单元大小。
  Total PE              63	# 这表示物理卷的总物理区数量,即物理卷被分割成了 63 个物理区
  Free PE               0	# 这表示物理卷的空闲物理区数量,即当前没有可用的空闲物理区
  Allocated PE          63	# 这表示物理卷被分配的物理区数量,即当前所有的物理区都已被分配
  PV UUID               gLrAxg-oTWT-FRqG-VoUR-XNel-2Yv0-F2aD2e	# 理卷的唯一标识符(UUID)
pvresize(调整卷组中的物理卷的大小)
-d	调试模式
-h	帮助信息
-t	以测试模式运行
-v	制定发送消息的详细等级
-y	总是选择确定(谨慎)
--reportformat basic|json	重写当前报告的输出格式
--setphysicalvolumesize<卷大小>	覆盖物理卷自动检测到的尺寸
扩展物理卷的大小:
[root@ubuntu ~]# pvresize /dev/sdb1
上述命令将扩展物理卷 /dev/sdb1 的大小,以利用其提供的额外磁盘空间。
收缩物理卷的大小:
[root@ubuntu ~]# pvresize --setphysicalvolumesize 100G /dev/sdb1
上述命令将物理卷 /dev/sdb1 的大小收缩为 100GB,可以用来释放不再需要的磁盘空间。
使用 --verbose 选项显示详细的命令执行信息:
[root@ubuntu ~]# pvresize --verbose /dev/sdb1
这会显示更详细的输出,包括操作的过程和结果。
pvmove(在物理卷上移动逻辑卷组中的数据)
使用pvmove时,你将指定要迁移的源物理卷和目标物理卷。LVM将数据从源物理卷复制到目标物理卷,并在迁移完成后更新逻辑卷组的映射关系,以确保逻辑卷继续可用。
pvmove操作是热迁移(hot move)的,即在系统运行时进行迁移而无需停止逻辑卷的访问。这使得数据迁移过程不会中断正在使用逻辑卷的应用程序。
# 在以下常用情况中使用
1、扩展逻辑卷组容量:如果逻辑卷组的存储空间不足,你可以添加一个新的物理卷到逻辑卷组中,并使用pvmove命令将数据从旧物理卷迁移到新的物理卷上。这样可以扩展逻辑卷组的容量并确保数据的连续性。
2、替换故障的物理卷:如果一个物理卷发生故障或成为不可用状态,你可以添加一个新的物理卷到逻辑卷组中,并使用pvmove命令将故障的物理卷上的数据迁移到新的物理卷上。这样可以恢复逻辑卷组的正常运行并保护数据的完整性。
3、平衡逻辑卷组的负载:有时,逻辑卷组中的数据分布不均匀,导致某些物理卷的负载过重。使用pvmove命令可以将物理卷上的数据重新分布到其他物理卷上,以平衡逻辑卷组的负载,提高性能和可靠性。
4、迁移数据到更高性能的存储设备:如果你希望将数据从旧的低性能存储设备(如传统机械硬盘)迁移到新的高性能存储设备(如固态硬盘),可以使用pvmove命令进行迁移。这样可以增加系统的响应速度和吞吐量。
# pvmove [options] <source_pv> <destination_pv>

# [options]:选项
# <source_pv>:迁移数据的源物理卷
# <destination_pv>:迁移到的目标物理卷

[root@ubuntu ~]# pvmove /dev/sdb1 /dev/sdc1

二、VG(卷组)

vgcreate(创建卷组)
vgcreate [(options)...] [vg_name] [devices]

vgcreate 特定选项:
-A, --autobackup y|n:指定是否自动备份卷组的元数据信息。当设置为 “y” 时,创建卷组时会自动备份元数据。
-c, --clustered y|n:指定卷组是否为群集模式。设置为 “y” 表示创建一个群集卷组。
-l, --maxlogicalvolumes Number:设置卷组允许的最大逻辑卷数目。
-p, --maxphysicalvolumes Number:设置卷组允许的最大物理卷数目。
-M, --metadatatype lvm2:指定元数据的类型为 “lvm2”。
-s, --physicalextentsize Size[m|UNIT]:指定物理区的大小,可以以 MiB 为单位的数字表示,或带有单位的字符串。
其他选项包括 -f, --force(强制执行操作)、--addtag Tag(给新卷组添加标签)、--alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit(指定逻辑卷的分配策略)、--metadataprofile String(指定元数据配置文件)、--labelsector Number(指定标签的扇区位置)、--metadatasize Size[m|UNIT](指定元数据的大小)等。

公共选项(Common options):
这些选项是 LVM 工具共享的通用选项,用于控制整个 LVM 命令行工具的行为,例如调试、帮助、输出控制等。其中的一些常用选项包括:

-d, --debug:启用调试模式。
-h, --help:显示帮助信息。
-v, --verbose:显示详细的操作日志和输出信息。
-y, --yes:自动回答 “yes”。
-t, --test:运行测试模式,不实际执行操作。
--version:显示版本信息。
[root@ubuntu ~]# vgcreate -s 16M vg0 /dev/sdb1 /dev/sdc1 /dev/sdd1
  Volume group "vg0" successfully created

# -s:16M表示每个物理区域存储的大小为16兆字节。这意味着,LVM将硬盘驱动器划分为一系列大小为16兆字节的物理区域。(默认为4M)。
# 物理区域的大小对于存储容量和性能都有影响。较小的物理区域大小可以提供更细粒度的存储空间分配,但也可能导致更多的碎片和额外的管理开销。而较大的物理区域大小则可以降低管理开销,但可能无法灵活地分配存储空间。
vgs(显示vg卷组简要信息)
[root@ubuntu ~]# vgs
  VG        #PV #LV #SN Attr   VSize    VFree 
  vg0         3   0   0 wz--n-    2.95g  2.95g
vgdisplay(显示卷组属性信息)
-A:仅显示活动卷组的属性
-s:使用短格式输出信息
[root@ubuntu ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg1		# 卷组(Volume Group)的名称
  System ID             		# 系统标识符,如果为空,则表示未设置。
  Format                lvm2	# 卷组的格式,这里是 “lvm2”,表示使用 LVM2 格式。
  Metadata Areas        3		# 元数据区域的数量,这里是 3,表示卷组的元数据在 3 个物理卷(Physical Volume)上分布。
  Metadata Sequence No  1		# 元数据序列号,用于跟踪元数据的变化序列。
  VG Access             read/write	# 卷组的访问权限,这里是 “read/write”,表示可读写。
  VG Status             resizable	# 卷组的状态,这里是 “resizable”,表示卷组的大小可调整。
  MAX LV                0		# 最大逻辑卷(Logical Volume)数目,这里是 0,表示没有限制。
  Cur LV                0		# 最大逻辑卷(Logical Volume)数目,这里是 0,表示没有限制。
  Open LV               0		# 当前打开的逻辑卷数目,这里是 0。
  Max PV                0		# 最大物理卷数目,这里是 0,表示没有限制。
  Cur PV                3		# 最大物理卷数目,这里是 0,表示没有限制。
  Act PV                3		# 动物理卷数目,这里是 3。
  VG Size               2.95 GiB	# 整个VG容量总大小
  PE Size               16.00 MiB	# 内部每个物理块PE大小
  Total PE              189			# 总共的PE数量
  Alloc PE / Size       0 / 0		# 分配的物理区数量和大小,这里是 0 物理区 / 0。
  Free  PE / Size       189 / 2.95 GiB	# 分配的物理块数量和大小,这里是 0 物理区 / 0。
  VG UUID               vdxENP-TMPj-TcSK-OKq4-4MIn-bNaQ-Taum81	# 卷组的唯一标识符。
vgchange(修改卷组的属性)
经常用来设备卷组是处于活动状态或者非活动状态
-a: 设置卷组的活动状态
[root@ubuntu ~]# vgchange -ay vg1 
Volume(s) in volume group "vg1" now active
[root@ubuntu ~]# vgdisplay vg1 | grep 'VG Status'
  VG Status             resizable
vgextend(向卷组中添加物理卷)
将一个或多个物理卷(PV)添加到现有卷组(VG)中,扩展卷组的存储容量。
增加卷组中的物理卷数量,以适应更多的存储需求。
使卷组能够利用新添加的物理卷所提供的额外磁盘空间。

-v 或 --verbose:显示详细的命令执行信息。
-A--autobackup y|n:指定是否自动备份卷组配置文件。默认情况下,LVM 在执行危险的操作前会自动备份配置文件。
-f 或 --force:强制执行操作,即使可能存在风险。
-b y|n 或 --bootstrapping y|n:指定是否正在引导过程中执行此操作。如果设置为 “y”,LVM 将避免在不安全的时间间隙对卷组进行更改。
添加单个物理卷到卷组:
[root@ubuntu ~]# vgextend myvg /dev/sdb1
上述命令将物理卷 /dev/sdb1 添加到名为 myvg 的卷组中。
添加多个物理卷到卷组:
[root@ubuntu ~]# vgextend myvg /dev/sdb1 /dev/sdc1 /dev/sdd1
上述命令将物理卷 /dev/sdb1、/dev/sdc1 和 /dev/sdd1 添加到名为 myvg 的卷组中。
使用 --verbose 选项显示详细的命令执行信息:
[root@ubuntu ~]# vgextend --verbose myvg /dev/sdb1
这会显示更详细的输出,包括操作的过程和结果。
vgreduce(从卷组中删除物理卷)
从卷组中移除一个或多个物理卷(PV),以减小卷组的存储容量。
减少卷组中的物理卷数量,以释放不再需要的存储空间。
使卷组不再使用指定的物理卷,从而允许对该物理卷进行其他操作。

-v 或 --verbose:显示详细的命令执行信息。
-A--autobackup y|n:指定是否自动备份卷组配置文件。默认情况下,LVM 在执行危险的操作前会自动备份配置文件。
-f 或 --force:强制执行操作,即使可能存在风险。
从卷组中移除单个物理卷:
[root@ubuntu ~]# vgreduce myvg /dev/sdb1
上述命令将物理卷 /dev/sdb1 从名为 myvg 的卷组中移除。
从卷组中移除多个物理卷:
[root@ubuntu ~]# vgreduce myvg /dev/sdb1 /dev/sdc1 /dev/sdd1
上述命令将物理卷 /dev/sdb1、/dev/sdc1 和 /dev/sdd1 从名为 myvg 的卷组中移除。
使用 --verbose 选项显示详细的命令执行信息:
[root@ubuntu ~]# vgreduce --verbose myvg /dev/sdb1
这会显示更详细的输出,包括操作的过程和结果。
vgremove(删除卷组)
可以完全删除一个卷组及其包含的逻辑卷(LV)和物理卷(PV)。
释放卷组占用的存储空间。

-v 或 --verbose:显示详细的命令执行信息。
-A--autobackup y|n:指定是否自动备份卷组配置文件。默认情况下,LVM 在执行危险的操作前会自动备份配置文件。
-f 或 --force:强制执行操作,即使可能存在风险。
删除指定的卷组:
[root@ubuntu ~]# vgremove myvg
上述命令将完全删除名为 myvg 的卷组及其相关的逻辑卷和物理卷。
使用 --verbose 选项显示详细的命令执行信息:
[root@ubuntu ~]# vgremove --verbose myvg
这会显示更详细的输出,包括操作的过程和结果。

三、LV(逻辑卷)

lvcreate(创建逻辑卷)
-L, --size:指定逻辑卷的大小。可以使用字节(B)、千字节(K)、兆字节(M)、吉字节(G)等作为后缀,如-L 1G表示1GB大小。
-n, --name:指定逻辑卷的名称。需提供逻辑卷的名称作为参数。
-C, --chunksize:指定逻辑卷的块大小。逻辑卷块是LVM分配空间的最小单位。可以用字节(B)、千字节(K)、兆字节(M)等后缀表示,如-C 4M表示4MB块大小。
-A, --alloc:指定逻辑卷的空闲空间分配策略。可以选择的选项有:contiguous(连续分配,即尽量使空闲空间在逻辑卷中连续)、cling(尽量将空闲空间与现有物理卷关联)、normal(普通分配,默认选项)。
-i, --stripes:设置逻辑卷的条带数量。逻辑卷的条带是LVM在多个物理卷上分布数据的单位。可以指定条带的数量,如-i 2表示使用2个条带。
-I, --stripesize:设置逻辑卷的条带大小。可以用字节(B)、千字节(K)、兆字节(M)等后缀表示,如-I 256K表示256KB条带大小。
--type:指定逻辑卷的类型。可以选择的选项有:linear(线性)、striped(条带化)、mirror(镜像)、raid(RAID)等。
--poolmetadatasize:指定缓存池(cache pool)的元数据大小。可以用字节(B)、千字节(K)、兆字节(M)等后缀表示。
-l, --extents:使用-l选项后,您可以指定逻辑卷的大小以LVM专有的逻辑卷磁盘空间的卷数为单位。一个体积组(Volume Group)中的逻辑卷磁盘空间被分割成多个逻辑卷扩展(Logical Extents),而-l选项允许您使用逻辑卷扩展的数量来指定逻辑卷的大小。例如,-l 100表示使用100个逻辑卷扩展作为逻辑卷的大小。
-s, --snapshot:-s选项用于创建逻辑卷的快照。快照是逻辑卷的只读副本,可用于数据备份、测试和恢复等目的。通过使用-s选项,可以在lvcreate命令中创建逻辑卷的快照。例如,lvcreate -s -n snapshots_lv -L 10G /dev/myvg/mylv表示在/dev/myvg/mylv逻辑卷上创建一个名为snapshots_lv的10GB大小的快照逻辑卷。
-p, --permission:-p选项用于指定逻辑卷的权限。逻辑卷的权限可以是r(只读)或rw(读写)。默认情况下,逻辑卷的权限为读写。使用-p选项可以将权限设置为只读。例如,lvcreate -p r -n readonly_lv -L 20G /dev/myvg/mylv表示在/dev/myvg/mylv逻辑卷上创建一个名为readonly_lv的20GB大小的只读逻辑卷。
-r, --readahead:-r选项用于设置逻辑卷的预读块数(read ahead blocks)。预读块是在访问逻辑卷数据时从磁盘读取的额外数据块。预读可以提高读取性能,特别是对于顺序读取操作。使用-r选项,您可以指定逻辑卷的预读块数。例如,lvcreate -r 1024 -n readahead_lv -L 50G /dev/myvg/mylv表示在/dev/myvg/mylv逻辑卷上创建一个名为readahead_lv的50GB大小的逻辑卷,并设置预读块数为1024。

# LE说明:
LE(Logical Extent)是逻辑卷的最小分配单元。当创建逻辑卷时,您可以指定LE的大小。LE的大小对逻辑卷的分割、操作以及可用空间的管理起着重要的作用。

当您设置LE的大小后,以下是可能会发生的情况:
1、空间分配的粒度变化:LE的大小决定了逻辑卷的空间分配的最小单位。较小的LE大小意味着较细粒度的空间分配,您可以更灵活地分配存储空间。然而,较小的LE大小也会引入一定的空间开销,因为每个LE都需要一些元数据来管理。
2、操作的粒度变化:LE的大小还决定了逻辑卷上一些操作的粒度。例如,当您执行resize、移动或者修改逻辑卷的操作时,这些操作通常以LE为单位进行。较小的LE大小允许您更细粒度地执行这些操作,但也需要更多的元数据来管理。

总的来说,设置LE大小可以影响逻辑卷的灵活性、性能和空间利用率。较小的LE大小提供更精细的控制和更高的灵活性,但可能会带来一些额外的开销。相反,较大的LE大小可能会稍微减少一些开销,但在分配和操作空间时可能不够灵活。要选择适合您需求的LE大小,可以考虑您对空间管理的需求、性能需求以及整体的空间利用情况。
[root@ubuntu ~]# lvcreate -L 1024M -n lv01 vg0 
  Logical volume "lv01" created.
[root@ubuntu ~]# lvcreate -l 60%VG -n lv02 vg0	# 60%VG,使用卷组的可用空间的60%
[root@ubuntu ~]# lvcreate -l 100%VG -n lv03 vg0	# 100%VG,使用卷组的所有可用空间

创建一个包含3个条带、条带大小为8KiB,大小为100MiB的条带化逻辑卷。逻辑卷名称由lvcreate选择。
[root@ubuntu ~]# lvcreate -i 3 -I 8 -L 100m vg00

创建一个包含两个镜像、可用大小为500MiB的RAID1逻辑卷。这个操作需要两个设备,每个镜像一个设备。RAID元数据(超级块和位图)也会包含在这两个设备上。
[root@ubuntu ~]# lvcreate --type raid1 -m1 -L 500m -n mylv vg00

创建一个包含两个镜像、可用大小为500MiB的镜像逻辑卷。这个操作需要三个设备:两个用于镜像,一个用于磁盘日志。
[root@ubuntu ~]# lvcreate --type mirror -m1 -L 500m -n mylv vg00

创建一个包含两个镜像、可用大小为500MiB的镜像逻辑卷。这个操作只需要两个设备,因为日志在内存中。
[root@ubuntu ~]# lvcreate --type mirror -m1 --mirrorlog core -L 500m -n mylv vg00

创建一个逻辑卷的写时复制快照:
[root@ubuntu ~]# lvcreate --snapshot --size 100m --name mysnap vg00/mylv

创建一个写时复制快照,大小足以覆盖原始逻辑卷大小的20%。
[root@ubuntu ~]# lvcreate -s -l 20%ORIGIN -n mysnap vg00/mylv

创建一个稀疏逻辑卷,虚拟空间为1TiB,实际空间略小于100MiB。
[root@ubuntu ~]# lvcreate --snapshot --virtualsize 1t --size 100m --name mylv vg00

在指定的物理范围上创建一个线性逻辑卷,可用大小为64MiB。
[root@ubuntu ~]# lvcreate -L 64m -n mylv vg00 /dev/sda:0-7 /dev/sdb:0-7

创建一个包含3个条带、条带大小为64KiB,可用大小为5GiB的RAID5逻辑卷,使用总共4个设备(包括一个用于校验)。
[root@ubuntu ~]# lvcreate --type raid5 -L 5G -i 3 -I 64 -n mylv vg00

使用VG中的所有可用空间,在VG的所有PV上创建一个RAID5逻辑卷(如果VG中的PV超过8个,则命令会失败,在这种情况下,必须使用-i 7来达到当前最大值,即包括校验的8个设备)。
[root@ubuntu ~]# lvcreate --config allocation/raid_stripe_all_devices=1 --type raid5 -l 100%FREE -n mylv vg00

创建一个使用2个条带,每个条带上的两个镜像的RAID10逻辑卷,可用大小为5GiB。(注意-i和-m参数的行为不同:-i指定总条带数,但-m指定镜像数,除了第一个镜像)。
[root@ubuntu ~]# lvcreate --type raid10 -L 5G -i 2 -m 1 -n mylv vg00

创建一个大小为1TiB的thin LV(mythin),在vg00中的256GiB thinpool(tpool0)中。
[root@ubuntu ~]# lvcreate --T --size 256G --name mythin vg00/tpool0

首先创建一个新的thin池(mypool),然后在其中创建一个大小为1TiB的thin LV(mylv),thin池具有100MiB的空间,使用2个条带,每个条带具有64KiB的条带大小和256KiB的块大小。
[root@ubuntu ~]# lvcreate --type thin --name mylv --thinpool mypool -V 1t -L 100m -i 2 -I 64 -c 256 vg00

创建一个thin LV(mysnap),作为另一个thin LV(thinvol)的快照(注意,不能使用size选项,否则将创建一个写时复制快照)。
[root@ubuntu ~]# lvcreate --snapshot --name mysnap vg00/thinvol

在一个只读的非活动LV(名为"origin")上创建一个thin LV(mysnap)的快照,将其作为thin快照LV的外部起点。
[root@ubuntu ~]# lvcreate --snapshot --name mysnap --thinpool mypool vg00/origin

创建一个缓存池,使用一个快速物理设备,该缓存池可以用来缓存一个逻辑卷。
[root@ubuntu ~]# lvcreate --type cache-pool -L 1G -n my_cpool vg00 /dev/fast1

创建一个缓存逻辑卷,首先在一个慢速物理设备上创建一个新的原始逻辑卷,然后将新的原始逻辑卷与现有的缓存池组合起来。
[root@ubuntu ~]# lvcreate --type cache --cachepool my_cpool -L 100G -n mylv vg00 /dev/slow1

创建一个VDO逻辑卷vdo0,其VDOPoolLV大小为10GiB,名称为vpool1。
[root@ubuntu ~]# lvcreate --vdo --size 10G --name vdo0 vg00/vpool1
lvs(显示逻辑卷简要信息)
[root@ubuntu ~]# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert                       
  lv01      vg0       -wi-a-----   1.00g  
lvdisplay(显示逻辑卷属性信息)
[root@ubuntu ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg1/lv1	# 这表示逻辑卷的路径
  LV Name                lv1	# 逻辑卷的名称
  VG Name                vg1	# 逻辑卷的名称
  LV UUID                KLTx3w-yKyv-I1j6-V12f-PtSL-06tl-Ks8LiO	# 辑卷的唯一标识符(UUID)
  LV Write Access        read/write	# 逻辑卷的写入访问权限
  LV Creation host, time ubuntu, 2023-08-13 10:27:47 +0000	# 逻辑卷的创建主机和时间
  LV Status              available	# 逻辑卷的状态,available 表示逻辑卷是可用状态
  # open                 0	# 打开逻辑卷的进程数,0 表示当前没有进程打开该逻辑卷
  LV Size                2.95 GiB	# 逻辑卷的大小
  Current LE             189	# LE是逻辑卷的最小地址单元,用于逻辑卷内部的存储和管理
  Segments               3	# 逻辑卷的段(Segments)数量,该逻辑卷由 3 个段组成
  Allocation             inherit	# 逻辑卷的空间分配策略,inherit 表示继承自卷组的分配策略。
  Read ahead sectors auto - currently set to     256	# 前预读扇区数为自动设置,且设置为 256
  Block device           253:1  # 逻辑卷对应的块设备的标识符,253:1 表示该逻辑卷的块设备标识符
lvextend(扩展逻辑卷)
-L 指定逻辑卷的大小,单位为“kKmMgGtT”字节
-l 指定逻辑卷的大小(LE数)
第一步:实现逻辑卷空间扩展
[root@ubuntu ~]# lvextend -L +10G /dev/vg1/lv02
第二步:实现文件系统的扩展
[root@ubuntu ~]# resize2fs /dev/vg1/lv02	# 针对ext系列文件系统
[root@ubuntu ~]# xfs_growfs /dev/vg1/lv02		# 针对xfs系列文件系统
lvresize(扩展逻辑卷,可识别文件系统)
-L, --size: 指定逻辑卷的新大小。可以通过添加单位来指定大小,例如 G 表示以 GB 为单位,M 表示以 MB 为单位。例如,lvresize -L +2G /dev/vg1/lv1 将逻辑卷 /dev/vg1/lv1 增加 2GB。

-l, --extents: 指定逻辑卷的新大小以 extents(区段)为单位。可以使用 + 或 - 符号表示相对大小的增加或减少。例如,lvresize -l +100 /dev/vg1/lv1 将逻辑卷 /dev/vg1/lv1 增加 100 个 extents。

-r, --resizefs: 自动调整关联的文件系统的大小以匹配逻辑卷的新大小。当逻辑卷上运行的是 ext2、ext3、ext4 或 XFS 等常见文件系统时,可以使用该选项自动调整文件系统大小。例如,lvresize -L +1G -r /dev/vg1/lv1 将逻辑卷 /dev/vg1/lv1 增加 1GB 并自动调整关联的文件系统大小。

-n, --name: 指定逻辑卷的名称。可以使用该选项来重命名逻辑卷。例如,lvresize -L +1G -n newlvname /dev/vg1/lv1 将逻辑卷 /dev/vg1/lv1 增加 1GB 并将其重命名为 newlvname。

-v, --verbose: 显示详细的操作过程和输出信息。
[root@ubuntu ~]# lvresize -r -l +10G /dev/vg1/lv01
lvremove(删除逻辑卷)
[root@ubuntu ~]# lvremove /dev/vg0/lv01 
Do you really want to remove and DISCARD active logical volume vg0/lv01? [y/n]: y
  Logical volume "lv01" successfully removed
lvreduce(收缩逻辑卷空间)
-L 指定逻辑卷的大小,单位为“kKmMgGtT”字节
-l 指定逻辑卷的大小(LE数)
lvconvert(在逻辑卷之间进行转换操作)
-v, --verbose:显示详细的操作日志。
-y, --yes:自动回答所有提问,无需手动确认。
-n, --name:指定转换后的逻辑卷名称。
-t, --type:指定要转换的逻辑卷类型,例如转换为线性、条带化、镜像等。
-m, --mirrors:指定镜像的数量。可以用于增加或减少镜像的数量。
-s, --snapshot:创建或删除快照。
--corelog:在镜像或条带逻辑卷上启用或禁用核心日志(core log)。
--alloc:指定数据分配策略,如 --alloc anywhere 或 --alloc contiguous。
--stripes:设置条带逻辑卷的条带数量。
--stripesize:设置条带逻辑卷的条带大小。
--poolmetadatasize:设置逻辑卷池的元数据大小。
--poolmetadatachunks:设置逻辑卷池的元数据块数量。
--readahead:设置逻辑卷的预读块数。
--zero:初始化逻辑卷上的数据区域为零。
--thinpool:将逻辑卷转换为薄卷池。
--poolsize:设置薄卷池的大小。
--thin:将逻辑卷转换为薄卷。
将线性逻辑卷转换为双向镜像逻辑卷:
[root@ubuntu ~]# lvconvert --type mirror --mirrors 1 vg/lvol1
将线性逻辑卷转换为双向 RAID1 逻辑卷:
[root@ubuntu ~]# lvconvert --type raid1 --mirrors 1 vg/lvol1
将镜像逻辑卷转换为使用内存日志:
[root@ubuntu ~]# lvconvert --mirrorlog core vg/lvol1
将镜像逻辑卷转换为使用磁盘日志:
[root@ubuntu ~]# lvconvert --mirrorlog disk vg/lvol1
将镜像或 RAID1 逻辑卷转换为线性逻辑卷:
[root@ubuntu ~]# lvconvert --type linear vg/lvol1
将镜像逻辑卷转换为具有相同图像数的 RAID1 逻辑卷:
[root@ubuntu ~]# lvconvert --type raid1 vg/lvol1
将线性逻辑卷转换为双向镜像逻辑卷,并从特定物理卷范围分配新范围:
[root@ubuntu ~]# lvconvert --mirrors 1 vg/lvol1 /dev/sda:0-15 /dev/sdb:0-15
将镜像逻辑卷转换为线性逻辑卷,并从特定物理卷释放物理范围:
[root@ubuntu ~]# lvconvert --type linear vg/lvol1 /dev/sda
从镜像或 RAID1 逻辑卷中拆分一个图像,使其成为新的逻辑卷:
[root@ubuntu ~]# lvconvert --splitmirrors 1 --name lv_split vg/lvol1
从 RAID1 逻辑卷中拆分一个图像,并在拆分图像保持分离的同时跟踪对 RAID1 逻辑卷的更改:
[root@ubuntu ~]# lvconvert --splitmirrors 1 --trackchanges vg/lvol1
将之前使用 --splitmirrors--trackchanges 创建的图像合并回原始的 RAID1 逻辑卷:
[root@ubuntu ~]# lvconvert --mergemirrors vg/lvol1_rimage_1
在 RAID1/4/5/6/10 逻辑卷中使用 PV /dev/sdb1 替换 PV /dev/sdf1:
[root@ubuntu ~]# lvconvert --replace /dev/sdb1 vg/lvol1 /dev/sdf1
在 RAID1 逻辑卷中使用 PV /dev/sd[b-d]1 替换为 PV /dev/sd[f-h]1[root@ubuntu ~]# lvconvert --replace /dev/sdb1 --replace /dev/sdc1 --replace /dev/sdd1 vg/lvol1 /dev/sd[fgh]1
在 RAID6 逻辑卷中将最多 2 个 PV /dev/sd[bc]1 替换为 PV /dev/sd[gh]1[root@ubuntu ~]# lvconvert --replace /dev/sdb1 --replace /dev/sdc1 vg/lvol1 /dev/sd[gh]1
将现有的逻辑卷转换为指定薄卷池中的薄逻辑卷。现有的逻辑卷用作新薄逻辑卷的外部只读源。
[root@ubuntu ~]# lvconvert --type thin --thinpool vg/tpool1 vg/lvol1
将现有的逻辑卷转换为指定薄卷池中的薄逻辑卷。现有的逻辑卷用作新薄逻辑卷的外部只读源,并将其重命名为 “external”。
[root@ubuntu ~]# lvconvert --type thin --thinpool vg/tpool1 --originname external vg/lvol1
将现有的逻辑卷转换为使用另一个指定的逻辑卷作为缓存池元数据的缓存池逻辑卷。
[root@ubuntu ~]# lvconvert --type cache-pool --poolmetadata vg/poolmeta1 vg/lvol1
将现有的逻辑卷转换为使用指定的缓存池和块大小的缓存逻辑卷。
[root@ubuntu ~]# lvconvert --type cache --cachepool vg/cpool1 -c 128 vg/lvol1
从缓存逻辑卷中分离并保留缓存池。
[root@ubuntu ~]# lvconvert --splitcache vg/lvol1
从缓存逻辑卷中分离并移除缓存池。
[root@ubuntu ~]# lvconvert --uncache vg/lvol1

四、文件系统

fsadm (检查和更改文件系统大小)
# fsadm [options] check <device>:该命令用于检查指定设备上的文件系统。
# fsadm [options] resize <device> [<new_size>[BKMGTPE]]:该命令用于更改指定设备上文件系统的大小。

# Options
-h 或 --help:显示帮助信息。
-v 或 --verbose:显示详细信息。
-e 或 --ext-offline:在进行 ext2/ext3/ext4 文件系统调整大小之前卸载文件系统。
-f 或 --force:绕过完整性检查。
-n 或 --dry-run:打印命令而不实际执行它们,用于演示运行结果。
-l 或 --lvresize:调整给定设备的大小,如果它是 LVM(逻辑卷管理器)设备。
-c 或 --cryptresize:调整给定的加密设备大小。
-y 或 --yes:自动回答任何提示为 “yes”。

# new_size
文件系统中的绝对块数,或使用后缀表示的绝对大小(以1024的幂为单位)。如果未提供 new_size,则使用整个设备。
new_size 是指要在文件系统中使用的绝对块数或绝对大小。如果使用块数表示,它代表文件系统中的块数量。如果使用大小表示,可以通过使用后缀来指定大小单位,后缀包括 K(千字节)、M(兆字节)、G(千兆字节)、T(万兆字节)、P(拍字节)、E(艾字节)。如果不提供 new_size,则该操作会使用整个设备。

# fsadm [options] check <device> - 检查设备上的文件系统使用 fsck
用例1: 检查文件系统完整性
[root@ubuntu ~]# fsadm check /dev/sda1
此命令将使用 fsck 工具检查 /dev/sda1 上的文件系统,扫描并修复其中的错误。这是一个常见的用例,用于定期检查文件系统的健康状态,以确保数据的完整性。

# fsadm [options] resize <device> [<new_size>[BKMGTPE]] - 更改设备上的文件系统大小为 new_size
用例1: 扩展文件系统大小
[root@ubuntu ~]# fsadm resize /dev/sdb1 2G
此命令将文件系统 /dev/sdb1 的大小扩展到 2GB。文件系统将被调整以适应更大的容量,允许存储更多的数据。
用例2: 缩小文件系统大小
[root@ubuntu ~]# fsadm resize /dev/sdc1 500M
此命令将文件系统 /dev/sdc1 的大小缩小到500MB。文件系统将被调整以适应更小的容量,可能用于释放空闲空间或将文件系统与其他分区进行调整。
resize2fs(扩容或缩小已卸载的ext文件系统)
-f:强制执行文件系统调整大小,而无需进行安全性检查。这个选项可以绕过某些潜在的问题,但需要谨慎使用。
-F:在执行文件系统调整大小之前,先强制执行完整性检查,并尝试修复文件系统中的错误。这可以确保在调整大小之前文件系统处于良好的状态。
-M:最小化文件系统。这个选项会尽量减小文件系统的大小,删除不再使用的块,以便有效地利用存储空间。但请注意,该操作不会缩小文件系统所在的分区。
-P:打印出执行文件系统调整大小所需的步骤,而不实际执行它们。这对于查看将会发生什么以及可能的结果非常有用。
-p:在调整大小过程中显示进度信息。这个选项会显示文件系统调整大小的进度百分比和估计剩余时间。
device:指定要调整大小的文件系统所在的设备路径。
-b|-s|new_size:用于指定新的文件系统大小。有三种选择:
-b:将新的文件系统大小指定为块数。
-s:将新的文件系统大小指定为扇区数。
new_size:将新的文件系统大小直接指定为字节数。可以使用后缀(如K、M、G、T)表示大小的单位。
-S RAID-stride:指定用于软RAID(虚拟磁盘阵列)所需的RAID步幅。这个选项通常用于性能优化。
-z undo_file:指定一个撤销文件,以便在调整大小失败时恢复到调整之前的状态。

调整文件系统大小为指定块数:
[root@ubuntu ~]# resize2fs /dev/sda1 100000
此命令将文件系统 /dev/sda1 的大小调整为 100,000 个块。文件系统将被扩展或缩小以适应指定的块数。
调整文件系统大小为指定扇区数:
[root@ubuntu ~]# resize2fs -s /dev/sdb1 50000
此命令将文件系统 /dev/sdb1 的大小调整为 50,000 个扇区。文件系统将根据指定的扇区数进行扩展或缩小。
调整文件系统大小为指定字节数:
[root@ubuntu ~]# resize2fs -b /dev/sdc1 2G
此命令将文件系统 /dev/sdc1 的大小调整为 2GB。文件系统将根据指定的字节数进行扩展或缩小。
最小化文件系统:
[root@ubuntu ~]# resize2fs -M /dev/sda2
此命令将尽量减小文件系统 /dev/sda2 的大小,以删除不再使用的块,以便最大限度地利用存储空间。
xfs_growfs(要扩展XFS文件系统)
-d:扩展数据/元数据区段。
-l:扩展日志区段。
-r:扩展实时区段。
-n:仅显示几何信息,不做任何更改。
-i:将日志从外部格式转换为内部格式。
-t:指定挂载表 (/etc/mtab) 的替代位置。
-x:将日志从内部格式转换为外部格式。
-D size:将数据/元数据区段扩展到指定的块数大小。
-L size:将日志区段扩展/缩小到指定的块数大小。
-R size:将实时区段扩展到指定的块数大小。
-e size:将实时扩展大小设置为指定的块数大小。
-m imaxpct:将 inode 最大百分比设置为指定的值。
-V:打印版本信息。

扩展XFS文件系统到分区的最大大小:
[root@ubuntu ~]# xfs_growfs /dev/sda1
这个命令将XFS文件系统扩展到 /dev/sda1 分区的最大可用大小。它会自动检测分区的可用空间并将文件系统扩展到该大小。
手动指定新的文件系统大小:
[root@ubuntu ~]# xfs_growfs -d /mnt/data
这个命令将XFS文件系统在 /mnt/data 上的数据/元数据区段扩展到分区的最大可用大小,以适应可用的空间。使用 -d 选项来指定扩展数据/元数据部分。
手动指定新的日志区段大小:
[root@ubuntu ~]# xfs_growfs -l size=2g /mnt/data
这个命令将XFS文件系统在 /mnt/data 上的日志区段扩展到2GB的大小。使用 -l 选项并指定新的大小来调整日志区段。
xfsdump(备份xfs文件系统)
对完整的文件系统进行备份,用xfsdump。他除了可以进行完整备份,还可以进行累积性备份。就是第一次使用xfsdump,是完整备份,定义为level 0,而第二次备份,则不会完整备份,而是和第一次的备份(level 0)进行比较,仅备份有差异的文件(level 1)。各个level的文件,一本存放在/var/lib/xfsdump/inventory中。

xfsdump有5个限制:

必须用root权限
只能备份已挂载的文件系统
只能备份XFS文件系统
只能用xfsrestore解释
透过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统

语法:

xfsdump [-L S_lable] [-M M_lable] [-l #] [-f 备份档] 待备份资料
xfsdump -I

参数:

-L:xfsdump会记录每次备份的session标头,这里可以填写针对此文件系统的简易说明;
-M:xfsdump可以记录存储媒体的标头,这里可以填写此媒体的简易说明。
-l:是L的小写,就是指定等级,有0~9共10个等级,默认为0,即完整备份。
-f:有点类似tar,后面接产生的文件,也可以接例如/dev/st0设备文件名或其他一般文件文件名;
-I:大写的“i”,从/var/lib/xfsdump/inventory 列出目前备份的信息状态。
#将完整备份文件名记录为 /srv/boot.dump
[root@ubuntu ~]# xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
        -----   --------    --------   --------------- ------
       备份等级   文件说明     媒体说明         备份名     来源路径

#将/dev/sdb1备份为dump_sdb1
[root@ubuntu ~]# xfsdump -f /opt/dump_sdb1 /dev/sdb1

#指定备份时免交互操作,方便后期做定时备份
#-L  :xfsdump  纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
#-M  :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
[root@ubuntu ~]# xfsdump -f /opt/dump_passwd /sdb1 -L dump_passwd -M media1

#指定只备份分区中某个目录
#-s 文件路径  只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s可以是文件或目录)
[root@ubuntu ~]# xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L dump_grub2 -M boot-grub2

[root@ubuntu ~]# xfsdump  -I   #查看备份信息与内容
xfsrestore(xfs文件系统的备份与还原)
-I:大写的“i”跟xfsdump相同的输出!可查询备份数据,包括Label名称和备份时间等;
-f:后面接的就是备份文件!企业中很有可能会接/dev/st0等磁带机!
-L:可用“-I”查询到的数据。在这个选项后输入;
-s:需要接某特定目录,也能复原某一文件或目录;
-r:如果是用文件来存储备份数据,那这个就不需要使用。如果是一个磁盘内有多个文件,需要使用它来达成累积复原;
-i:进入交互模式
[root@ubuntu ~]# xfsrestore -I  #查看备份文件数据
[root@ubuntu ~]# xfsrestore -f /srv/boot.dump -L boot_all /boot  #直接将备份数据覆盖回去

五、整体流程

设备分区
[root@ubuntu ~]# echo -e 'g\nn\n\n\n+1G\nt\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n2\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n3\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
[root@ubuntu ~]# echo -e 'n\n\n\n+1G\nt\n4\n30\np\nw\n' | fdisk /dev/sdb | sed -nr '/Disklabel type/,$p' | head -n -4
[root@ubuntu ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 82232BCA-60EF-0C45-B4EE-718EC86D776B

Device       Start     End Sectors Size Type
/dev/sdb1     2048 2099199 2097152   1G Linux LVM
/dev/sdb2  2099200 4196351 2097152   1G Linux LVM
/dev/sdb3  4196352 6293503 2097152   1G Linux LVM
/dev/sdb4  6293504 8390655 2097152   1G Linux LVM
检查系统存在的PV
[root@ubuntu ~]# pvscan
创建物理卷
[root@ubuntu ~]# pvcreate /dev/sdb{1,2,3,4}		# 将设备上的分区创建为PV
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb4" successfully created.

[root@ubuntu ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1	# 物理卷(Physical Volume)的路径和名称
  VG Name               vg1	# 物理卷所属的卷组(Volume Group)名称
  PV Size               1.00 GiB / not usable 16.00 MiB	# 这表示物理卷的大小;1G可用的物理卷空间,16M不可用的物理卷空间
  Allocatable           yes (but full)	# 该物理卷是否可供分配;yes标识可供分配,但but full标识已满,没有可用空间
  PE Size               16.00 MiB	# 这表示物理区(Physical Extent)的大小,即一次分配的最小空间单元大小。
  Total PE              63	# 这表示物理卷的总物理区数量,即物理卷被分割成了 63 个物理区
  Free PE               0	# 这表示物理卷的空闲物理区数量,即当前没有可用的空闲物理区
  Allocated PE          63	# 这表示物理卷被分配的物理区数量,即当前所有的物理区都已被分配
  PV UUID               gLrAxg-oTWT-FRqG-VoUR-XNel-2Yv0-F2aD2e	# 理卷的唯一标识符(UUID)
创建卷组
[root@ubuntu ~]# pvscan		# 创建前确认哪个PV已经使用了,哪个没有使用
  PV /dev/sdb1                      lvm2 [1.00 GiB]
  PV /dev/sdb2                      lvm2 [1.00 GiB]
  PV /dev/sdb3                      lvm2 [1.00 GiB]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
  Total: 5 [<202.00 GiB] / in use: 1 [<198.00 GiB] / in no VG: 4 [4.00 GiB]
[root@ubuntu ~]# vgcreate -s 16M vg1 /dev/sdb{1,2,3}	# 将/dev/sdb1-3创建为一个VG,并指定PE(物理块)为16M
  Volume group "vg1" successfully created
[root@ubuntu ~]# vgscan 	# 确认 vg1 这个卷组
  Found volume group "vg1" using metadata type lvm2
[root@ubuntu ~]# pvscan 	# 确认有三个设备已经被使用到vg1卷组中
  PV /dev/sdb1   VG vg1             lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb2   VG vg1             lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb3   VG vg1             lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
[root@ubuntu ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg1		# 卷组(Volume Group)的名称
  System ID             		# 系统标识符,如果为空,则表示未设置。
  Format                lvm2	# 卷组的格式,这里是 “lvm2”,表示使用 LVM2 格式。
  Metadata Areas        3		# 元数据区域的数量,这里是 3,表示卷组的元数据在 3 个物理卷(Physical Volume)上分布。
  Metadata Sequence No  1		# 元数据序列号,用于跟踪元数据的变化序列。
  VG Access             read/write	# 卷组的访问权限,这里是 “read/write”,表示可读写。
  VG Status             resizable	# 卷组的状态,这里是 “resizable”,表示卷组的大小可调整。
  MAX LV                0		# 最大逻辑卷(Logical Volume)数目,这里是 0,表示没有限制。
  Cur LV                0		# 最大逻辑卷(Logical Volume)数目,这里是 0,表示没有限制。
  Open LV               0		# 当前打开的逻辑卷数目,这里是 0。
  Max PV                0		# 最大物理卷数目,这里是 0,表示没有限制。
  Cur PV                3		# 最大物理卷数目,这里是 0,表示没有限制。
  Act PV                3		# 动物理卷数目,这里是 3。
  VG Size               2.95 GiB	# 整个VG容量总大小
  PE Size               16.00 MiB	# 内部每个物理块PE大小
  Total PE              189			# 总共的PE数量
  Alloc PE / Size       0 / 0		# 分配的物理区数量和大小,这里是 0 物理区 / 0。
  Free  PE / Size       189 / 2.95 GiB	# 分配的物理块数量和大小,这里是 0 物理区 / 0。
  VG UUID               vdxENP-TMPj-TcSK-OKq4-4MIn-bNaQ-Taum81	# 卷组的唯一标识符。
将卷据设置为活动状态
1、为什么要将卷组设置为活动状态?
# 通过将卷组设置为活动状态,可以确保卷组中的逻辑卷可供使用,并准备好接收使用该卷组的应用程序或文件系统的读写请求。设置为活动状态意味着可以对卷组进行管理和操作,例如创建、删除逻辑卷以及执行相关的逻辑卷管理任务。
# 活动状态并不是卷组创建后自动处于的默认状态,而是在需要使用卷组之前手动激活的。这样可以提供更多的灵活性和控制,以防止意外修改或访问卷组中的逻辑卷。
2、设置为活动状态以后,后续操作(扩展,删除,维护),还需要做什么吗?
# 将卷组设置为活动状态(active)后,你可以随时进行扩展和删除操作,无需再次设置回非活动状态。活动状态只是表示卷组可以进行操作,并不会限制你对其进行扩展或删除操作。
[root@ubuntu ~]# vgchange -ay vg1 
logical volume(s) in volume group "vg1" now active

[root@ubuntu ~]# vgdisplay vg1 | grep 'VG Status'	# 当卷组的状态显示为 “active, resizable” 时,表示卷组当前处于活动状态。
  VG Status             resizable	# 如果状态显示为 “not available” 或其他状态,那么卷组可能没有被激活或存在其他问题。
创建逻辑卷
[root@ubuntu ~]# vgdisplay vg1 
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               2.95 GiB
  PE Size               16.00 MiB
  Total PE              189		# PE是物理卷的最小地址单元,用于物理卷的存储和管理
  Alloc PE / Size       0 / 0   
  Free  PE / Size       189 / 2.95 GiB
  VG UUID               vdxENP-TMPj-TcSK-OKq4-4MIn-bNaQ-Taum81
  [root@ubuntu ~]# lvcreate -l 189 -n lv1 vg1
WARNING: ext4 signature detected on /dev/vg1/lv1 at offset 1080. Wipe it? [y/n]: Y
  Wiping ext4 signature on /dev/vg1/lv1.
  Logical volume "lv1" created.
[root@ubuntu ~]# lvdisplay /dev/vg1/lv1 
  --- Logical volume ---
  LV Path                /dev/vg1/lv1	# 这表示逻辑卷的路径
  LV Name                lv1	# 逻辑卷的名称
  VG Name                vg1	# 逻辑卷的名称
  LV UUID                KLTx3w-yKyv-I1j6-V12f-PtSL-06tl-Ks8LiO	# 辑卷的唯一标识符(UUID)
  LV Write Access        read/write	# 逻辑卷的写入访问权限
  LV Creation host, time ubuntu, 2023-08-13 10:27:47 +0000	# 逻辑卷的创建主机和时间
  LV Status              available	# 逻辑卷的状态,available 表示逻辑卷是可用状态
  # open                 0	# 打开逻辑卷的进程数,0 表示当前没有进程打开该逻辑卷
  LV Size                2.95 GiB	# 逻辑卷的大小
  Current LE             189	# LE是逻辑卷的最小地址单元,用于逻辑卷内部的存储和管理
  Segments               3	# 逻辑卷的段(Segments)数量,该逻辑卷由 3 个段组成
  Allocation             inherit	# 逻辑卷的空间分配策略,inherit 表示继承自卷组的分配策略。
  Read ahead sectors auto - currently set to     256	# 前预读扇区数为自动设置,且设置为 256
  Block device           253:1  # 逻辑卷对应的块设备的标识符,253:1 表示该逻辑卷的块设备标识符
[root@ubuntu ~]# ll /dev/vg1/lv1
lrwxrwxrwx 1 root root 7 Aug 13 10:27 /dev/vg1/lv1 -> ../dm-1
# 解释如下:
1、抽象化存储:逻辑卷的目的之一是将对物理存储的操作抽象化,使其对上层应用程序或文件系统是透明的。通过使用映射和引用,可以隐藏底层物理存储的细节,使应用程序和用户只需要关注逻辑卷的大小和属性。
2、灵活的大小调整:逻辑卷可以在需要时动态调整大小,而无需改变上层应用程序或文件系统的配置。通过在物理存储上创建逻辑卷、物理卷和卷组之间的映射,可以轻松地扩展或收缩逻辑卷的容量,而无需重新配置其他组件。
3、管理多个物理设备:逻辑卷可以由多个物理设备组成,例如多个硬盘驱动器或分区。通过使用映射和引用,可以将多个物理设备组合为一个逻辑卷,提供更大的存储空间和冗余性。
4、管理数据分布和性能:通过逻辑卷映射和引用,可以将数据分布在多个物理设备上,以提高存储系统的性能和吞吐量。例如,可以使用条带化(striping)将数据均匀分布到多个物理设备上,以实现并行读写操作。
物理卷组的PE和逻辑卷的LE
LE是逻辑卷的最小地址单元,用于逻辑卷内部的存储和管理;PE是物理卷的最小地址单元,用于物理卷的存储和管理。LE和PE之间的大小应该一致或者是整数倍的关系,以便进行正确的映射和操作。
1、逻辑卷(Logical Volume)由多个LE组成,而且LE的大小是固定的。
2、物理卷(Physical Volume)由多个PE组成,而且PE的大小是固定的。
3、当逻辑卷扩展时,LVM会自动分配更多的LE来填充逻辑卷,以增加其容量。
4、当物理卷扩展时,LVM会自动分配更多的PE来填充物理卷,以增加其容量。
5、LE和PE之间的大小应该一致或者是整数倍的关系,以便逻辑卷和物理卷之间的映射关系保持一致。
格式化逻辑卷,并且挂载
[root@ubuntu ~]# mkfs.ext4 /dev/vg1/lv1 	# 创建ext4文件系统
[root@ubuntu ~]# mkdir /mnt/data	# 创建挂载目录
[root@ubuntu ~]# tail -n1 /etc/fstab
UUID=800bbf4e-2333-4d5f-a3af-abe6426ce4bf	/mnt/data	ext4	defaults	0 0
# 将创建完后的文件系统的UUID和挂载目录写入到/etc/fstab文件,实现持久挂载
[root@ubuntu ~]# mount -a
[root@ubuntu ~]# df /mnt/data
Filesystem          1K-blocks  Used Available Use% Mounted on
/dev/mapper/vg1-lv1   2973368    24   2802132   1% /mnt/data
# 逻辑卷说明:
一个逻辑卷可以挂载到多个目录中,如果多个逻辑卷挂载至一个目录中,那么目录中之前的文件会被隐藏,只会显示最后挂载逻辑卷中的文件。
扩展物理卷
# 提前备份数据
1、检查系统是否有物理卷未使用
[root@ubuntu ~]# pvscan 
  PV /dev/sdb1   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb2   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb3   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
2、再次增加几个物理卷
[root@ubuntu ~]# echo -e 'g\nn\n\n\n+1G\np\nw\n' | fdisk /dev/sdc	# 创建分区
[root@ubuntu ~]# pvcreate /dev/sdc1		# 将分区创建为物理卷
  Physical volume "/dev/sdc1" successfully created.
[root@ubuntu ~]# pvscan		# 查看新创建物理卷是否存在
  PV /dev/sdb1   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb2   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb3   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
  PV /dev/sdc1                      lvm2 [1.00 GiB]

# 创建物理卷为何要分区?
1、空间管理:物理设备的整体空间可能超出所需的物理卷大小。通过进行分区,可以将设备的空间划分为较小的部分,使每个分区都可以用作独立的物理卷。这样可以更好地管理和利用设备的空间,将其分配给不同的逻辑卷或卷组。
2、数据隔离:分区可以实现数据的逻辑隔离。通过将不同的数据存储在不同的分区中,可以避免数据交叉和冲突的问题,提高数据的安全性和可管理性。
3、灾难恢复:分区可以简化灾难恢复的过程。当一个分区发生问题时,只需恢复该分区的数据,而不影响其他分区。这有助于减少数据丢失的风险和提高恢复的效率。
4、不同的需求:通过将设备分区,可以根据不同的需求或用途将不同的分区格式化为不同的文件系统类型。例如,一个分区可以格式化为ext4文件系统用于存储操作系统文件,另一个分区可以格式化为XFS文件系统用于存储数据库文件。
5、硬件限制:某些硬件设备要求对其进行分区才能使用。例如,某些磁盘阵列控制器可能要求将其硬盘驱动器分区为逻辑驱动器,然后才能创建物理卷和逻辑卷。
扩展卷组
# 提前备份数据
[root@ubuntu ~]# vgs	# 无扩展之前
  VG        #PV #LV #SN Attr   VSize    VFree 
  vg1         3   1   0 wz--n-    2.95g     0 
[root@ubuntu ~]# pvscan		# 查看新创建物理卷是否存在
  PV /dev/sdb1   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb2   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb3   VG vg1             lvm2 [1008.00 MiB / 0    free]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
  PV /dev/sdc1                      lvm2 [1.00 GiB]
[root@ubuntu ~]# vgextend vg1 /dev/sdb4 /dev/sdc1 	# 将剩余的两个物理卷分给vg1卷组
  Volume group "vg1" successfully extended
[root@ubuntu ~]# vgdisplay vg1 	# 扩展之后
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        5
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                5
  Act PV                5
  VG Size               4.92 GiB
  PE Size               16.00 MiB
  Total PE              315
  Alloc PE / Size       189 / 2.95 GiB
  Free  PE / Size       126 / <1.97 GiB
  VG UUID               vdxENP-TMPj-TcSK-OKq4-4MIn-bNaQ-Taum81
[root@ubuntu ~]# vgs	# 扩展之后
  VG        #PV #LV #SN Attr   VSize    VFree 
  vg1         5   1   0 wz--n-    4.92g <1.97g
扩展逻辑卷
# 提前备份数据
[root@ubuntu ~]# vgdisplay vg1 
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        5
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                5
  Act PV                5
  VG Size               4.92 GiB	# 总共4.92G
  PE Size               16.00 MiB
  Total PE              315
  Alloc PE / Size       189 / 2.95 GiB		# 已分配出去2.95G
  Free  PE / Size       126 / <1.97 GiB		# 剩余1.92G
  VG UUID               vdxENP-TMPj-TcSK-OKq4-4MIn-bNaQ-Taum81
[root@ubuntu ~]# lvdisplay /dev/vg1/lv1 
  --- Logical volume ---
  LV Path                /dev/vg1/lv1	# 这表示逻辑卷的路径
  LV Name                lv1	# 逻辑卷的名称
  VG Name                vg1	# 逻辑卷的名称
  LV UUID                KLTx3w-yKyv-I1j6-V12f-PtSL-06tl-Ks8LiO	# 辑卷的唯一标识符(UUID)
  LV Write Access        read/write	# 逻辑卷的写入访问权限
  LV Creation host, time ubuntu, 2023-08-13 10:27:47 +0000	# 逻辑卷的创建主机和时间
  LV Status              available	# 逻辑卷的状态,available 表示逻辑卷是可用状态
  # open                 0	# 打开逻辑卷的进程数,0 表示当前没有进程打开该逻辑卷
  LV Size                2.95 GiB	# 逻辑卷的大小
  Current LE             189	# LE是逻辑卷的最小地址单元,用于逻辑卷内部的存储和管理
  Segments               3	# 逻辑卷的段(Segments)数量,该逻辑卷由 3 个段组成
  Allocation             inherit	# 逻辑卷的空间分配策略,inherit 表示继承自卷组的分配策略。
  Read ahead sectors auto - currently set to     256	# 前预读扇区数为自动设置,且设置为 256
  Block device           253:1  # 逻辑卷对应的块设备的标识符,253:1 表示该逻辑卷的块设备标识符
[root@ubuntu ~]# df /mnt/data
Filesystem          1K-blocks  Used Available Use% Mounted on
/dev/mapper/vg1-lv1   2973368    24   2802132   1% /mnt/data
==============================================================================================================
[root@ubuntu ~]# lvresize -L +1G -r /dev/vg1/lv1 	# 将逻辑卷 /dev/vg1/lv1 增加 1GB 并自动调整关联的文件系统大小。
  Size of logical volume vg1/lv1 changed from 2.95 GiB (189 extents) to 3.95 GiB (253 extents).
  Logical volume vg1/lv1 successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/vg1-lv1 is mounted on /mnt/data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg1-lv1 is now 1036288 (4k) blocks long.
==============================================================================================================
[root@ubuntu ~]# lvdisplay /dev/vg1/lv1 
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                KLTx3w-yKyv-I1j6-V12f-PtSL-06tl-Ks8LiO
  LV Write Access        read/write
  LV Creation host, time ubuntu, 2023-08-13 10:27:47 +0000
  LV Status              available
  # open                 1
  LV Size                3.95 GiB
  Current LE             253
  Segments               5
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
[root@ubuntu ~]# df /mnt/data/
Filesystem          1K-blocks  Used Available Use% Mounted on
/dev/mapper/vg1-lv1   4002720    24   3791508   1% /mnt/data

# 扩展
如果使用lvextend进行扩展,则不会同步至ext或xfs等其它类型的文件系统,需要使用文件系统专用工具进行同步。
第一步:实现逻辑卷空间扩展
[root@ubuntu ~]# lvextend -L +10G /dev/vg1/lv1
第二步:实现文件系统的扩展
[root@ubuntu ~]# resize2fs /dev/vg1/lv1	# 针对ext系列文件系统
[root@ubuntu ~]# xfs_growfs /dev/vg1/lv1		# 针对xfs系列文件系统


# 扩展逻辑卷:
如果逻辑卷已经被扩展,并且文件系统也自动调整为适应新大小(例如通过在线扩展功能),则只需要执行 lvresize -r -L 1G /dev/vg1/lv1 命令即可。
如果逻辑卷已被扩展,但文件系统没有自动调整大小,您可以先执行 lvresize -L 1G /dev/vg1/lv1 命令来调整逻辑卷的大小,然后再执行 resize2fs /dev/vg1/lv1 命令来调整文件系统的大小。
# 缩小逻辑卷:
在缩小逻辑卷之前,首先需要调整文件系统的大小,以确保它适应逻辑卷的新大小。因此,需要先执行 resize2fs /dev/vg1/lv1 1G 命令来缩小文件系统。
然后,执行 lvresize -r -L 1G /dev/vg1/lv1 命令来调整逻辑卷的大小并同时调整文件系统的大小。
缩减逻辑卷
# 提前备份数据
[root@ubuntu ~]# df -h /mnt/data
[root@ubuntu ~]# umount /mnt/data 	# 卸载
[root@ubuntu ~]# 
[root@ubuntu ~]# e2fsck -f /dev/vg1/lv1 # 扫描并检测文件系统的元数据,检查文件和目录的指针,验证和恢复损坏的数据结构,确保文件系统的一致性。
[root@ubuntu ~]# resize2fs /dev/vg1/lv1 1G	# 调整文件系统大小
[root@ubuntu ~]# mount /dev/vg1/lv1 /mnt/data	# 挂载
[root@ubuntu ~]# df -h /mnt/data	# 查看挂载情况
[root@ubuntu ~]# lvresize -r -L 1G /dev/vg1/lv1	# 调整逻辑卷大小
[root@ubuntu ~]# lvdisplay /dev/vg1/lv1 
resize2fs和lvresize命令的功能和区别:
# resize2fs 用于调整文件系统的大小,而 lvresize 用于调整逻辑卷的大小。
缩减:
需要首先调整文件系统的大小resize2fs,然后调整逻辑卷的大小lvresize,这样可以确保文件系统与逻辑卷的大小保持同步。
扩展:
需要首先调整逻辑卷的大小lvresize,然后调整文件系统的大小resize2fs,这样可以确保文件系统与逻辑卷的大小保持同步。

1、resize2fs:resize2fs 是用于调整 ext4 和 ext3 文件系统大小的命令。它不会直接对逻辑卷进行调整,而是针对文件系统本身进行操作。它会调整文件系统的大小以适应所提供的大小参数(例如允许扩展或缩小文件系统)。该命令会修改文件系统的元数据来反映其新的大小,并允许使用更多或更少的存储空间。但是,它并不会修改逻辑卷本身的大小。
2、lvresize:lvresize 是逻辑卷管理器(LVM)提供的命令,用于调整逻辑卷的大小。它可以增加或减小逻辑卷的大小,从而为文件系统、数据库或其他应用程序提供更多或更少的存储空间。lvresize 命令会直接影响逻辑卷,修改逻辑卷的元数据来反映其新的大小。
需要注意的是,调整文件系统大小时,需要首先调整逻辑卷的大小,然后再使用 resize2fs 命令来调整文件系统的大小以适应逻辑卷的变化。这样可以确保文件系统与逻辑卷的大小保持同步。

# 扩展逻辑卷:
如果逻辑卷已经被扩展,并且文件系统也自动调整为适应新大小(例如通过在线扩展功能),则只需要执行 lvresize -r -L 1G /dev/vg1/lv1 命令即可。
如果逻辑卷已被扩展,但文件系统没有自动调整大小,您可以先执行 lvresize -L 1G /dev/vg1/lv1 命令来调整逻辑卷的大小,然后再执行 resize2fs /dev/vg1/lv1 命令来调整文件系统的大小。
# 缩小逻辑卷:
在缩小逻辑卷之前,首先需要调整文件系统的大小,以确保它适应逻辑卷的新大小。因此,需要先执行 resize2fs /dev/vg1/lv1 1G 命令来缩小文件系统。
然后,执行 lvresize -r -L 1G /dev/vg1/lv1 命令来调整逻辑卷的大小并同时调整文件系统的大小。

# 以上是针对ext系列文件系统

# 下面是针对xfs文件系统;(请注意,xfs文件系统不支持缩减,请提前备份好数据);无论扩展还是缩减,都要提前完整备份一次数据
[root@ubuntu ~]# apt install xfsdump		# 下载xfs文件系统备份工具
[root@ubuntu ~]# xfsdump -f data.img /mnt/data	# 备份数据
[root@ubuntu ~]# umount /mnt/data	# 卸载文件系统
[root@ubuntu ~]# lvreduce -L 1G /dev/vg1/lv1	# 收缩空间
[root@ubuntu ~]# mkfs.xfs -f /dev/vg1/lv1 	# 重新创建xfs文件系统
[root@ubuntu ~]# mount /dev/vg1/lv1 /mnt/data	# 挂载文件系统
[root@ubuntu ~]# xfsrestore -f data.img /mnt/data	# 还原文件系统
移除某个卷组中的某个物理设备
[root@ubuntu ~]# vgdisplay vg1	# 查看卷组信息
[root@ubuntu ~]# lvdisplay 	# 查看所有逻辑卷信息
[root@ubuntu ~]# pvdisplay	# 查看物理卷信息
# 备份数据
[root@ubuntu ~]# umount /mnt/data 	# 卸载逻辑卷
[root@ubuntu ~]# e2fsck -f /dev/vg1/lv1 	# 检查并修复文件系统
[root@ubuntu ~]# resize2fs /dev/vg1/lv1 500M	# 调整文件系统大小
[root@ubuntu ~]# lvresize -r -L 500M /dev/vg1/lv1 	# 缩减逻辑卷大小
# 注意:在缩减物理卷的大小之前,确保该物理卷上没有数据或已被迁移到其他物理卷上。
[root@ubuntu ~]# pvresize --setphysicalvolumesize 1G /dev/sdb4 /dev/sdc1 	# 缩减物理卷大小
[root@ubuntu ~]# vgreduce vg1 /dev/sdb4 /dev/sdc1 	# 从卷组中移除缩减后的物理卷
[root@ubuntu ~]# mount /dev/vg1/lv1 /mnt/data
[root@ubuntu ~]# df -h /mnt/data/
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg1-lv1  436M   24K  402M   1% /mnt/data
# 最后恢复数据
移除物理卷某个物理设备
[root@ubuntu ~]# vgdisplay vg1	# 查看卷组信息
[root@ubuntu ~]# lvdisplay 	# 查看所有逻辑卷信息
[root@ubuntu ~]# pvdisplay	# 查看物理卷信息
# 备份数据
[root@ubuntu ~]# umount /mnt/data 	# 卸载逻辑卷
[root@ubuntu ~]# e2fsck -f /dev/vg1/lv1 	# 检查并修复文件系统
[root@ubuntu ~]# resize2fs /dev/vg1/lv1 500M	# 调整文件系统大小
[root@ubuntu ~]# lvresize -r -L 500M /dev/vg1/lv1 	# 缩减逻辑卷大小
# 注意:在缩减物理卷的大小之前,确保该物理卷上没有数据或已被迁移到其他物理卷上。
[root@ubuntu ~]# pvresize --setphysicalvolumesize 1G /dev/sdb4 /dev/sdc1 	# 缩减物理卷大小
[root@ubuntu ~]# vgreduce vg1 /dev/sdb4 /dev/sdc1 	# 从卷组中移除缩减后的物理卷
[root@ubuntu ~]# pvremove /dev/sdb4 /dev/sdc1	# 删除物理卷物理设备/dev/sdb4 /dev/sdc1
跨主机迁移卷组
[root@ubuntu ~]# umount vg0	# 卸载所有已经挂载的逻辑卷
[root@ubuntu ~]# vgchange -a n vg0	# 禁用卷组
[root@ubuntu ~]# lvdisplay
[root@ubuntu ~]# vgexport vg0	# 导出卷组
[root@ubuntu ~]# pvscan
[root@ubuntu ~]# vgdisplay
[root@ubuntu ~]# vgimport vg0	# 拆下旧的硬盘然后插入目标计算机中,导入卷组
[root@ubuntu ~]# vgchange -ay vg0	# 启用卷组
[root@ubuntu ~]# mkdir directory		# 创建挂载点
[root@ubuntu ~]# mount	# 挂载
逻辑卷快照
# 工作原理:
1、创建快照:在创建逻辑卷快照时,会记录源逻辑卷的状态,并创建一个与源逻辑卷相同的元数据结构(只包含元数据信息,不包含实际数据)。
2、写时复制:随着源逻辑卷的变化,新写入的数据不会直接写入快照,而是会被复制到新的块中,以保持源逻辑卷和快照之间数据的独立性。
3、快照数据存储:快照块以及变化的数据会被存储在其他位置(快照卷)中,而不是直接写入源逻辑卷。
# 特点:
1、数据保护:逻辑卷快照是通过记录源逻辑卷的状态来实现的,因此在源逻辑卷数据损坏或删除后,可以使用快照来还原数据。
2、快速创建:逻辑卷快照的创建速度较快,通常只需记录元数据信息,不会立即复制源逻辑卷的所有数据。
3、存储效率:逻辑卷快照只存储源逻辑卷和快照之间的变化数据,因此占用的存储空间相对较小。
4、需要较大的存储空间:虽然快照只存储源逻辑卷和快照之间的差异数据,但如果源逻辑卷的数据变化很大,快照所需的存储空间也会增加。
5、有限的保留时间:快照的保留时间是有限的,超过一定时间或达到预设的存储空间限制后,需要删除旧的快照。
# 实现过程:
1、逻辑卷快照的实现通常需要以下步骤:
2、创建快照卷:创建一个用于存储快照数据的快照卷。
3、记录源逻辑卷状态:记录源逻辑卷的当前状态,包括逻辑卷的元数据信息。
4、写时复制:随着源逻辑卷数据的变化,将新写入的数据复制到快照卷中的新块中,而不是直接覆盖源逻辑卷的原始数据。
5、管理快照:根据需求管理快照,包括设置保留时间、限制存储空间、删除旧的快照等操作。
# 创建快照
[root@ubuntu ~]# lvcreate -l 64 -s -p r -n ext_snapshot /dev/vg1/lv1	# 针对ext系列文件系统的逻辑卷快照
# -l 64:设置区块LE大小;-s:创建快照;-p r:设置快照属性为只读;ext_snapshot:快照名字;/dev/vg1/lv1:快照路径
[root@ubuntu ~]# lvcreate -l 64 -s -n xfs_snapshot /dev/vg1/lv2		# 针对xfs文件系统逻辑卷快照
# -l 64:设置区块LE大小;-s:创建快照;xfs_snapshot:快照名字;/dev/vg1/lv1:快照路径
[root@ubuntu ~]# mount /dev/vg1/ext_snapshot /mnt/ext_snap		# ext系列挂载,由于已经设置了只读,所及提示挂载为只读
[root@ubuntu ~]# mount -o ro,nouuid /dev/vg1/xfs_snapshot /mnt/xfs_snap		# xfs文件系统挂载,-o ro,nouuid为只读
[root@ubuntu ~]# df -H
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/vg1-lv2                112M  7.0M  105M   7% /mnt/xfs
/dev/mapper/vg1-lv1                457M   25k  421M   1% /mnt/data
/dev/mapper/vg1-xfs_snapshot       112M  263k  112M   1% /mnt/xfs_snap
/dev/mapper/vg1-ext_snapshot       457M   25k  421M   1% /mnt/ext_snap
# 还原快照
[root@ubuntu ~]# umount /dev/vg1/lv1
[root@ubuntu ~]# umount /dev/vg1/ext_snapshot
[root@ubuntu ~]# lvconvert --merge /dev/vg1/ext_snapshot
[root@ubuntu ~]# umount /dev/vg1/lv2
[root@ubuntu ~]# umount /dev/vg1/xfs_snapshot
[root@ubuntu ~]# lvconvert --merge /dev/vg1/xfs_snapshot

# 删除快照
[root@ubuntu ~]# umount /dev/vg1/ext_snapshot
[root@ubuntu ~]# lvremove /dev/vg1/ext_snapshot
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值