苦情を受けました...
助けて!私の
I
ドライブはEC2-Server-1
でいっぱいになりました!モアスペースを与えてください!
ただし、ボリュームを拡張する前にサーバー上でリモート接続すると、拡張する必要があるどの EBSボリュームを簡単に把握できないことがわかります。
aws ec2 describe-instances --filters "Name=tag:Name,Values=EC2-Server-1"
を実行すると、$.Reservations.Instances.BlockDeviceMappings
にある関連情報が表示されます...
DeviceName Ebs
---------- ---
/dev/sda1 @{VolumeId=vol-0123;...}
xvdf @{VolumeId=vol-0456;...}
xvdj @{VolumeId=vol-0789;...}
xvdg @{VolumeId=vol-0abc;...}
...
このガイダンス に続いて、私はで見ることができます Disk Management 下 Properties > General forDisk 2(Drive Letter I
)the Location 値はBus Number 0, Target Id 6, LUN 0
です。同じページから Windowsボリュームマッピングテーブル でこの値を調べると、対応するDeviceName
はxvdg
であり、これはvol-0abc
にマップされます。
だから...素晴らしい...今、私はこれを行う必要があるたびに約5つのダイアログボックスをクリックする必要があります(またはAWSコンソールとWindowsエクスプローラーからのサイズのあいまい一致)。
私は現在、さまざまなwmic
の反復をラバーダックしていますが、これが解決された問題である可能性はありますか?
関数の下 は、EC2ホストのコンテキスト内で実行されると、特定のドライブ文字に対してBlockDeviceName
とEBSVolumeID
を返します。複数のディスクにまたがるドライブには対応しますが、複数のEBSボリュームにまたがるディスクには対応しません。
function Get-EbsDeets {
[cmdletbinding()]Param(
[string[]]$DriveLetter
)
# $wmiVol = Get-WmiObject Win32_Volume | Where DriveLetter -eq "$DriveLetter`:"
$wmiLd = Get-WmiObject Win32_LogicalDisk | Where {($_.DeviceID).Trim(':') -in $DriveLetter}
$wmiLd | ForEach-Object {
$Letter = $_.DeviceID
$wmiLd2p = Get-WmiObject Win32_LogicalDiskToPartition | Where Dependent -in $_.__PATH
$wmiDd2p = Get-WmiObject Win32_DiskDriveToDiskPartition | Where Dependent -in $wmiLd2p.Antecedent
$wmiDsk = Get-WmiObject Win32_DiskDrive | Where __PATH -in $wmiDd2p.Antecedent
$wmiDsk | ForEach-Object {
$EstimatedVolumeId = $_.SerialNumber.Insert(3,'-')
$DeviceName = (ec2WinVolMap $_.SCSIBus -target $_.SCSITargetId -lun $_.SCSILogicalUnit).DeviceName
$VolumeType = (ec2WinVolMap $_.SCSIBus -target $_.SCSITargetId -lun $_.SCSILogicalUnit).VolumeType
$SizeGb = [Math]::Round(($_.Size / 1gb),2)
[PSCustomObject]@{
DriveLetter = $Letter
DiskNumber = $_.DeviceId
DeviceName = $DeviceName
VolumeType = $VolumeType
VolumeId = $EstimatedVolumeId
SizeGb = $SizeGb
}
}
}
}
Function ec2WinVolMap {
[cmdletBinding()]Param(
$bus
,$target
,$lun
)
# https://docs.aws.Amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-volumes.html#windows-volume-mapping
# https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html
$Lookup = @"
Bus,Target,LUN,DeviceName,VolumeType
0,0,0,/dev/sda1,ebs
0,1,0,xvdb, ebs
0,2,0,xvdc, ebs
0,3,0,xvdd, ebs
0,4,0,xvde, ebs
0,5,0,xvdf, ebs
0,6,0,xvdg, ebs
0,7,0,xvdh, ebs
0,8,0,xvdi, ebs
0,9,0,xvdj, ebs
0,10,0,xvdk,ebs
0,11,0,xvdl,ebs
0,12,0,xvdm,ebs
0,13,0,xvdn,ebs
0,14,0,xvdo,ebs
0,15,0,xvdp,ebs
0,16,0,xvdq,ebs
0,17,0,xvdr,ebs
0,18,0,xvds,ebs
0,19,0,xvdt,ebs
0,20,0,xvdu,ebs
0,21,0,xvdv,ebs
0,22,0,xvdw,ebs
0,23,0,xvdx,ebs
0,24,0,xvdy,ebs
0,25,0,xvdz,ebs
0,78,0,xvdca,instance-store
0,79,0,xvdcb,instance-store
0,80,0,xvdcc,instance-store
0,81,0,xvdcd,instance-store
0,82,0,xvdce,instance-store
0,83,0,xvdcf,instance-store
0,84,0,xvdcg,instance-store
0,85,0,xvdch,instance-store
0,86,0,xvdci,instance-store
0,87,0,xvdcj,instance-store
0,88,0,xvdck,instance-store
0,89,0,xvdcl,instance-store
"@ | ConvertFrom-Csv
$DeviceName = ($Lookup | Where-Object {
$_.Bus -eq $bus -and `
$_.Target -eq $target -and `
$_.LUN -eq $lun
}).DeviceName
$VolumeType = ($Lookup | Where-Object {
$_.Bus -eq $bus -and `
$_.Target -eq $target -and `
$_.LUN -eq $lun
}).VolumeType
[PSCustomObject]@{
DeviceName = $DeviceName
VolumeType = $VolumeType
}
}
上記の制限がある場合、EBSVolumeID
を見積もることができます。 (の最初のボリューム)Win32_DiskDrive
のSerialNumber
属性を検査することにより、特定のディスク。 @bjoster
の回答 に記載されているように、以前にリンクされたテーブルに基づいてBlockDeviceName
を検索するために必要なバス、ターゲット、およびlunの値を取得することもできます AWSドキュメント 。
ただし、イライラすることに、これは実際のドライブ文字または名前に簡単にマップすることはできません。実際のユーザーの苦情。これらの属性(私の場合は Win32_LogicalDisk
コレクションにあります)を関連付けるには、Win32_LogicalDiskToPartition
およびWin32_DiskDriveToDiskPartition
の先行/依存マッピングをデイジーチェーン接続します。コレクション。
これを一緒に組み合わせると、インストール時にWin32_DiskDriveToDiskPartition
がディスクに1:1でマップされることに気付きました。 Win32_LogicalDiskToPartition
はEBSボリュームの数と一致しますが(ディスクごとに複数のボリュームの場合)、BlockDeviceName
を取得するために必要なバス、ターゲット、およびlunを関連付ける方法をまだ理解していません。非プライマリの基になるボリューム(存在する場合)。これらが取得されたが、何らかの理由で非プライマリボリュームのEBS VolumeID
がすぐに認識されない場合は、次の方法でAWSPowerShell関数を呼び出すことを検討している可能性があります。
$bdn = 'xvdg'
# assuming you've tagged your instance with the hostname
$ec2 = Get-EC2Instance -Filter @{Name='tag:Name';Values='EC2-Server-1'}
($ec2.Instances.BlockDeviceMappings | Where DeviceName -eq $bdn).Ebs
はいあります。 PowerShell(WMIを使用)が役に立ちます:
Get-WmiObject Win32_DiskDrive | select-object DeviceID,size,scsiport,scsibus,scsitargetid,scsilogicalunit
これにより、次のことが可能になります。
DeviceID : \\.\PHYSICALDRIVE9
size : 234362882560
scsiport : 3
scsibus : 0
scsitargetid : 2
scsilogicalunit : 4