Combinar archivos AVHDX en un único VHDX

Con equipos virtualizados mediante Hyper-V es posible realizar instántaneas / puntos de control / checkpoints de un estado completo de la máquina virtual. Esta posiblidad nos permite jugar en el tiempo con el estado de la máquina, realizar copias de seguridad, diferenciales... todas las ventajas de la virtualización.

En ocaciones es posible que el espacio ocupado por todos estos movimientos empieza a quedar pequeño, pese a eliminar puntos de control obsoletos no siempre se realiza la acción correspondiente en los ficheros de disco duro, creandose archivos diferenciales:

Lo primero que buscamos es el disco que queremos combinar, para ello desde la configuración de la máquina virtual tenemos que apunta a un fichero AVHDX en lugar de un VHDX pese a no tener puntos de control en activo:

 

Este es el último punto de control que utiliza, a partir de aquí debemos navegar pulsando en el botón "Inspeccionar" para conocer el siguiente fichero padre, de esta manera tendremos el árbol correcto de los discos. Es importante NO UTILIZAR la fecha de modificación de los ficheros AVHDX para establecer el orden de combinación, dependerá del uso que hayamos tenido del árbol de puntos de control que coincida o no con el real:

Una vez aclarado el orden, dependiendo de la versión de Hyper-V podremos hacerlos con la máquina encendida o apagada. Buscaremos la opción de "Editar disco...". Seleccionando desde el primer nodo (el que apunta directamente nuestra máquina virtual) y los siguientes EN ORDEN:

La opción de "Combinar" solo nos aparece al seleccionar un archivo diferencial AVHDX, a partir de entonces seguiremos la misma operación de manera secuencial sobre el resto de archivos.

 

Una vez finalizado el proceso, recuerda apuntar al nuevo último punto de combinación que hayas dejado.

Revisa la configuración de replicación si esta activada con otra máquina antes de proceder con la combinación de discos.


Creación de PFX a partir de clave pública y privada

En entornos Windows la encapsulación de certificado en ocasiones suele ser algo complicada en algunos contextos. En este en concreto, plantemos unir un certificado CER/CRT (es lo mismo) recibido con la clave pública con otro archivo con las claves privadas en un único archivo PFX

En ocasiones se utilizan diferentes extensiones para los certificados, lo primero es identificar cada fichero, podemos abrirlos con bloc de notas y reconocer las cabeceras:

Certificado público (micertificado.cer):

-----BEGIN CERTIFICATE-----
MIIFszCCBJugAwIBAgIQCn/RxfJgDNYmoD7jyCSfGjANBgkqhkiG9w0BAQsFADBe
...BLOQUE DE TEXTO...
KPYJupIYuFSDoL/C77KF9zntk1gft5o=
-----END CERTIFICATE-----

Clave privada asociada (clave.key):

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAzHvXgg7VbCHXDSihNDx3q5GrNhDhnw2IAU/z259t6wi+gTjv
..BLOQUE DE TEXTO...
PEMYrxRR46jUuQqNpqYqYk5Trg6dtjKf6/82caESpr1vYG0uErwXTow=
-----END RSA PRIVATE KEY-----

Necesitaremos varias herramientas:

  1. pvk2pfx en SDK Windows, en este caso de Windows 10 pero esta disponible para otras versiones
  2. Utilidad PVK de Stephen N Henson [mirror 1]

A partir de nuestro archivo de claves privadas (clave.key) generaremos un archivo PVK ejecutando (C:\Program Files (x86)\Windows Kits\10\bin\x64\):

PVK.exe -in clave.key -topvk -out misclaves.pvk -strong

Nos pedirá que introduzcamos una contraseña. Con los dos ficheros misclaves.pvk + micertificado.cer ejecturemos contra la herramienta del SDK asegurando las rutas de acceso:

pvk2pfx.exe /pvk misclaves.pvk /spc micertificado.cer /pfx MiCertificadoCompleto.pfx

 

Ya tendremos unificado en un fichero toda la información.

 

Manual Pvk2Pfx

12 de octubre: Fiesta Nacional de España

He recibido un texto, en el que lo único que puedo hacer es pequeñas correcciones... añadir información adicional y publicarlo. Va desapareciendo el complejo autoimpuesto de celebrar:

En el cole les enseñarán a celebrar Halloween, carnaval o el día de la paz, pero no el día de su Patria. Cuéntales que no es sólo un día de fiesta. Que es el día de España.

Diles que estamos aquí desde hace milenios. Que éramos tan tercos que preferíamos morir a ser esclavos. Háblales de Numancia y Sagunto. De la “Devotio ibérica”. De cómo el honor y la lealtad ya eran nuestra divisa hace más de 2000 años.
 
