linux expect 扩容磁盘,openstack VM 磁盘扩容,修复 GPT 分区,更新分区表后,拉伸文件系统...

openstack VM 磁盘扩容,修复 GPT 分区,更新分区表后,拉伸文件系统

2014-06-23 分类:Hardware 标签:Openwrt Route

起因

之前,厂里 openstack 虚拟机,「云主机类型」不同模板定义的磁盘大小。是在原镜像的 「根磁盘」 上 附加 (attach) 相应大小的 「临时磁盘」 来实现的。在虚拟机里面看到的是 2 块独立的磁盘设备。将虚拟机「临时磁盘」扩容到逻辑卷组,以此做的快照启动,找不到之前附加的「临时磁盘」,杯具发生了: 起不来 -_-!

现在,不同模板直接指定不同大小的 「根磁盘」 ,不再使用 「临时磁盘」 。生成的虚拟机,就只看到一个 扩容后 (resize) 的磁盘。但由于母盘镜像大小和模板定义的磁盘大小不一样,parted 分区操作时,需要先修复分区,系统才能识别到相对母盘 扩容 的磁盘空间,然后分区,扩容逻辑卷组,拉伸文件系统,这样做的快照才可以正常使用。

经过

修复 GPT 分区

# parted /dev/vda

Using /dev/vda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) p

Error: The backup GPT table is not at the end of the disk, as it should be.

This might mean that another operating system believes the disk is smaller.

Fix, by moving the backup to the end (and removing the old backup)?

Fix/Ignore/Cancel? f

Warning: Not all of the space available to /dev/vda appears to be used,

you can fix the GPT to use all of the space (an extra 125829120 blocks) or continue

with the current setting?

Fix/Ignore? f

parted 没有可以自动 Fix 分区表的命令行参数,只好用 expect 交互式修复 GPT 分区,并扩增分区

expect -c 'spawn parted /dev/vda; \

expect "(parted)"; send -- "p\r"; \

expect "Fix/Ignore/Cancel?"; send -- "f\r"; \

expect "Fix/Ignore?"; send -- "f\r"; \

expect "(parted)"; send -- "mkpart primary 42.9GB 100%\r"; \

expect "(parted)"; send -- "p\r"; \

expect "(parted)"; send -- "q\r"; \

exit'

更新分区表

上面修复完 GPT 分区后,会出现下面的提示,要重启才能重新识别 新分区 :

WARNING: the kernel failed to re-read the partition table on /dev/vda (Device or resource busy).

As a result, it may not reflect all of your changes until after reboot.

parted 虽然可以看到新分区,但系统里找不到 新分区 对应的 block 设备

# parted /dev/vda print

Model: Virtio Block Device (virtblk)

Disk /dev/vda: 129GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number Start End Size File system Name Flags

1 1049kB 211MB 210MB ext4 boot

2 211MB 42.9GB 42.7GB lvm

3 42.9GB 129GB 85.9GB primary

# ls /dev/vda

vda vda1 vda2

# cat /proc/partitions

major minor #blocks name

252 0 125829120 vda

252 1 204800 vda1

252 2 41736192 vda2

尝试使用 partprobe 刷新分区表,结果无效。依然会提示 reboot 才能更新分区表When you update the partition table, you need to tell the kernel it has been updated. Normally you can use partprobe. However, on RHEL6 , this no longer works for disks that have partitions already mounted (e.g. your system disk on sda) This is considered too dangerous, so the developers stopped this in RHEL6 . You can work around this (although not advisable) by using partx to forcibly add new partitions to /proc/partitions

上面帖子说 RHEL6 中 partprobe 不支持更新 已挂载 的磁盘设备,要用 partx 命令 强制 更新分区表:

$ man partx

-a, --add

Add the specified partitions, or read the disk and add all partitions.

# partx -av /dev/vda

device /dev/vda: start 0 size 2097152000

gpt: 3 slices

# 1: 2048- 411647 ( 409600 sectors, 209 MB)

# 2: 411648- 83884031 ( 83472384 sectors, 42737 MB)

# 3: 83884032-251656191 (167772160 sectors, 85899 MB)

BLKPG: Device or resource busy

error adding partition 1

BLKPG: Device or resource busy

error adding partition 2

added partition 3

