调整Azure中虚拟机数据磁盘大小实践

2023-05-16

首先,在Azure中关于数据存储的付费规则中规定,只要你使用的不是Azure的XIO高级存储提供的I/O密集型的高吞吐低延迟的服务,那么得益于Azure存储设计中采用的稀疏文件方式存储,存储虚拟机VHD的存储只会按照实际的写入数据的使用量进行付费,因此最佳实践就是建立VHD磁盘文件的时候就最好设置为1023GB,也就是Azure订阅所支持的最大值 1TB大小。当然这里讨论的是使用单个磁盘的问题,不包括出于性能或者容量限制等问题采用多个VHD数据磁盘到Azure虚拟机中,并在上面构建软RAID解决方案的情况。

好的,如果最初创建虚拟机或之后挂载的数据磁盘没有根据最佳实践设置大小,后面发现要进行VHD扩展,那么你可能发现在Azure中做类似的操作并不容易,期初我们需要通过一个较为复杂的流程实现这个目的:

  1. 关闭虚拟机

  2. 下载VHD到本地

  3. 通过Hyper-V/PowerShell或者第三方工具调整VHD大小

  4. 删除或上传时将新的调整大小后的VHD传输到BLOB存储中

  5. 重新启动虚拟机

  6. 通过diskpart或作者fdisk或者磁盘管理工具调整分区大小

这是个工作量不小的工作,尤其是上传下载部分,即便是通过支持传输实际文件大小的工具如AZCOPY或者PowerShell Add-Vhd CMDLET;所以调整磁盘曾经是难以和用户说明白的一个问题。

现在,调整Azure虚拟机磁盘大小不再是个难题了,因为Azure PowerShell模块中现在提供了新的cmdlet支持调整磁盘大小,Update-AzureDisk,而唯一的限制仅仅是需要确保调整磁盘大小的虚拟机处于关闭和取消分配的状态。

另外,这里脑补一下,有可能在我们环境里面使用的虚拟机有多个虚拟机磁盘对应不同的分区,我们只需要对其中某个特定分区磁盘进行扩充,如果是这种情况究竟哪个VHD磁盘是我们需要调整的呢,一个偷懒的办法就是把所有的数据磁盘统统扩容上去,毕竟不是只按照实际使用收费吗,当然这样无不可;只是我觉得一个好的习惯就是在每次挂接Azure的数据磁盘时,都遵守一个好的命名规范,并且 给磁盘设置一个合理的能够说明用途的标签(Label),这样在调整的时候就能起到事半功倍的效果。

好的,现在为两个测试虚拟机创建数据磁盘,

首先确认连接了当前的Azure订阅,


Select-AzureSubscription -SubscriptionId { MySubscriptionId }
Add-AzureAccount -Environment AzureChinaCloud  

创建演示虚拟机对象,我们分别演示已经创建的Windows Server 2012 R2服务器和Linux Ubuntu 14.04 LTS虚拟机;


$winvm = Get-AzureVM -ServiceName shawnzhaidemocloud -name shzhaiwindemo
$linuxvm = Get-AzureVM -ServiceName shawnzhaidemocloud -Name shzhailinuxdemo  

设置数据磁盘信息并获取当前虚拟机存储账号信息并通过该信息创建数据磁盘,


        
function create-datadiskbaseuri
          {
              Param
              (
                  [Parameter(Mandatory=$true)]
                  [string] $prefix,
                  [Parameter(Mandatory=$true)]
                  [Microsoft.WindowsAzure.Commands.ServiceManagement.Model.ServiceOperationContext]
                  $VM
              )
            $datadiskname= "$prefix"+"$(get-random)"
            $osdisk= Get-AzureOSDisk–$VM $VM
            $baseuri= $osdisk.MediaLink.AbsoluteUri.Substring(0,($osdisk.MediaLink.AbsoluteUri.LastIndexOf('/')+1))
            $datadiskuri= $baseuri+$datadiskname+".vhd"
            $datadiskuri        
          } 
 function get-newdatadisklun
          {
              Param
              (
                  [Parameter(Mandatory=$true)]
                  [Microsoft.WindowsAzure.Commands.ServiceManagement.Model.ServiceOperationContext]
                  $VM
              )
          $currentdatadisk= $VM | Get-AzureDataDisk-ErrorAction SilentlyContinue
          if($currentdatadisk.Lun-eq $null){$LUNNUM ='0';$LUNNUM;return}
          [int]$LUNNUM = $currentdatadisk.Lun+1
          $LUNNUM             
          }  

