DPMレプリカのディスク容量不足エラーの解決方法

システム管理者の皆さん、こんにちは。今日は私が実際に遭遇したDPM 2019(Data Protection Manager 2019)のエラーとその解決方法について共有したいと思います。

DPM 2019を使用中に次のようなエラーメッセージが表示されたことはありませんか?

Description: DPM is out of disk space for the replica. (ID 58 Details: There is not enough space on the disk (0x80070070))

このエラーは、DPMがレプリカ用のディスク容量を使い果たしたときに発生します。バックアップを継続するためには、レプリカのサイズを増やす必要があります。ここでは、その解決方法を詳しく説明します。

背景説明

DPMでは、保護するデータに対して「レプリカ」と呼ばれる領域を確保してバックアップを格納します。時間の経過とともにデータが増加すると、最初に設定したレプリカサイズが不足し、バックアップが失敗するようになることがあります。

私の環境では、増え続けるデータに対してレプリカサイズが小さく設定されていたため、このエラーが発生しました。バックアップが失敗するようになったので、早急な対応が必要でした。

解決方法:PowerShellスクリプトを使用したレプリカサイズの変更

DPM管理コンソールからレプリカサイズを変更できない場合は、Microsoft公式のTechCommunityで紹介されているPowerShellスクリプトを使用して、レプリカサイズを増やすことができます。以下にその手順を詳しく解説します。

1. レプリカサイズを変更するスクリプトを実行する

次に、以下のPowerShellスクリプトを使ってレプリカサイズを確認・変更します。管理者権限でPowerShell ISEを起動して実行します。

#Resized Replica Volume on Modern Backup Storage
#Tested on DPM 2016 + UR2 on Windows 2016.
# V1.1 - added error checking when defragsvc is disabled
# V1.2 - Only include PG's with short term disk is true IsDiskShortTerm = 1 + show size in MB
$version="V1.2"
$ErrorActionPreference = "silentlycontinue"

[uint64] $GB=1024*1024*1024
$logfile="ResizeReplica.LOG"
$confirmpreference = "None"

function Show_help
{
cls
write-host "Version: $version" -foregroundcolor cyan
write-host "A: User Selects data source to resize replica" -foregroundcolor green
write-host "B: User enters new Replica Size in GB" -foregroundcolor green
write-host "Appending to log file $logfile`n" -foregroundcolor white
write-host "User Accepts all responsibilities by entering a data source or just pressing [Enter] " -foregroundcolor white -backgroundcolor blue

}

"" >>$logfile
"**********************************" >> $logfile
"Version $version" >> $logfile
get-date >> $logfile
show_help

$DPM = Connect-dpmserver -Dpmservername (&hostname)
$DPMservername = (&hostname)
"Selected DPM server = $DPMservername" >> $logfile
write-host "`nRetrieving list of data sources on $Dpmservername`n" -foregroundcolor green
$pglist = @(Get-ProtectionGroup |where { $_.IsDiskShortTerm -eq 1}) # Created PGlist as array in case we have a single protection group.
$ds=@()
$count = 0
$dscount = 0
foreach ($count in 0..($pglist.count - 1))
{
#write-host $pglist[$count].friendlyname
$ds += @(get-datasource $pglist[$count]) # Created DS as array in case we have a single protection group.
#write-host $ds
#write-host $count -foreground yellow
}
if ( Get-Datasource $DPMservername -inactive) {$ds += Get-Datasource $DPMservername -inactive |where {$_.IsDiskInactive -eq 1}} #Include Inactive DataSources with Disk Protection

$i=0
write-host "Index Protection Group Computer Path Replica-Size-MBytes"
write-host "------------------------------------------------------------------------------------------------------"
foreach ($l in $ds)
{
"[{0,3}] {1,-20} {2,-20} {3,-35} {4}" -f $i, $l.ProtectionGroupName, $l.psinfo.netbiosname, $l.logicalpath, ($l.replicasize/1024/1024)
$i++
}
$DSname=read-host "`nEnter a data source index number from the list above."

if (!$DSname)
{
write-host "No datasource selected, exiting.`n" -foregroundcolor yellow
"Aborted on no Datasource index selected" >> $logfile
exit 0
}
$DSselected=$ds[$DSname]
if (!$DSselected)
{
write-host "No valid datasource selected, exiting. `n" -foregroundcolor yellow
"Aborted on invalid Datasource index number" >> $logfile
exit 0
}

if ($DSselected.Replicasize -gt 0)
{
$Replicasize=[math]::round($DSselected.Replicasize/$GB,1)
$line=("Current Replica Size = {0} GB for selected data source: $DSselected.name" -f $Replicasize)
$line >> $logfile
write-host $line`n -foregroundcolor white
}


[uint64] $NewReplicaGB=read-host "Enter new Replica size in GB"
if ($Replicasize -ge $NewReplicaGB)
{
write-host New Replica size must be greater than current size of $Replicasize GB - Exiting.
$line =("New Replica size must be greater than current size - Exiting")
$line >> $logfile
exit 0
}
$line=("New Replica Size = {0} GB " -f $NewReplicaGB)
$line >> $logfile
write-host $line`n -foregroundcolor white

# execute the resize
Write-host "Processing Resize Request. Please wait..."
$error.clear()
$DPM.Proxy.ResizeReplica($DSSelected.DataSourceID,$NewReplicaGB*$GB)
if($error)
{
$line=("Error Extending !! - aborted. ---> Verify Optimize Disk (defragsvc) Service startup type is set to Manual then retry the operation.")
$line >> $logfile
write-host $line`n -foregroundcolor red
Disconnect-dpmServer
exit 1
}

 

$line = "Resize Process Done ! "
write-host $line
$datetime = get-date
$line = $line + $datetime
$line >> $logfile
$line="Do you want to View $logfile file Y/N ? "
write-host $line -foregroundcolor white
$Y=read-host
$line = $line + $Y
$line >> $logfile
if ($Y -ieq "Y")
{
Notepad $logfile
}

スクリプトを実行するとインデックス番号やプロテクショングループが表示されます。Enter a data source index number from the list above.:  と表示されたら、レプリカサイズを変更したいアイテムのインデックス番号を入力してエンター。

次にEnter new Replica size in GB:  と表示されるので、ここでレプリカサイズを現状より大きいサイズに変更します。

4. スクリプト実行中の注意点

スクリプトを実行すると以下のプロセスが自動的に実行されます:

  1. 指定したデータソースの保護を一時的に停止

  2. レプリカサイズを新しい値に変更

  3. 保護を再開

この処理中はバックアップが実行されないので、バックアップスケジュールに影響のない時間帯に実行することをお勧めします。

実際に解決した体験談

私の環境では、サーバーのベアメタルリカバリ(BMR)用のバックアップが突然「ディスク容量不足」エラーで失敗するようになりました。

実際に、BMRバックアップを設定して数日経過した後で、OSの更新やアプリケーションの追加によりバックアップサイズが増加し、デフォルトのレプリカサイズを超えてしまったのが原因だと思われます。

参考リンク

このトラブルシューティング記事が皆さんのお役に立てば幸いです。同様の問題に遭遇された方は、ぜひ試してみてください。

前へ
前へ

Azure Reservationsを活用してクラウドコストを削減する