Cuenta a tus hijos que hemos pasado siglos peleando contra el invasor. Que cada palmo de la tierra que pisamos se ganó luchando. Y que aquellos que cayeron combatiendo no morirán nunca.
 
Cuéntales que fuimos capaces de conquistar otro mundo. Y que lo llamamos Nueva España. Que peleamos contra ejércitos de guerreros de leyenda en su propia tierra. Y que vencimos. Que derrotamos a aquellos que usaban a otras tribus como ganado y masacraban a sus esclavos en altares. Y cuéntales que allí construimos universidades, hospitales y catedrales.
 
Que les llevamos nuestro idioma y nuestro arte. Enséñales a no creer las mentiras que inventaron aquellos que siempre nos odiaron para encubrir sus propios crímenes.
 
Habla a tus hijos de Hernán Cortés, de Francisco Pizarro, de Mencía Calderón, Hernando de Soto, Ponce de León, Núñez de Balboa… Cuéntales que lanzamos expediciones por todo el mundo. Que buscábamos aventura y conocimiento. Y que llevamos nuestra cultura, nuestros valores y hasta vacunas gratis.
 
 
No dejes que olviden a qué pueblo pertenecen. Que fuimos un imperio donde no se ponía el sol y que el mundo fue una selva de picas españolas. Háblales de nuestros Tercios victoriosos. Diles que fuimos el escudo de Europa. Que defendimos nuestra cultura cuando todo eran enemigos.
 
Enséñales que haría falta una vida para contar todas las gestas de España y que cada latido del corazón nos recuerda que llevamos la misma sangre de aquellos que dieron su vida por España. Que renegar de la patria es tan miserable como despreciar a una madre. Que ser español es un orgullo y que nuestra forma de vivir ha de hacernos dignos de tal honor.
 
Di a tus hijos que hoy es el día de La Patria.
 
 

Descargar archivos grandes desde Azure Storage con Firmas de acceso compartido (SAS)

El almacenamiento de datos en cloud debe conllevar una política de acceso y control adecuada al tipo de información. Dentro de Azure podemos utilizar direcciones de enlace temporales para operaciones con ficheros en diversos escenarios. En nuestro caso utilizaremos SAS (Shared Acces Signature) para la descarga directa de archivos de gran volumen, de esta forma además de un mayor control tambien descargaremos de operaciones de entrada/salida a nuestro servidor, permitiendo mayor rapidez de acceso.

La dirección que se genera es del tipo:

https://miespacio.blob.core.windows.net/MiContenedor/MiFichero.zip?sv=2016-05-31&sr=b&sig=Kasdf8mqcgh4NMjQcRaZMTA1bSpXJrajsy404ZkDipE%3D&se=2018-08-27T12%3A10%3A33Z&sp=r

Donde distinguimos a continuación de la dirección URI del recurso un Token formado por:

  • sv: versión de API para ejecutar
  • sr: especificamos B para un blob y C para container
  • se: fecha limite a partir de la cual el enlace expira
  • sp: permisos asociados, en este caso R solo de lectura

Para ver más parametros adicionales y otras opciones tienes disponible la documentación completa aquí.

CloudStorageAccount cuentaAlmacen = new CloudStorageAccount(new StorageCredentials("miespacio", "clave"), true);
        var blobClient = cuentaAlmacen.CreateCloudBlobClient();
		
        var container = blobClient.GetContainerReference("MiContenedor");
        var blob = container.GetBlockBlobReference("MiFichero.zip");
		
        var token = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(60),
            }, new SharedAccessBlobHeaders()
            {
                ContentDisposition = "attachment; filename="+nombreFichero
            });

        var url = string.Format("{0}{1}", blob.Uri, token);
        Response.Redirect(url, true);

 

Microsoft SQL Server Management Studio: cache is out of date

Es agosto, el software tambien necesita vacaciones...

Si durante las consultas a algunas tablas en MSSMS aparece el error "The Visual Studio componente cache is out of date" la solución rápida y sencilla pasa por vaciar la carpeta temporales de windows %TMP%

C:\Users\nombre_usuario_windows\AppData\Local\Temp\

Si además el servidor SQL esta en medio de la playa mientras tu sigues programando, puedes probar a seguir con la limpieza de más memorias intermedias, si utilizas Server 2016 o Azure puedes limpiar la cache de los procedimientos de la base de datos:

USE NombreDeMiBBDD;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

 

Mientras esperas que la consulta devuelva los valores esperados ;D