在 CentOS 中合并不同磁盘的两个分区

在 CentOS 中合并不同磁盘的两个分区

我的系统上有一个精简版 centos 6。我将调整其中一个分区的大小。这是该系统的文件系统:

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_hadoop1-lv_root
                      5.5G  3.7G  1.6G  71% /
tmpfs                 937M     0  937M   0% /dev/shm
/dev/sda1             485M   32M  428M   7% /boot
/dev/sdb1             5.0G  139M  4.6G   3% /disk1
cm_processes          937M     0  937M   0% /var/run/cloudera-scm-agent/process

我想调整大小/disk1为 1G 并调整大小/为 9.5G。但问题是//disk1在两个不同的设备上!是否可以/在不格式化的情况下调整大小?

仅供参考,这是 fdisk -l 的输出:

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008d752

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1306     9972736   8e  Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8376205b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         652     5237158+  83  Linux

Disk /dev/mapper/vg_hadoop1-lv_root: 5981 MB, 5981077504 bytes
255 heads, 63 sectors/track, 727 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/mapper/vg_hadoop1-lv_swap: 4227 MB, 4227858432 bytes
255 heads, 63 sectors/track, 514 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

vgscan 的输出:

Found volume group "vg_hadoop1" using metadata type lvm2

还请注意,该机器位于 vmware esx 内部,作为客户操作系统,尽管我认为这个事实不会改变这个过程。

问候。

答案1

由于 / 位于逻辑卷上,因此可以生长/dev/mapper/vg_hadoop1-lv_root无需重新格式化如果没有雷击,这个操作就会很安全。

因为 /dev/sdb1 (/disk1) 不是逻辑卷,所以仍有可能缩小它——然而有总是有失败的可能性。如果有足够的空间,我个人从未遇到过调整分区大小的问题;但这并不意味着不可能!许多可用于缩小分区的工具都会警告您这一事实。尽管如此,我还是没有发现任何人在这样做时遇到问题。

现在,如果您已经备份了 /disk1,或者不介意它丢失,请继续!


因此,为了继续数据透视,我们将首先缩小 /disk1,以便稍后有足够的空间来增加 /。首先,我们必须确保它已卸载 - 您无法(安全地)缩小已安装的卷。

# umount /dev/sdb1

工具

[其他读者请注意:这只适用于 ext{2,3,4} 文件系统] 我们可以使用调整2fs大小+磁盘管理, 或者分区. fdisk 不适合胆小的人。如果您想使用 GUI 来缩小分区,可以按照以下指南操作:http://gparted.org/display-doc.php?name=help-manual#gparted-resize-partition

首先,让我们调整边界(分区)的大小,以确保分区末尾没有数据。

# resize2fs /dev/sdb1 1G

现在,对于 fdisk 我们可以执行以下操作:

# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help):  

请记住,分区只是数据的边界。删除分区不会删除底层数据。它们就像非垃圾收集编程语言中的指针。幸运的是,通过 fdisk -l 的输出,我们得到了分区的边界(指针位置)!

这时可能会丢失数据。如果您在没有备份的情况下删除了 /disk1 上非常重要的内容,我概不负责。在执行此步骤之前,请将您需要的任何内容备份到两个位置

让我们删除你的分区

Command (m for help): d
Partition number (1-4, default 4): 1
Partition 1 is deleted

Command (m for help): 

并用(缩小的)边界重新创建它

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default e): p
Selected partition 1
First sector (1-5368, default 1): <hit enter>
Last sector, +sectors or +size{K,M,G} (2-5368, default 5368): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): 

然后,我们将创建另一个分区,稍后可以使用我们创建的所有新可用空间

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default e): p
Selected partition 2
First sector (1025-5368, default 1025): <hit enter>
Last sector, +sectors or +size{K,M,G} (1026-5368, default 5368): <hit enter>
Partition 2 of type Linux and of size <remaining> is set

Command (m for help): 

我们的新分区已设置完毕,我们可以继续下一步


太棒了!最难的部分已经完成了。你的问题是 LVM 的出色功能之一,也是它如此常用的原因(合并分区,即使在单独的驱动器上!)

所以,我们试图做的是增加逻辑卷即 /dev/mapper/vg_hadoop1-lv_root。为此,我们需要在我们的卷组成长!我们可以通过添加物理体积至我们的卷组

因此,我们首先创建一个物理体积将其从我们的新分区中移除,以便 LVM 可以识别它,然后将其添加到卷组. 我们这样做是为了...

# /sbin/pvcreate /dev/sdb2

LVM 可以将任何物理卷添加到任何卷组,因此我们将其添加到我们的 Hadoop 卷组中,这是我们从输出中找到的

# /sbin/vgscan 

因此,我们知道我们需要 vg_hadoop1。我们将使用以下方法将新物理卷添加到此卷组...

# /sbin/vgextend vg_hadoop1 /dev/sdb2

现在已添加,我们运行一个快速命令来调整当前逻辑卷的大小

# /sbin/lvextend -L +4.0G /dev/mapper/vg_hadoop1-lv_root 

lvextend 的 -L 参数非常酷,可以接受各种不同的输入。我们使用的 + 几乎就像许多编程语言中的 += 二进制运算符一样。我们说的是“新大小 = 当前大小 + 4.5G”

现在一切都已说完,我们有两个文件系统,它们的大小与它们所在的卷不同。对于 ext2/3/4fs 文件系统 [最常见](一旦我们获得 fdisk -l 的输出以告诉我们您正在使用的文件系统,我将更新问题),我们可以更改文件系统以匹配分区大小:

# /sbin/resize2fs /dev/mapper/vg_hadoop1-lv_root
# /sbin/resize2fs /dev/sdb1

您可能需要重新挂载 root 才能看到新的大小。我们也可以再次挂载 /disk1。使用以下命令执行此操作:

# mount -o remount /
# mount /dev/sdb1 /disk1

让我们使用 df(磁盘可用)来确保一切正常,并且一切都大小正确。

# df -H

一旦我得到这两个命令的输出,我会更新这个问题,以便你在运行之前能够更加确定一切都是正确的。

祝你好运!

相关内容