expect半自动磁盘扩容脚本

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

使用前需要先安装expect的rpm包,centos6.5 64位上的版本是expect-5.44.1.15-5.el6_4.x86_64

另外,可扩容是建立在/是逻辑卷的前提下:

通过df -h查看磁盘信息,例如:

Filesystem                     Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-LogVol01   35G  9.3G   24G  29% /

tmpfs                          7.8G     0  7.8G   0% /dev/shm

/dev/sda1                      194M   34M  150M  19% /boot

再通过lvdisplay查看逻辑卷信息:

--- Logical volume ---

LV Path                /dev/VolGroup/LogVol01

LV Name                LogVol01

VG Name                VolGroup

LV UUID                cxD3nz-8GOa-pye4-sHYn-78yn-sCbK-OQcVCZ

LV Write Access        read/write

LV Creation host, time localhost.localdomain, 2015-03-27 08:16:39 +0800

LV Status              available

# open                 1

LV Size                35.05 GiB

Current LE             8974

Segments               1

Allocation             inherit

Read ahead sectors     auto

- currently set to     256

Block device           253:0

--- Logical volume ---

LV Path                /dev/VolGroup/LogVol00

LV Name                LogVol00

VG Name                VolGroup

LV UUID                tp3pqG-VW3I-rVnD-WvZ3-MwS0-caIf-LmpeCl

LV Write Access        read/write

LV Creation host, time localhost.localdomain, 2015-03-27 08:16:50 +0800

LV Status              available

# open                 1

LV Size                2.00 GiB

Current LE             512

Segments               1

Allocation             inherit

Read ahead sectors     auto

- currently set to     256

Block device           253:1

可以看到/所在逻辑卷是/dev/mapper/VolGroup-LogVol01,磁盘容量是35.05G。

假设新增的磁盘是sdb、此前系统中已经存在2个分区,以下脚本将完成分区动作,新创建的分区为sdb1:

#!/usr/bin/expect
spawn fdisk /dev/sdb
expect "):"
send "n\n"
expect "4)"
send "p\n"
expect ":"
send "1\n"
expect ":"
send "\n"
expect ":"
send "\n"
expect "):"
send "p\n"
expect "):"
send "w\n"

expect eof
exit
END

上述脚本执行完成后,可能需要重启系统生效。

接下来是将sdb1划入/

#!/usr/bin/expect
set timeout 3600
spawn mkfs.ext4 /dev/sdb1
expect ‘override‘

sleep 5

spawn pvcreate /dev/sda3
expect ‘successfully created‘

sleep 5

spawn vgextend VolGroup /dev/sda3
expect ‘successfully extended‘

sleep 5

spawn fdisk -l /dev/sda3

 set accum {}
    expect {
        {:*GB} {
            set accum "${accum}$expect_out(0,string)"

        }
    }

puts "\n"
puts "###########################################"
puts "###### sda3 has $accum free space ######"
puts "###########################################"
puts "\n"

puts "Please Type the Percentage of free space (1 to 100,defaul 100), then Type ENTER:"
puts "请输入100以内的正整数,将sda3可用磁盘空间按百分比 新增给 / 使用,并以回车结束。直接回车则默认为100%:"

expect_user "\n" {
set raw $expect_out(buffer)
# remove final carriage return
set response [string trimright "$raw" "\n%"]
}

if {$response==""} {set response 100}

puts "$response"

spawn lvextend -l +$response%FREE /dev/mapper/VolGroup-LogVol01
expect ‘successfully resized‘

sleep 5

spawn resize2fs /dev/mapper/VolGroup-LogVol01
expect ‘blocks long‘

#set timeout 5

puts "Resize Complete!"

exit
END

上述脚本会让你输入一个数字,决定将新增磁盘多少百分比的空间扩容至/中,直接回车默认为100%。

附:expect_out用法

expect -re ".*" {}

会自动清空expect_out缓存内的内容

expect_out(buffer)输入的所有内容

expect_out(0,string)与输入内容相匹配的部分

时间: 2024-10-20 22:58:13

expect半自动磁盘扩容脚本的相关文章

SQL Server 磁盘空间告急(磁盘扩容)转载

一.背景 在线上系统中,如果我们发现存放数据库文件的磁盘空间不够,我们应该怎么办呢?新买一个硬盘挂载上去可以嘛?(linux下可以直接挂载硬盘进行扩容),但是我们的SQL Server是运行在Windows下的,有什么办法可以解决这燃眉之急呢? 有两种方法可以解决上面的问题:第一种就是把数据库磁盘转换为[动态磁盘],新增新的磁盘就可以解决了:第二种就是我今天要讲述的,使用SQL Server在其它磁盘(或者逻辑分区)中添加新的文件,添加完成后,SQL Server马上就能进新的数据了. 上面两种

