卷管理:如何将空间从一个分区移动到另一个分区?

卷管理:如何将空间从一个分区移动到另一个分区?

我正在设置一个 redhat ec2 实例,默认情况下我正在使用的软件(称为格雷达)在连接到实例的两个 500g ebs 存储设备上创建了以下卷:

$ lvs
  LV        VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  storetmp  rootrhel  -wi-ao----   20.00g                                                    
  varlog    rootrhel  -wi-ao----  <20.00g                                                    
  store     storerhel -wi-ao---- <348.80g                                                    
  transient storerhel -wi-ao----  <87.20g 

$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/xvda2                       500G  1.4G  499G   1% /
devtmpfs                          16G     0   16G   0% /dev
tmpfs                             16G     0   16G   0% /dev/shm
tmpfs                             16G   17M   16G   1% /run
tmpfs                             16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/storerhel-store      349G   33M  349G   1% /store
/dev/mapper/storerhel-transient   88G   33M   88G   1% /transient
/dev/mapper/rootrhel-storetmp     20G   33M   20G   1% /storetmp
/dev/mapper/rootrhel-varlog       20G   35M   20G   1% /var/log
tmpfs                            3.2G     0  3.2G   0% /run/user/1000

我需要storetmp100克。如何将 80g 存储空间从 移动storestoretmp

我似乎还需要将一些空间从 xvdb3 转移到 xvdb2:

# lsblk
NAME                    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
xvda                    202:0    0   500G  0 disk 
├─xvda1                 202:1    0     1M  0 part 
└─xvda2                 202:2    0   500G  0 part /
xvdb                    202:16   0   500G  0 disk 
├─xvdb1                 202:17   0    24G  0 part [SWAP]
├─xvdb2                 202:18   0    40G  0 part 
│ ├─rootrhel-varlog     253:2    0    20G  0 lvm  /var/log
│ └─rootrhel-storetmp   253:3    0    20G  0 lvm  /storetmp
└─xvdb3                 202:19   0   436G  0 part 
  ├─storerhel-store     253:0    0 348.8G  0 lvm  /store
  └─storerhel-transient 253:1    0  87.2G  0 lvm  /transient

请注意,这些目录当前正在由盒子上运行的软件使用,并且不为空,因此删除它们是不可能的,我需要即时完成此操作:

$ ls -l /dev/mapper/storerhel-transient
lrwxrwxrwx 1 root root 7 Aug 10 16:00 /dev/mapper/storerhel-transient -> ../dm-3
$ ls -l /dev/mapper/rootrhel-varlog 
lrwxrwxrwx 1 root root 7 Aug 10 16:00 /dev/mapper/rootrhel-varlog -> ../dm-0
$ ls -l /dev/mapper/storerhel-store 
lrwxrwxrwx 1 root root 7 Aug 17 04:10 /dev/mapper/storerhel-store -> ../dm-2

答案1

EC2 EBS 中额外的 80 GB 费用每月不到 12 美元。在线操作可能会花费您一个多小时的工作时间,并且如果出现问题,还会有停机的风险 - 这对您来说值多少钱?

支付一些额外的容量,将其作为第三个磁盘添加到您的实例中xvdc,将其初始化为 LVM PV(您甚至不必在其上放置分区表:就pvcreate /dev/xvdc足够了)。然后将新的 PV 添加到您的rootrhelVG ( vgextend rootrhel /dev/xvdc),现在您可以/storetmp使用增加的容量来扩展您的 VG。

lvextend -L +80G /dev/mapper/rootrhel-storetmp
xfs_growfs /storetmp  #or the appropriate tool for your filesystem type 

解决了眼前的问题后,您现在可以在适当的时间安排一些停机时间。

/store如果您使用 XFS 文件系统(RHEL/CentOS 7 默认情况下这样做),那么在下一次计划停机期间,您将创建和的当前内容的 tarball /transient,卸载并删除整个storerhelVG,将其 PV 添加xvdb3rootrhelVG 并然后使用更实际的容量需求估计来重新创建 LV/store/transient文件系统,并恢复 tarball 的内容。停机时间结束。

现在您的rootrhelVG 具有三个 PV:xvdb2xvdb3xvdc,并且有足够的空间满足您的需求。

如果您想停止付费xvdc,您可以使用pvmove /dev/xvdc自动将 VG 内的数据从和/或xvdc内的未分配空间迁移到xvdb2和/或 内xvdb3。您可以在线完成此操作;只是不要在 I/O 工作负载高峰时执行此操作,以避免性能受到影响。然后vgreduce rootrhel /dev/xvdcecho 1 > /sys/block/xvdc/device/delete告诉内核该xvdc设备即将消失,然后告诉亚马逊您不再需要磁盘了xvdc

我拥有近 20 年使用 LVM 磁盘存储的经验(首先使用 HP-UX LVM,后来在 Linux LVM 成熟到可以在企业环境中使用时使用 Linux LVM)。以下是我在 LVM 中使用的经验法则:

  • 当一个 VG 就足够时,您永远不应该创建两个 VG。

特别是,在一个磁盘上拥有两个 VG 很可能是一个让您头疼的错误。在 VG 内重新分配磁盘容量的灵活性取决于您的文件系统类型所允许的程度;在 VG 之间以小于一个现有 PV 的块的形式移动容量通常不值得这么麻烦。

  • 如果您的磁盘空间需求存在不确定性(而且总是存在),请将 LV 保持在较小的范围内,并保留一些未分配的空间。

只要您的 VG 有未分配的可用容量,您就可以根据需要通过一两个快速命令在线扩展其中的 LV 和文件系统。对于受过训练的猴子初级系统管理员来说,这只是一个香蕉的工作。

如果VG中没有未分配的容量,则获取一个新磁盘,将其初始化为新的PV,将其添加到需要容量的VG中,然后照常进行扩展。缩小文件系统更容易出错,可能需要停机,甚至可能在不备份和重新创建较小尺寸的文件系统的情况下不可能实现,具体取决于文件系统类型。因此,您需要尽可能避免需要在线缩小文件系统的情况。

  • 对磁盘空间进行微观管理可能存在风险,而且工作量很大。工作很昂贵。

好的。从技术上讲你可以在 上创建一个 80 GB 文件/storelosetup将其放入循环设备中,然后将其放入可以添加到您的 PV 中rootrhelVG 中的 PV...但这样做会导致系统很可能在启动时进入单用户恢复模式,除非您为这些文件系统和 VG 设置自定义启动脚本并且第一次就做对了。

如果出现错误,下次系统因任何原因重新启动时,您将不得不花费一些计划外的停机时间来进行故障排除和修复,或者更实际地从头开始重新创建文件系统并从备份中恢复内容,因为这比尝试排除故障更简单这种临时操纵的混乱局面

或者,如果您使用的是ext4可以在线缩减的文件系统,您可以收缩/store文件系统,收缩 LV,用于pvmove --alloc anywhere将可用空间合并到 PV 的尾部xvdb3,收缩 PV,收缩分区,运行partprobe以生成更改无需重新启动即可生效,然后创建一个新分区xvdb4,将其初始化为新的 PV 并将其添加到rootrhelVG...

但是,如果您在此序列中犯了一个错误,导致您的文件系统/PV 超出了其 LV/分区容器,并且您的文件系统会切换到只读模式,并带有一个错误标志,该错误标志只能通过运行文件系统检查来重置,从而导致强制计划外停机。

相关内容