从一个文件系统回收空间,将其分配给另一个文件系统,无需 LVM

从一个文件系统回收空间,将其分配给另一个文件系统,无需 LVM

我想将一个文件系统空间添加到另一个文件系统。

/dev/cciss/c0d0p2    152358920 143606116    888588 100% /db2
/dev/cciss/c0d0p15   203899764  50767420 142607764  27% /db2/ade/sapdata1

在这种情况下,从/db2/ade/sapdata1到。/db2我们的服务器也不是以LVM格式安装的。

我怎样才能得到一些空闲空间呢/db2

答案1

执行此操作的难度取决于这两个分区的块布局:就起始块和结束块而言,哪一个在磁盘上排在第一位,它们之间是否有任何其他分区或任何空白空间,等等......

使用的文件系统还需要/db2/ade/sapdata1支持收缩。例如,xfs 就没有。

我举一个例子供您参考。这是一个相当危险的操作,我不建议您这样做。但它会让您了解其中涉及的内容。该示例是最简单的情况。其他情况要困难得多,因为您可能必须将数据从分区中的一个位置向后移动(从最后一个块向第一个块计数)到另一个位置。

假设p15首先存储在磁盘上,然后是p2,它们一起占据整个磁盘,没有其他分区,也没有空闲块。这是你必须做的:

  1. 在 p15 上缩小文件系统
  2. 将 p15 分区缩小到文件系统的新大小。这将在两个分区之间创建可用空间。
  3. 卸载 p2 (/db2)
  4. 将 p2 分区的起始块更改为步骤 2 中可用的第一个空闲块(即将分区的起始位置备份到磁盘上较早的位置)
  5. 使用如下命令在磁盘上向后移动数据:

    dd if=/dev/cciss/c0d0p2 of=/dev/cciss/c0d0p2 bs=xxx skip=yyy
    

    xxx应该是一个大块大小,它除以您正在增长的分区的数量,没有余数,并且yyy应该是您正在增长的分区的字节数除以xxx

  6. 扩展 /db2 文件系统。

可以想象,第5步是一个极其危险的操作。执行的时间会很长,如果失败或中断的话可能很难恢复。你必须如果您执行此操作,请了解您在做什么。

如果您在 Linux 下运行,另一种选择是将所有现有数据保留在原处,并使用设备映射器将现有分区和一些不相邻的空白空间缝合在一起,形成一个更大的虚拟分区。这基本上是 LVM 会做的事情,但没有漂亮的 LVM 用户界面和元数据来自动、透明地将块范围缝合在一起。

相关内容