我如何使Centos VM无需重新启动即可重新读取其增大的磁盘大小


16

我有一个CentOS 5 VM,我刚刚将VM磁盘从10G增加到20G,但是如果不重新引导我就无法让fdisk看到新的磁盘大小。

我试过了 echo 1 > /sys/block/sda/device/rescan,似乎表明它可以看到新的大小,但是当我转到fdisk创建新分区时,它仍然将磁盘视为10G。

有任何想法吗?


根据您的虚拟化平台和存储方法,这可能会或可能不会。细节很重要。
womble

您添加了哪种虚拟磁盘类型:IDE或SCSI?
量化

第一个命令对我
有用

Answers:


11

您需要向您的SCSI总线发出rescan命令。

在VMware中,SCSI控制器可能位于不寻常的地方。首先找到它:

find /sys -iname 'scan'

对我而言

/sys/devices/pci0000:00/0000:00:07.1/host0/scsi_host/host0/scan
/sys/devices/pci0000:00/0000:00:07.1/host1/scsi_host/host1/scan
/sys/devices/pci0000:00/0000:00:10.0/host2/scsi_host/host2/scan

然后只需发出rescan命令

echo "- - -" >/sys/devices/pci0000:00/0000:00:07.1/host0/scsi_host/host0/scan
echo "- - -" >/sys/devices/pci0000:00/0000:00:07.1/host0/scsi_host/host1/scan
echo "- - -" >/sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host2/scan

应该有帮助。:)


5
ls /sys/class/scsi_host也许更快。
量化

11

我必须在SLES 11服务器上处理类似的问题。LVM是使用在VMWare ESXi上运行的原始磁盘构建的

# pvcreate /dev/sdd; vgextend ....

一段时间后,我需要增加LVM的大小,但是我没有像以前一样添加辅助磁盘,然后添加pvcreate + vgextend,但是我选择增加现有磁盘的大小(在这种情况下为/ dev / sdd )。完成VMWare的增加后,我执行了

# rescan-scsi-bus.sh

但是pvdisplay仍然显示“旧”磁盘大小。有必要做一个

# echo 1 > /sys/block/sdd/device/rescan

让内核学习/ dev / sdd的新磁盘大小


6
echo 1 > /sys/block/sda/device/rescan在CentOS上为我工作
BenediktKöppel16年

-bash:/ sys / module / scsi_mod / parameters / scan:权限被拒绝,用户名是root
Sarz

7

第一次做之后 echo 1 > /sys/block/sda/device/rescan

pvresize /dev/sda 为我做了把戏


3

如果直接使用分区表(例如,您已经使用基本分区挂载了文件系统),内核将继续使用旧的分区表,直到情况不再如此。曾经有人告诉我,如果您正在使用LVM,则可以解决此问题。


2

更新: Centos 6-不能在线更新活动磁盘的分区表,Centos 7-可以使用growpart扩展最后一个分区,或者使用fdisk创建新分区,并使其可见,而无需通过partprobe重启。在ubuntu / debian上可能相同。-在2.6内核开始支持在线重新读取活动磁盘分区表之后的某个时刻。由于问题是针对Centos 5的,所以我不会说。

如果使用分区,则必须重新引导才能使用新空间。我没有找到避免这种情况的方法。如果有人让我知道。

但是,应在扩展磁盘上的最后一个分区或添加新分区之后重新启动。重新启动之前没有任何意义。

重新扫描后您应该注意的第一件事是fdisk和lsblk中的磁盘更大。如果看不到它,则必须使用这些echo 1和echo---命令。

看到更多空间后,您可以扩展/添加分区,然后重新引导,扩展vg,扩展lv和fs。

如果要避免重新引导,则必须将原始sda / b / c磁盘分配给卷组,而不能将其分区到sda1 / 2/3。这样就无需重新启动。

前段时间,当Linux无法从LVM引导时,分区是必要的,但是现在可以了。

如果您执行lsblk,则将看到分区或lvms,具体取决于您使用的是分区还是lvm,如果不使用lvm则可以包含所有部分,如果不使用分区则可以包含所有lvms。这是一个例子:

root@srv4 ~ $ lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                           8:0    0  7.3T  0 disk
├─sda1                        8:1    0  500M  0 part /boot
└─sda2                        8:2    0  7.3T  0 part
  ├─vg_srv4-LogVol13 (dm-0) 253:0    0  7.1T  0 lvm  /
  ├─vg_srv4-LogVol05 (dm-1) 253:1    0  100G  0 lvm  /var/log
  ├─vg_srv4-LogVol04 (dm-2) 253:2    0   20G  0 lvm  /var
  ├─vg_srv4-LogVol01 (dm-5) 253:5    0   20G  0 lvm  /opt
  ├─vg_srv4-LogVol00 (dm-6) 253:6    0   20G  0 lvm  /home
  ├─vg_srv4-LogVol03 (dm-7) 253:7    0   20G  0 lvm  /usr
  └─vg_srv4-LogVol02 (dm-8) 253:8    0    8G  0 lvm  /tmp


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.