上面输出的 BLKPG: Device or resource busy,error adding partition 1 报错没关系。 因为前两个分区已经 被识别挂载 了,就不用再 画蛇舔脚 的重复添加到分区表了。 执行完后,就可以在 /proc/partitions 看到新识别的分区了

# cat /proc/partitions

major minor #blocks name

252 0 125829120 vda

252 1 204800 vda1

252 2 41736192 vda2

252 3 83886080 vda3

扩容文件系统

修复完分区表、更新完分区表。是该做正经事的时候了:扩容文件系统将新分区,添加物理卷

扩容逻辑卷组

拉伸逻辑卷

扩容文件系统

doit

+ pvcreate /dev/vda3

Writing physical volume data to disk "/dev/vda3"

Physical volume "/dev/vda3" successfully created

+ vgextend vg /dev/vda3

Volume group "vg" successfully extended

+ lvextend -l +100%FREE /dev/vg/home

Extending logical volume home to 87.75 GiB

Logical volume home successfully resized

+ resize2fs -p -F /dev/vg/home

Filesystem at /dev/vg/home is mounted on /home; on-line resizing required

old desc_blocks = 1, new_desc_blocks = 6

Performing an on-line resize of /dev/vg/home to 23003136 (4k) blocks.

The filesystem on /dev/vg/home is now 23003136 blocks long.

OVER

到此就完成了,虚拟机扩容文件系统的任务就完成了。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

glsl shader 雪_深夜食堂里的雪平锅,美味秘诀:手工打造,高效导热,煮煲炸蒸都好用!...

hello,看今天内容之前生活妹给大家推荐一下各种好吃好用的↓↓↓在日本,几乎每个家庭都有一个雪平锅。日本厨师冨田唯介甚至专门为雪平锅撰写了一本书:《雪平锅无油料理》,里面详细讲诉了雪平锅能做的各类美食,从煮物到…

ansole终端链接linux,基于Linux系统的智能家居远程控制系统设计论文.doc

基于Linux系统的智能家居远程控制系统设计论文学科分类号 0801北京邮电大学毕业论文题目 (中文):基于Linux系统的智能家居远程控制系统设计 (英文):The smart home remote control system based on Linux system design姓 名学 号8 院 (系)计算机与通信工…

ubuntu 安装GPU黑屏 修改GRUB_Ubuntu升级安装最新内核的方法与注意事项(以18.04为例)...

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要如何安全地升级Ubuntu内核,以18.04 Server版为例纂写本教程。我们先来了解一下什么是主线内核构建(Mainline Ke…

linux配置网卡自动获取的命令,linux 命令行下配置网卡自动获取 IP

linux 下配置网络,最方便的还是用图形界面,然而有时候必须在命令行下操作,我知道可以通过 ifconfig 设置 ip (192.168.1.20) 和掩码,route 添加网关(192.168.1.1), /etc/resolv.conf 中指定 DNS,比如&#…

send tcp char far_TCP/IP之传输层详解

1. 传输层特征传输层位于TCP/IP协议族中的第4层,负责在网络主机中创建虚拟传输控制协议TCP,或用户数据报协议UDP,也叫“Transport Layer”。此层向其主机上运行的应用程序发送和接收数据。传输层将端口号分配给在主机上的应用程序中运行的进程…

linux 从光盘安装数据,LINUX访问光盘数据

实验01:访问光盘数据实验目标熟练linux光盘的安装访问光盘的数据实验步骤[rootlocalhost ~]# umount /dev/cdrom[rootlocalhost ~]# ls /media/[rootlocalhost~]#二.手动挂载1.指定光盘安装位置[rootlocalhost~]# mount /dev/cdrom /media/mount:block d…

python库_Python 基本功: 2. 学会调用库

在完成 基本功教程1 之后:多多教Python:Python 基本功: 1. Hello world​zhuanlan.zhihu.com你已经成功完成了第一个 Python 应用程序,并且运用了三种不同的创作工具。接下来,我们先来从宏观的角度了解一下 Python 宇宙&#xff0…

arm linux 加载.a,如何将libc.a链接到arm-linux中的共享库中使用arm-none-linux-gnueabi-gcc...

在一个项目中,我的同事创建了一个静态库,例如liba.a,它与app链接.在liba.a中,他将libc malloc()覆盖为其所有者版本.我创建了一个共享库libs.so,它也与app链接.问题是当我的libs.so与app链接时,我的libs.so中使用的malloc()将是liba.a中的那个,而不是标准libc.so中的那个,这会导…

抽象工厂模式java_《JAVA与模式》之抽象工厂模式

场景问题举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU、硬盘、内存、主板、电源、机箱等。为讨论使用简单点,只考虑选择CPU和主板的问题。事实上,在选择CPU的时候&#x…

c语言关键用法大全,c语言关键字的用法详解

《c语言关键字的用法详解》由会员分享,可在线阅读,更多相关《c语言关键字的用法详解(10页珍藏版)》请在人人文库网上搜索。1、最新 料推荐1. Static 用法1.1 static 声明的变量在 C语言中有两方面的特征:1) 、变量会被放在程序的全局存储区中…

