我的系统上有一个精简版 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
一旦我得到这两个命令的输出,我会更新这个问题,以便你在运行之前能够更加确定一切都是正确的。
祝你好运!