我想将一个文件系统空间添加到另一个文件系统。
/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,它们一起占据整个磁盘,没有其他分区,也没有空闲块。这是你必须做的:
- 在 p15 上缩小文件系统
- 将 p15 分区缩小到文件系统的新大小。这将在两个分区之间创建可用空间。
- 卸载 p2 (/db2)
- 将 p2 分区的起始块更改为步骤 2 中可用的第一个空闲块(即将分区的起始位置备份到磁盘上较早的位置)
使用如下命令在磁盘上向后移动数据:
dd if=/dev/cciss/c0d0p2 of=/dev/cciss/c0d0p2 bs=xxx skip=yyy
xxx
应该是一个大块大小,它除以您正在增长的分区的数量,没有余数,并且yyy
应该是您正在增长的分区的字节数除以xxx
。扩展 /db2 文件系统。
可以想象,第5步是一个极其危险的操作。执行的时间会很长,如果失败或中断的话可能很难恢复。你必须如果您执行此操作,请了解您在做什么。
如果您在 Linux 下运行,另一种选择是将所有现有数据保留在原处,并使用设备映射器将现有分区和一些不相邻的空白空间缝合在一起,形成一个更大的虚拟分区。这基本上是 LVM 会做的事情,但没有漂亮的 LVM 用户界面和元数据来自动、透明地将块范围缝合在一起。