我有一个驱动器,sda。它有两个分区:
sda1: /boot
sda2: LVM managed in Volume Group volgrp01
volgrp01 包含以下逻辑卷:
lv_root (30 GB)
lv_swap (8 GB)
lv_scratch (430 GB)
我想要做的是将 lv_scratch 减少到 50 GB,然后将新释放的 380 GB 重新分配到新分区 sda3(然后我将其添加到另一个卷组)。
我附上了我想要的前后图像。我正处于学习 LVM 的过程中,虽然我可以理解在卷组中调整逻辑卷大小的想法,但我不确定如何将该空间重新分配到新分区中。
我正在使用 RHEL6。
答案1
步骤1: 进行备份。
我知道,大多数人都会跳过这一步,但如果你搞砸了,你所做的更改可能会导致重大数据丢失,而且你正在从互联网上随机陌生人那里获得指导。 你对您的数据安全负责。我不负责。
第2步: 缩小文件系统lv_scratch
。如果是 ext2/3/4 文件系统,请将其卸载并使用resize2fs
;如果是其他文件系统,则需要查找有关调整该类型文件系统大小的文档。
例如:
resize2fs /dev/volgrp01/lv_scratch 50G
完成后(假设您使用的是resize2fs
),它会告诉您文件系统的新大小(以字节为单位)。记下该数字,因为您可以在下一步中使用它进行安全检查。
步骤3: 使用 缩小逻辑卷lvreduce
。
- 如果想要简单一点,就用
lvreduce --size 50G volgrp01/lv_scratch
。 - 如果您要格外小心,不要将 LV 缩小到小于其包含的文件系统的大小,请使用检查卷组的物理扩展大小
vgdisplay volgrp01
,并计算需要多少个物理扩展来容纳文件系统的字节大小(使用 1MB =1048576 字节)。然后使用选项--extents
而不是 来指定该数字--size 50G
。
或者,您可以跳过步骤 1,而使用lvreduce
的-r
选项自动调整文件系统大小。这可能更容易,但我没有亲身体验过,不知道它有多可靠。
此时我建议运行fsck -f
一下/dev/volgrp01/vg_scratch
以确保它完好无损。如果您收到任何有关“访问超出设备范围”的错误,则意味着您将 LV 缩小了太多,需要lvextend
先缩小它才能继续。
步骤4: 使用 缩小物理体积pvresize
。
pvresize --setphysicalvolumesize 88G /dev/sda2
您不需要在此处进行额外的安全检查,因为系统pvresize
会拒绝将物理卷缩小到对于您现有的逻辑卷来说太小的大小。但是,如果您的其他 LV 的大小不是 1GB 的整数倍,则 88G 可能太小,您可能需要使用其他值。
步骤5:sda2
使用 缩小分区fdisk
。
运行fdisk /dev/sda
,并在其提示符下运行p
以查看现有分区。记下分区的起始扇区号sda2
。然后删除sda2
分区(这不会触及实际数据,只会删除其开始和结束位置的记录),并sda2
使用相同的起始扇区(这很重要)大小为 88G。分区的类型代码应为8e
“Linux LVM”。
如果您想要格外小心 — — 我建议您这样做,特别是如果您必须指定与之前不同的大小pvresize
— — 检查物理卷的 PE 大小和总 PE pvdisplay /dev/sda2
,然后将它们相乘以找到物理卷的字节大小(再次使用 1MB = 1048576 字节)。然后从新sda2
分区的结束扇区号中减去其起始扇区号,加 1 以便计算最后一个扇区,然后乘以磁盘的扇区大小(应该是 512 或 4096 字节)。确保两个结果匹配。
现在创建新sda3
分区,保存更改并退出fdisk
。如果您收到需要重新启动才能使更改生效的消息,请重新启动。
答案2
不确定它是否会起作用 - 我只增加了 pv。无论如何,除非您有可读的备份,否则不要在有价值的数据上尝试它。
使用 FS 特定工具(如果有)调整 lv_scratch 上的 FS 大小
lvresize -L 50G /dev/volgrp01/lv_scratch
pvresize --setphysicalvolumesize 88G /dev/sda2
调整 /dev/sda2 的大小(不确定是否可以使用 parted/cfdisk 等,可能需要其他分区编辑器)
创建新的分区、新的 pv、创建卷组等。
调整大小时请仔细检查所有数字,因为如果您将逻辑卷或物理卷的缩小幅度超过 FS,则最终可能会导致 FS 损坏和数据丢失,通常最好留下一些未使用的空间以免造成混淆。