阿里云磁盘扩容踩坑总结

公司半年前上线一个新的项目,采购了一批阿里云主机,磁盘组成是40G系统盘+100G的数据盘,数据库采用MariaDB Galera Cluster集群部署,由于业务数据量快速增长,导致磁盘存储空间剩余量很少,急需要扩容,先总结整个项目规划中埋下的坑: 1.没有DBA对数据库的容量规划,而前期的运维人员采购时选用100G的SSD云盘: 2.数据库默认使用共享表空间,缺点是删除数据后不释放空间,当数据快速增长后,我们采取了先删除临时表数据的方式来尽量避免暴力扩容,争取在春节期间稳定,删除部分数据后,

LINUX 11G RAC ASM磁盘组在线增加磁盘扩容

[javascript] view plain copy LINUX 11G RAC ASM磁盘组在线增加磁盘扩容 1.操作系统版本 OEL 6.1 [[email protected] ~]# more /etc/redhat-release Red Hat Enterprise Linux Server release 6.1 (Santiago) 2.数据库版本 oracle 11g rac SQL> select * from v$version; BANNER ------------

SBC37x交叉编译平台QT+OPENCV【2】虚拟机Vbox下Ubuntu的磁盘扩容

虚拟机Vbox下Ubuntu,当初为了学习,仅仅分配了8g,结果qt,opencv等一上,就说room空间不够了.于是开始折腾磁盘扩容. 网上一大堆,也不知道有多少是自己动手走过,正是不但浪费别人时间,而且浪费自己的时间. 正题: 1.cmd后,进入在你vbox的目录下,就会看到vboxmanage list hdds: 2.修改空间:VBoxManage modifyhd " c:\users\usegear-yc\virtualbox vms\ubutu32.vdi" –resiz

KVM guest磁盘扩容

kvm默认使用的是raw类型的磁盘格式,下面是关于raw磁盘扩容的两种方法: 第一种方法: 在原先raw类型的100G磁盘上动态追加70G,把虚拟机现有磁盘扩容为170G 1,在宿主机上先备份虚拟机的所有文件,防止磁盘扩容失败 2,然后开始操作 查看img文件类型: # qemu-img info disk.local image: disk.localfile format: rawvirtual size: 98G (105612574720 bytes)disk size: 98G 关闭虚

磁盘清理脚本

历史原因,DB2采用归档日志,每天增加量50G左右,磁盘吃不消,而现在来说,这些归档是用不到的,古写个脚本清理磁盘空间当大于85%的时候 #!/usr/bin/ksh ########################################################### ##Author:fuwenchao ##version:1 ##time:2014-5-28 ##purpose:clear the db2 log when there is no more space ##

CentOS-7磁盘扩容之殇

* 1. 这里同样想在VMWare安装的CentOS7进行硬盘的扩容,同样不重启虚拟机,扩容之前的/home目录的大小为348G,如下图所示:* * 2. 中间添加硬盘的过程可参见上一封邮件: * * 3. 磁盘扩容在操作系统层的工作正式开始,刚开始与普通的LVM操作相同,这里不再赘述.* (1)使用正常的LVM创建流程进行操作. (2)坑出现:如果按照以前的方式操作,会有这样的错误提示: 告知找不到有效的文件系统超级块,找不到的原因是CentOS 7中默认的文件系统是XFS,与CentOS 6

Vmware Linux虚拟机磁盘扩容方法

我的LINUX版本是ubuntu12.04 32bit.今天在下载android源代码的时候发现自己最初给这个虚拟机分配的磁盘空间不足了(只有20G).所以就需要给磁盘扩容.网上大致搜索了一下,主要有两种解决方法:一,另建一个磁盘:二,给原有的磁盘扩容.我选择第二种方案. 1,关闭虚拟机.进入要扩容虚拟机的设置界面,在设备框中选择磁盘,然后选择实用工具,再选择扩容选项.在跳出来的方框中输入你要扩容后的磁盘大小.我填写的是60G. PS:这里需要注意一点:如果你曾经给虚拟机建立过快照,那么你必须删

VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容

VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容 一般来说,在对虚拟机里的Ubuntu下的磁盘进行扩容时,都是添加新的分区,而并不是对其系统所在分区进行扩容,如在此链接中http://www.cnblogs.com/yiru/archive/2012/11/15/2770968.html 就是添加了新的分区.但是我们平时自动安装一些软件或者库,都会自动安装在系统所在分区/dev/sda1里面,很不方便,今天查了相关资料,找到一种可以扩充/dev/sda1的方法,顺便在此记录