$windatadisklabel = “Sqlserver Database disk”
# Init the Disk Size to 100GB
$Disksize = 100
$windatadiskname = “Windatadisk-1-”
$windatadiskuri = create-datadiskbaseuri –prefix $Windatadiskname –VM $winvm
$linuxdatadisklabel = “Mysql Database disk”
$linuxdatadiskname = “Linuxdatadisk-1-”
$linuxdatadiskuri = create-datadiskbaseuri –prefix $linuxdatadiskname –VM $linuxvm
$LatestwinVMLUN = get-newdatadisklun -$VM $winvm
$LatestlinuxVMLUN = get-newdatadisklun -$VM $linuxvm  

创建新的虚拟磁盘并挂载到相应的虚拟机,


Add-AzureDataDisk -CreateNew -DiskSizeInGB $Disksize -DiskLabel $windatadisklabel -LUN $LatestwinVMLUN
-MediaLocation $windatadiskuri -HostCaching ReadOnly -VM $winvm |
Update-AzureVM
Add-AzureDataDisk
-CreateNew -DiskSizeInGB $Disksize -DiskLabel $linuxdatadisklabel -LUN $LatestlinuxVMLUN
-MediaLocation $linuxdatadiskuri -HostCaching ReadOnly -VM $linuxvm |
Update-AzureVM  

接下来我们连接虚拟机创建磁盘分区和文件系统,对于Linux虚拟机还需要修改FSTAB加载文件挂载点,这部分内容相对容易,可以参考Azure相关文档进行设置本文不做讨论。

 现在我们需要对虚拟机磁盘进行扩充了,首先查看当前Windows环境和Linux环境如下:

wKiom1XxWXGALxjIAAM-yQRFmxM745.jpg

文件系统输出:


root@shzhailinuxdemo:~#blkid
/dev/sr0:LABEL="rd_rdfe_stable.150807-1029" TYPE="udf"
/dev/sda1:LABEL="cloudimg-rootfs"UUID="3156d3f3-c771-498f-89f3-c204d36c46d6" TYPE="ext4"
/dev/sdb1:UUID="552a5a0f-cf4d-4286-a466-14c3af803611" TYPE="ext4"
/dev/sdc1:UUID="527b77e2-b004-46e2-a41c-47fc2067f798" TYPE="ext4"
FSTAB输出:
root@shzhailinuxdemo:~#tail -1 /etc/fstab
/dev/sdc1       /mnt/test       auto   defaults,noatime        0       0  

查看当前大小:


root@shzhailinuxdemo:~#df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda1        30G 1012M   28G  4% /
none            4.0K     0 4.0K   0% /sys/fs/cgroup
udev            1.7G   12K 1.7G   1% /dev
tmpfs           345M 400K  344M   1% /run
none            5.0M     0 5.0M   0% /run/lock
none            1.7G     0 1.7G   0% /run/shm
none            100M     0 100M   0% /run/user
none             64K     0  64K   0%/etc/network/interfaces.dynamic.d
/dev/sdb1        50G  52M   47G   1% /mnt
/dev/sdc1        99G  60M   94G   1% /mnt/test  

现在我们按照要求关闭虚拟机,选择需要扩展的磁盘,扩充最后再启动虚拟机扩充磁盘。

第一步,关闭虚拟机;


