Tales from a Solution Architect vMotioning from Solution Engineering to Solution Architects

How veeam saved my day (at homelab) - Explained in detail

After writing the post How veeam saved my day (at homelab) and some DMs and mentions about it, I'm writing some-detailed how-to. Enjoy it :)

When I restarted my VCSA appliance, It got stuck on boot, showing nothing, being unresponsive and consuming 100% CPU, so I tried to recover from Veeam Backup v8( thank to Veeam for the NFR! ). I had some big troubles because my ESX host was dependant from VCSA and Veeam couldn't contact vCenter Server for registering and deploying the new machine.

Searching on Google I stumbled upon a post in Veeam forum who directed me to the solution.

  1. Open the Veeam B&R console and press the "Backup Infrastructure" button veeam backup infrastructure

  2. Open the "Managed Servers" display list veeam backup managed servers

  3. Right clic on "VMware vSphere" and "Add Server" veeam backup managed servers

  4. Add the server. If you used IP for adding it on your vCenter, use FQDN to add it on Veeam. If you used FQDN, use IP. veeam backup managed servers

Now you can do a new restore, on the new host and overwrite the old one, recovering the VCSA

How veeam saved my day (at homelab)

I was deploying PernixData (great software btw) when by some reason (I don't know why yet) after rebooting vCenter Server Appliance, I had a blank screen and 99% CPU usage. I tried to do a Instant Recovery with my Veeam Backup & Replication v8, but I had my managed servers under my vCenter in Veeam, so I had a big problem, I couldn't recover my VCSA (albeit I had a Veeam Backup of that same afternoon). If you meet sometime in this situation, I can tell you... That's FUBAR.

But there's a fix (always there's a fix), just simply add another Managed Server on the other way you can identify it (If in your vCenter you are using IP, use FQDN to add it) and make a full recovery :)

That will fix it!

P.S: I'm reading this post right now and I realize that It seems wrote by some-3-years-old kid, but in the moment I wrote this I had been awake 24 hours in a row (an incident with the bigger client), so I'm sorry if the writing offends your eyes ;)

Bash as default shell in Synology DSM

It's so simple... You only have to edit /root/.profile and add the following:

if [[ -x /usr/syno/synoha/bin/bash ]]; then
        exec /usr/syno/synoha/bin/bash

Hello world @ GitHub Pages!

Acaba de empezar otra nueva etapa de mi página, donde quiero olvidarme de WordPress, MySQL, vulnerabilidades de PHP y los cuelgues del intérprete... Así que me he decidido a probar Jekyll y GitHub Pages. Espero que esto dure más que otras veces que me he puesto con mi blog.

Exportar los planes de mantenimiento sin Integration Services

Documentando un proyecto de un cliente y en un intento de implementar Control de Versiones para todo lo referido a ese cliente, necesitaba exportar los planes de mantenimiento (Maintenance Plans) del SQL Server, que no tiene instalado los Integration Services. Gracias a dba.stackexchange.com (hurra!) encontré el siguiente post que explica (y te facilita la consulta SQL que te permitirá extraer los planes de mantenimiento como ficheros dtsx.

Para que quede disponible aquí, pego el código (all merit goes to billfellows.blogspot.com)

    -- Capture root node
        cast(PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
        msdb.dbo.sysssispackagefolders PF
        PF.parentfolderid IS NULL

<span class="rem" style="color: #008000;">-- build recursive hierarchy</span>
<span class="kwrd" style="color: #0000ff;">UNION</span> <span class="kwrd" style="color: #0000ff;">ALL</span>
<span class="kwrd" style="color: #0000ff;">SELECT</span>
    <span class="kwrd" style="color: #0000ff;">cast</span>(F.FolderPath + <span class="str" style="color: #a31515;">'\'</span> + PF.foldername <span class="kwrd" style="color: #0000ff;">AS</span> <span class="kwrd" style="color: #0000ff;">varchar</span>(<span class="kwrd" style="color: #0000ff;">max</span>)) <span class="kwrd" style="color: #0000ff;">AS</span> FolderPath
,   PF.folderid
,   PF.parentfolderid
,   PF.foldername
<span class="kwrd" style="color: #0000ff;">FROM</span>
    msdb.dbo.sysssispackagefolders PF
    <span class="kwrd" style="color: #0000ff;">INNER</span> <span class="kwrd" style="color: #0000ff;">JOIN</span>
        FOLDERS F
        <span class="kwrd" style="color: #0000ff;">ON</span> F.folderid = PF.parentfolderid

) , PACKAGES AS ( -- pull information about stored SSIS packages SELECT P.name AS PackageName , P.id AS PackageId , P.description as PackageDescription , P.folderid , P.packageFormat , P.packageType , P.vermajor , P.verminor , P.verbuild , suser_sname(P.ownersid) AS ownername FROM msdb.dbo.sysssispackages P ) SELECT -- assumes default instance and localhost -- use serverproperty('servername') and serverproperty('instancename') -- if you need to really make this generic 'dtutil /sourceserver localhost /SQL "'+ F.FolderPath + '\' + P.PackageName + '" /copy file;".\' + P.PackageName +'.dtsx"' AS cmd FROM FOLDERS F INNER JOIN PACKAGES P ON P.folderid = F.folderid -- uncomment this if you want to filter out the -- native Data Collector packages -- WHERE -- F.FolderPath <> '\Data Collector'