Stisknutím tlačítka "Enter" přeskočíte na obsah

Zobrazení závislostí mezi soubory disku

Tak jsem se opět dostal k tomu, že jsem potřeboval zjistit, jak jsou na sebe navázány soubory linkovaných disků.

S tímto se můžete setkat pokud vytvoříte snapshoty, nebo pokud používáte linkované klony ve svém prostředí.

Pak se můžete dostat do situace, že nevíte přesně které disky, resp. soubory tam ještě musí zůstat a které můžete už zapracovat.

Pomocí PowerCLI jsem si vypsal závislosti mezi jednotlivými soubory disků, které jsou připojené do VM a pak když si to seřadíte podle “abecedy”, tak vidíte jak jsou ty jednotlivé závislosti provázané a které disky (VM) vychází třeba ze stejných základů.

Napsal jsem si jednu PowerShell funkci, která vezme jako parametr disk VM a vypíše soubory jak jsou na sebe navázány.

Toto je možno díky tomu, že v každém descriptoru je i informace o předkovi (Parent), ze kterého tento disk je rozdílem. A to až po poslední “BASE” který už má jako parent “ffffffff” – nemá předka.

A stejné informace, místo připojení přes SSH na ESX hosta, můžete získat přes API, resp přes PowerCLI.

Tyto informace ale už nenajdete “jednoduše” v objektu získaném přes “Get-HardDisk” commandlet, ale musíte se podívat do ExtensionData.

Tohoto pak využívám ve funkci Get-HardDisk-Links níže.

function Get-HardDisk-Links { 
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline)]$HardDisk
    )
    if ($HardDisk.GetType().FullName -eq "VMware.VimAutomation.ViCore.Impl.V1.VirtualDevice.FlatHardDiskImpl" ) {
        $HardDisk = $HardDisk.ExtensionData.Backing
    }
    if ($null -eq $HardDisk.Parent) {
        return $HardDisk.FileName
    }
    else {
        return $((Get-HardDisk-Links $($HardDisk.Parent)) + " -> " + $($HardDisk.FileName))
    }
}

Jakmile si tuto funkci přidáte – stačí celý kód spustit v konzoli – tak už můžete v dané session použít třeba následující volání:

Get-VM A-DMZ | Get-HardDisk | Get-HardDisk-Links

Pokud má být výstupem pro disky pole, tak bohužel zatím takto

Get-VM | Get-HardDisk | %{ $_ | Get-HardDisk-Links}

Tak snad to někomu pomůže 🙂