$winvm = Get-AzureVM -ServiceName shawnzhaidemocloud -name shzhaiwindemo
$linuxvm = Get-AzureVM -ServiceName shawnzhaidemocloud -Name shzhailinuxdemo
$vms = ($winvm,$linuxvm)
for ($i=0;$i -lt $vms.count;$i++) {Stop-AzureVM -VM $vms[$i] -ServiceName $vm s[$i].ServiceName -Force}  

第二步,选择磁盘进行扩展,扩展到1000GB; 注意如果是不确定需要通过磁盘卷标Label进行扩充,


$disks = 
    $vms `
    | Get-AzureDataDisk `
    | Out-GridView `
        -Title "Select a data disk you want to resize"`
        -PassThru 
for($i=0;$i -lt $disks.count;$i++){Update-AzureDisk -diskname $disks[$i].DiskName-Label $disks[$i].DiskLabel -ResizedSizeInGB 1000}  

第三步,启动虚拟机;


for($i=0;$i -lt $vms.count;$i++) {Start-AzureVM -VM $vms[$i] -ServiceName $vms[$i].ServiceName}  

最后一步,扩充磁盘 WindowsServer 2012 R2,

wKioL1XxXw2TOZJnAAQgLuoiCvY821.jpg

wKiom1XxXOCy_bCiAAVZT2Ob57M628.jpg

LinuxUbuntu 14.04 LTS,我们将卸载文件系统,删除当前分区;重新创建分区,检查扫描文件系统,重新修改文件系统大小;最后重新挂载分区;


root@shzhailinuxdemo:/#umount /dev/sdc1
root@shzhailinuxdemo:/#fdisk /dev/sdc
 
Command(m for help): p
 
Disk/dev/sdc: 1073.7 GB, 1073741824000 bytes
43heads, 44 sectors/track, 1108431 cylinders, total 2097152000 sectors
Units= sectors of 1 * 512 = 512 bytes
Sectorsize (logical/physical): 512 bytes / 512 bytes
I/Osize (minimum/optimal): 512 bytes / 512 bytes
Diskidentifier: 0x5cf6b1a8
 
   Device Boot      Start         End      Blocks  Id  System
/dev/sdc1            2048   209715199  104856576   83  Linux
 
Command(m for help): d
Selectedpartition 1
Command(m for help): p
Disk/dev/sdc: 1073.7 GB, 1073741824000 bytes
43heads, 44 sectors/track, 1108431 cylinders, total 2097152000 sectors
Units= sectors of 1 * 512 = 512 bytes
Sectorsize (logical/physical): 512 bytes / 512 bytes
I/Osize (minimum/optimal): 512 bytes / 512 bytes
Diskidentifier: 0x5cf6b1a8
   Device Boot      Start         End      Blocks  Id  System
Command(m for help): w
Thepartition table has been altered!
 
Callingioctl() to re-read partition table.
Syncingdisks.
 
root@shzhailinuxdemo:/#fdisk /dev/sdc
Command(m for help): n
Partitiontype:
   p  primary (0 primary, 0 extended, 4 free)
   e   extended
Select(default p): p
Partitionnumber (1-4, default 1):
Usingdefault value 1
Firstsector (2048-2097151999, default 2048):
Usingdefault value 2048
Lastsector, +sectors or +size{K,M,G} (2048-2097151999, default 2097151999):
Usingdefault value 2097151999
Command(m for help): p
Disk/dev/sdc: 1073.7 GB, 1073741824000 bytes
255heads, 63 sectors/track, 130541 cylinders, total 2097152000 sectors
Units= sectors of 1 * 512 = 512 bytes
Sectorsize (logical/physical): 512 bytes / 512 bytes
I/Osize (minimum/optimal): 512 bytes / 512 bytes
Diskidentifier: 0x5cf6b1a8
   Device Boot      Start         End      Blocks  Id  System
/dev/sdc1            2048  2097151999 1048574976   83  Linux
Command(m for help): w
Thepartition table has been altered!
 
Callingioctl() to re-read partition table.
Syncingdisks.
 