java架构师_什么样的经历,才能领悟成为Java架构师?

最近我发现,无论是博客也好,还是我写的技术专栏也好,经常会收到很多朋友的留言,留言的内容除了讨论技术问题以外,问的最多的,莫过于职业生涯规划相关的了。例如:我刚毕业,如何入行Ja…

c语言实验报告9 四川师范大学,四川师范大学c语言实验报告.docx

四川师范大学c语言实验报告.docx下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档,不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、原创作者…

c语言位运算八进制转二进制,C语言十进制转换二进制八,十六进制。二进制转十进制。...

C语言十进制转换二进制八,十六进制。十进制转二进制有个计算公式,就是除以2取余再倒序显示余数就是了。可以根据公式写。八制进公式也同理。十六进制有点不一样,大于9的要转为字母。A,B,C,D,E,F。#include void totwo();void toeight();void …

浏览器崩溃_微软最新系统再迎“喜报”:更多用户的浏览器开始崩溃

Windows 10又闯祸了。事实上,新浪VR最近已接二连三地道了该系统的严重Bug问题,而这一次又跟浏览器有关。有很多用户在升级到最新版Windows 10 v2004之后发现,每次只要重启计算机,自己正常使用的Chorme就会被强制注销,而…

用python画画简单代码_震撼!用Python开发网站如此简单

Flask是一个基于Python语言的微型Web框架。之所以被称为微型,是因为其核心非常小,但是该Web框架简约而不简单,具有很强的扩展能力。本文介绍如何编写和运行第一个Flask Web应用程序。当然,阅读本文之前,需要读者有一定…

c语言中char函数返回值,用于返回char的C函数的PInvoke

我正在尝试编写一些从非托管DLL调用方法的C#代码。dll中的函数原型为:extern "C" __declspec(dllexport) char *foo(void);在C#中,我首先使用:[DllImport(_dllLocation)]public static extern string foo();…

电脑有摄像头吗_网络答辩来了,我摄像头呢???

我们学校已经确定要网络答辩了。今明两天是预演答辩,就是指导老师带着我们一起熟悉下钉钉的使用流程,模拟一下答辩的过程,以免因为自己的不熟练而影响答辩的成绩。我们老师的意思,正式网络答辩过程中,因为自己的不熟练…

grubbs检测c语言,Grubbs算法检测离群值

▲概述:一组测量数据中,如果个别数据偏离平均值很远,那么这个(这些)数据称作“可疑值”。如果用统计方法—例如格拉布斯(Grubbs)法判断,能将“可疑值”从此组测量数据中剔除而不参与平均值的计算,那么该“可疑值”就称…

将十个数进行从大到小的顺序进行排列_如何进行商品ABC分类管理

​ ABC管理法是根据事物的经济、技术等方面的主要特征,运用数理统计方法,进行统计、排列和分析,抓住主要矛盾,分清重点与一般,从而有区别地采取管理方式的一种定量管理方法。又称主次分析法 、ABC分析法、分类管理法、…

c语言around用法,KET基础语法:介词among和around的用法及例句

孩子们开始学习KET考试后,标志着他们开始系统地学习语法,对孩子们来说是不小的挑战。复杂的语法时态、不同类型的介词、短语等,都要求他们掌握正确的复习方法,才能避免学习语法后,而不知道如何运用的误区。而学会错题整…