root@shzhailinuxdemo:/#e2fsck -f /dev/sdc1
e2fsck1.42.9 (4-Feb-2014)
Pass1: Checking inodes, blocks, and sizes
Pass2: Checking directory structure
Pass3: Checking directory connectivity
Pass4: Checking reference counts
Pass5: Checking group summary information
/dev/sdc1:12/3203072 files (0.0% non-contiguous), 247073/12800000 blocks
 
root@shzhailinuxdemo:/#resize2fs /dev/sdc1
resize2fs1.42.9 (4-Feb-2014)
Resizingthe filesystem on /dev/sdc1 to 262143744 (4k) blocks.
Thefilesystem on /dev/sdc1 is now 262143744 blocks long.
 
root@shzhailinuxdemo:/#df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda1        30G 1012M   28G  4% /
none            4.0K     0 4.0K   0% /sys/fs/cgroup
udev            1.7G  8.0K 1.7G   1% /dev
tmpfs           345M 392K  344M   1% /run
none            5.0M     0 5.0M   0% /run/lock
none            1.7G     0 1.7G   0% /run/shm
none            100M     0 100M   0% /run/user
none             64K     0  64K   0%/etc/network/interfaces.dynamic.d
/dev/sdb1        50G  97M   50G   1% /mnt
/dev/sdc1       985G  72M  935G   1% /mnt/test  


总结一下,现在已经调整完毕;大致看完这个流程,希望对使用不同操作系统的大家调整磁盘大小有所帮助;当然根据最佳实践可以考虑最初创建磁盘就按照最大大小设置数据磁盘;此外还可以通过多个磁盘设置软RAID扩充大小,搭载了分区卷管理进行磁盘配置可以更灵活而且更方便。



转载于:https://blog.51cto.com/3387405/1693525

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调整Azure中虚拟机数据磁盘大小实践 的相关文章

随机推荐

  • loglog matlab,MATLAB 函数loglog()

    它使用x和y轴的对数刻度生成向量x和y的图 句法 loglog Y It should plot the columns of Y versus their index if Y includes real numbers If Y inc
  • k30s刷鸿蒙系统,Redmi K30S至尊版喜提MIUI 12.5稳定版

    Redmi K30S至尊版喜提MIUI 12 5稳定版 2021 05 07 13 20 05 16点赞 18收藏 104评论 进入5月 xff0c 第二批升级MIUI 12 5的机型也陆续开启推送 xff0c 在五一小长假期间包括Redm
  • html中有序列表的css样式,CSS 列表样式(ul)

    CSS 列表 CSS 列表属性作用如下 xff1a 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 列表 在 HTML 中 xff0c 有两种类型的 HTML列表 xff1a 无序列表 列表项的标记使用
  • 网易邮箱发送失败服务器连接失败,网易邮件发送不出去MI:SFQ错误

    因为业务需要 xff0c 写了一个在线留言发送到邮箱的小程序 xff0c 前几天使得挺好 突然发送不了了 xff0c 报错事务失败 服务器响应为 5 5 0 MI STC 经过百度查询 xff0c 发现是 550 MI STC 短期内发送了
  • ajax部分验证表单数据,简单的Ajax+Servlet表单数据验证

    var XMLHttpReq 创建XMLHttpRequest对象 function createXMLHttpRequest if window XMLHttpRequest Mozilla 浏览器 XMLHttpReq 61 new X
  • 云服务器装操作系统吗,云服务器能装操作系统吗

    云服务器能装操作系统吗 内容精选 换一换 监控是保持云耀云服务器可靠性 可用性和性能的重要部分 xff0c 通过监控 xff0c 用户可以观察云耀云服务器资源 为使用户更好地掌握自己的云耀云服务器运行状态 xff0c 公有云平台提供了云监控
  • 打造性能服务器图片,详解用node-images打造简易图片服务器.pdf

    详详解解用用node images 打打造造简简易易图图片片服服务务器器 Edit 2016 5 11 修正了代码里面一些明显的错误 xff0c 并发布在 aj axj s 之中 xff0c 源码在这里 Edit 2016 5 24 加入
  • 企业应用:浅谈 “数据权限” 和 查询 API 设计

    背景 多数企业应用都需要对数据权限进行控制 xff0c 如 xff1a 某个用户只能看到某个范围的数据 xff08 数据行 xff09 某个用户只能看到某几列数据 xff08 数据列 xff09 本文以数据行级别的权限控制为范例 xff0c
  • 您必须了解的4种OpenStack Neutron网络类型

    如果您托管的OpenStack虚拟实例需要网络连接 xff0c 则必须创建一个网络 有多种类型的网络 xff0c 为了做出正确的选择 xff0c 您至少需要了解两个非常重要的网络属性 xff1a router xff1a external
  • 动态链接库*.so的编译与使用- -

    动态链接库 so的编译与使用 动态库 so在linux 下用c和c 43 43 编程时经常会碰到 xff0c 最近在网站找了几篇文章介绍动态库的编译和链接 xff0c 总算搞懂了这个之前一直不太了解得东东 xff0c 这里做个笔记 xff0
  • Linux系统VNC配置实践总结

    VNC 概述 VNC Virtual Network Computing 是 虚拟网络 计算机 的缩写 VNC 是一款优秀的 远程控制 工具软件 xff0c 由著名的 AT amp T 的欧洲研究实验室开发的 VNC 是在基于 UNIX 和
  • linux不需要杀毒软件

    linux一般不需要杀毒软件 所有在windows下的病毒在linux下都失效 xff0c 即使你下载一堆病毒 xff0c 不论多强的病毒 xff0c 对病毒狂点都没事 既然没中毒 xff0c 切换回windows当然也没事 xff0c 但
  • 使用badblocks命令检测、修复硬盘坏道

    badblocks是Linux下常用的坏道修复工具 当你觉得硬盘上可能有坏道 xff0c 或者是SMART数据显示有坏道的时候 xff0c 都可以用badblocks来检查一下 假设我们要检查的硬盘是 dev sdb sudo badblo
  • python3 如何给装饰器传递参数

    引子 之前写过一篇文章用来讲解装饰器 https www cnblogs com JiangLe p 9309330 html 那篇文章的定位是入门级的 所以也就没有讲过多的高级主题 xff0c 决定在这里讲一下如果为装饰器传递参数 目标
  • VirsualBox 安装Ubuntu上不了网

    VirsualBox 安装Ubuntu上不了网 xff0c 可以ping通 xff0c 但是浏览器上不了网 可以选择双网卡 xff0c 如下 xff1a 桥接网卡为了是上外网 xff0c NAT为了上内网 能够SSH连接 囧囧小先生一直是技
  • martian source packets(ll header)

    原文地址 xff1a http blog chinaunix net space php uid 61 346158 amp do 61 blog amp id 61 2131002 martian source packets ll he
  • java爬虫学习日记2-宽度优先爬虫代码实现

    爬虫两种方式 宽度优先和带偏好爬虫 先复习下上次学了什么 xff1a URL和URI的结构组成根据指定网址爬取网站内容 xff08 get方式和post方式 xff09 上一日记中学到了抓取单个页面内容的方法 xff0c 但实际项目中则需要
  • x11vnc 安装及使用

    x11vnc 安装及使用 TOC CentOS 7 安装 yum install y x11vnc 默认yum源中没有x11vnc的 在epel repo里有 为x11vnc创建密码 x11vnc storepasswd sudo mv v
  • 导出数据库数据成txt格式

    set verify off set colsep 分隔符 set echo off set feedback off set heading off set pagesize 0 set linesize 10000 set numwid
  • 调整Azure中虚拟机数据磁盘大小实践

    首先 xff0c 在Azure中关于数据存储的付费规则中规定 xff0c 只要你使用的不是Azure的XIO高级存储提供的I O密集型的高吞吐低延迟的服务 xff0c 那么得益于Azure存储设计中采用的稀疏文件方式存储 xff0c 存储虚