[{"content":"Bio (Borrador — biografía corta pendiente.)\nContacto Email personal: me [at] inetshell [dot] mx Email profesional: me [at] inet [dot] sh GPG/PGP: TBD Redes Sociales Los iconos debajo enlazan a las mismas cuentas.\n","permalink":"https://inet.sh/es/acerca/","summary":"Biografía corta, contacto y redes.","title":"Acerca"},{"content":"Conocimientos Kubernetes Linux AWS GCP ","permalink":"https://inet.sh/es/cv/","summary":"Borrador de conocimientos.","title":"CV"},{"content":"En Linux el reflejo para “¿está abierto el 1433?” es:\n1 nc -v 10.1.1.1 1433 En Windows no hay nc de serie. El equivalente más cercano en PowerShell es probar si el puerto TCP acepta conexión:\n1 Test-NetConnection -ComputerName 10.1.1.1 -Port 1433 Alias corto:\n1 tnc 10.1.1.1 -Port 1433 Qué mirar TcpTestSucceeded:\nValor Significado True El puerto está abierto y responde (como cuando nc conectó) False No hay conexión (firewall, servicio caído, IP inalcanzable) Más detalle, al estilo nc -v:\n1 Test-NetConnection -ComputerName 10.1.1.1 -Port 1433 -InformationLevel Detailed Solo el puerto, sin ping Test-NetConnection también hace ICMP por defecto. Si solo quieres el TCP:\n1 2 Test-NetConnection -ComputerName 10.254.3.2 -Port 1433 -WarningAction SilentlyContinue | Select-Object ComputerName, RemoteAddress, RemotePort, TcpTestSucceeded PowerShell muy viejo Si Test-NetConnection no existe, el cliente TCP de .NET:\n1 2 3 4 5 6 7 8 9 $tcp = New-Object System.Net.Sockets.TcpClient try { $tcp.Connect(\u0026#34;10.254.3.2\u0026#34;, 1433) Write-Host \u0026#34;Conectado a 10.254.3.2:1433\u0026#34; } catch { Write-Host \u0026#34;Fallo: $($_.Exception.Message)\u0026#34; } finally { $tcp.Close() } ","permalink":"https://inet.sh/es/posts/windows/equivalente-netcat/","summary":"nc -v no viene en Windows. Test-NetConnection -Port es la prueba de puerto.","title":"Equivalente de netcat en Windows: Test-NetConnection"},{"content":"k3s deja estado en el disco del sistema. Si se llena / o quieres un disco más rápido, el procedimiento corto es: parar → mv → symlink → arrancar.\nEl destino (/datadrive aquí) tiene que existir y estar montado antes. Root o sudo.\n1 2 3 sudo systemctl stop k3s sudo systemctl stop k3s-agent # solo si este nodo es agent sudo /usr/local/bin/k3s-killall.sh 1 2 3 sudo mv /run/k3s/ /datadrive/k3s/ sudo mv /var/lib/kubelet/pods/ /datadrive/k3s-pods/ sudo mv /var/lib/rancher/ /datadrive/k3s-rancher/ 1 2 3 sudo ln -s /datadrive/k3s/ /run/k3s sudo ln -s /datadrive/k3s-pods/ /var/lib/kubelet/pods sudo ln -s /datadrive/k3s-rancher/ /var/lib/rancher 1 2 sudo systemctl start k3s sudo systemctl start k3s-agent # solo en agents 1 2 kubectl get nodes kubectl get pods -A Qué se mueve Origen Destino de ejemplo /run/k3s/ /datadrive/k3s/ /var/lib/kubelet/pods/ /datadrive/k3s-pods/ /var/lib/rancher/ /datadrive/k3s-rancher/ Ahí vive el estado de trabajo: containerd, manifests, pods. Un mv a medias o un start con las rutas vacías rompe el cluster.\nTrampas /run es tmpfs. Tras un reboot el symlink /run/k3s desaparece. Recréalo en un unit After=local-fs.target o no muevas /run/k3s y deja el runtime en RAM.\nk3s-agent no existe en un server-only. systemctl stop k3s-agent falla; no es un error de la migración.\nCrea el padre de los destinos (mkdir -p /datadrive) y confirma el mount (findmnt /datadrive) antes del mv. Un mv a un path que no está montado deja los datos en el disco viejo con otro nombre.\ncontainerd y kubelet a veces no quieren symlink. Si el node no vuelve Ready, cambia a bind mount en /etc/fstab:\n1 /datadrive/k3s-rancher /var/lib/rancher none bind 0 0 Alternativa más limpia: --data-dir El path “oficial” de k3s es --data-dir (/var/lib/rancher/k3s por defecto). En un nodo nuevo, instala con el data-dir ya en el disco grande. En uno existente, el mv + symlink (o bind) de /var/lib/rancher es el atajo; no reescribas el unit a ciegas a mitad de un cluster.\nGuía que documenta este mv + symlink: How to Move K3s Data to a New Location.\n","permalink":"https://inet.sh/es/posts/k3s/migrar-datos/","summary":"El disco del sistema se llena. Paras k3s, mueves los directorios, dejas un symlink y vuelves a arrancar.","title":"Mover los datos de k3s a otro disco"},{"content":"Microsoft dejó de dar soporte a Windows XP en abril de 2014 y a Windows Server 2003 / 2003 R2 en julio de 2015. Desde entonces no hay parches oficiales, no hay actualizaciones de Schannel/TLS y casi ningún fabricante prueba software contra esas plataformas.\nEl efecto práctico: ya no puedes “abrir Internet Explorer y listo”. IE 8 habla TLS 1.0 (a lo sumo 1.2 con hacks frágiles). Google Chrome dejó de soportar XP/Vista hace años; los instaladores actuales ni arrancan. Mozilla Firefox también abandonó XP (el último canal usable fue ESR antiguo). Los sitios bancarios, GitHub, paneles cloud y casi cualquier SaaS exigen TLS 1.2+ y HTTP/2 o Chromium reciente. El resultado en un ProLiant o un lab con 2003: el navegador muestra certificados inválidos, páginas en blanco o “esta página no se puede mostrar”.\nSi aún tienes que operar un host legacy (firmware, SCADA, licencia de software, laboratorio), necesitas un navegador moderno que compile para Win32 viejo. La opción que funciona en lab: Supermium.\nQué es Supermium Es un fork de Chromium mantenido para Windows XP SP3, Server 2003 SP2, Vista, 7, 8.x y versiones nuevas. Se comporta como un drop-in de Chrome (extensiones, chrome://flags, sandbox) pero sigue empaquetando builds 32-bit con SSE2 para CPUs de esa época.\nRequisitos oficiales (resumen):\nWindows XP SP3 o Server 2003 SP2 (o posterior) CPU con SSE2 (Pentium 4 en adelante; dual-core recomendado) ≥ 768 MB RAM (2 GB+ para que no se sienta a pedales) Descargas: win32subsystem.live/supermium — instaladores 32-bit y 64-bit.\nInstalación rápida En una máquina con Internet moderno, descarga el Setup 32-bit (casi todo XP/2003 de lab es x86) o 64-bit si el OS es x64. Copia el instalador al host legacy (USB, SMB, iLO virtual media). Instala como administrador. Acepta el UAC/legacy prompts. Abre Supermium y prueba https://example.com y el sitio que realmente necesitas. Si el instalador no corre: confirma SP3/SP2, SSE2 (coreinfo / ficha de CPU) y que no estés en un Windows 2000 / XP RTM sin service pack.\nExtensiones y privacidad A diferencia de Chrome actual, Supermium no tiene fecha de muerte para Manifest V2. Puedes sideloadear uBlock Origin desde GitHub y seguir bloqueando anuncios en un OS que ya no debería tocar la red pública.\nTambién arrastra flags estilo ungoogled-chromium y opciones de UI (Aero, tabs clásicos). Útil; no confíes en eso como “hardening” del sistema operativo.\nAdvertencias (léelas) El OS sigue sin parches. Un navegador nuevo no arregla SMB1, RDP viejo ni vulnerabilidades de kernel. Usa el host solo en VLAN aislada, VPN, o jump host; no lo expongas a Internet. Supermium reduce el riesgo de sitios rotos por TLS; no convierte a XP/2003 en un sistema seguro. Descarga el binario desde el sitio oficial. Un “Chrome para XP” de un foro random es un vector clásico de malware. Para trabajo real, el objetivo sigue siendo migrar (VM nueva, contenedor, o saltar el servicio a un OS soportado). Esto es un puente, no una estrategia. Cuándo tiene sentido Entrar al iLO / iDRAC / panel web de un appliance que solo documentaste en un 2003 de lab. Bajar un driver o EULA desde un portal que rechaza IE8. Demostrar un fallo de compatibilidad sin levantar una VM Windows 10 solo para un click. Descarga y docs: Supermium.\n","permalink":"https://inet.sh/es/posts/windows/navegador-moderno-xp-2003/","summary":"XP y 2003 están fuera de soporte. Chrome y Firefox no arrancan. Supermium sí.","title":"Navegar la web moderna en Windows XP y Server 2003"},{"content":"Windows Server 2003 / 2003 R2 no incluye un servidor SSH. Microsoft tampoco publicó OpenSSH for Windows para esa generación (eso llegó mucho después, acoplado a Windows 10 / Server 2019+). PowerShell Remoting / WinRM tampoco es el camino: en 2003 el stack remoto usable es RDP, SMB y, si lo instalaste, Telnet.\nSi necesitas ssh user@2003-box desde un jump host moderno (scripts, scp, Ansible legacy, copiar logs sin RDP), instala un SSH server de terceros. En lab uso Bitvise SSH Server; 7.x es la línea validada en Server 2003.\nBitvise sigue listando XP SP3 y Server 2003 en su matriz de compatibilidad. Para un host sin parches desde 2015, quédate con un instalador probado en tu imagen (7.x si ya lo validaste) o prueba el current solo en un clon — no en producción a ciegas.\nPor qué no otras opciones Opción En Server 2003 OpenSSH (Win32-OpenSSH / feature de Windows) No Cygwin sshd Posible, frágil y pesado FreeSSHd / forks abandonados Evítalos (sin mantenimiento, superficie de ataque) Solo RDP Sirve para GUI; no para automatización por SSH Bitvise SSH Server Sí — shell + SFTP en Win32 viejo Instalación (resumen) En una máquina con Internet moderno, descarga el instalador desde bitvise.com/ssh-server-download (o el paquete 7.x que guardaste en el lab). Verifica la firma digital del .exe (Properties → Digital Signatures → Bitvise). Copia el instalador al 2003 (USB, SMB, iLO virtual media). No lo bajes con IE8 desde un mirror random. Ejecuta el instalador como Administrador. Reinicia cuando el propio Bitvise lo pida (recomendado tras el primer install, sobre todo si vas a usar auth por llave). Abre Bitvise SSH Server Control Panel, arranca el servicio si no está en Automatic. Guía oficial de install: Installing Bitvise SSH Server.\nConfig mínima que no debes saltarte Cuentas: permite solo el/los usuarios Windows que necesitas (o cuentas virtuales de Bitvise). No dejes “everyone with a local account”. Puerto: 22 por defecto. Si el host está en una VLAN de management, déjalo; si no, cambia el puerto y restringe por firewall / ACL de switch. Firewall de Windows 2003: abre TCP/22 (o el puerto que elegiste) para la red de management únicamente. Auth por llave: importa la pubkey del jump host; desactiva password auth cuando ya funcione la llave. SFTP root: monta solo el path que necesitas (p. ej. D:\\logs), no C:\\. Desde el cliente:\n1 2 3 ssh Administrador@192.168.x.x # o el usuario que habilitaste scp archivo.log Administrador@192.168.x.x:D:/logs/ OpenSSH del cliente moderno habla bien con Bitvise; no hace falta el cliente Bitvise salvo que quieras su GUI.\nSeguridad (contexto legacy) El servidor sigue sin parches de Microsoft. Abrir SSH mejora la operativa; aumenta la superficie de red si el puerto es alcanzable desde más que el jump host.\nVLAN / firewall: solo la IP del bastion. No expongas el 2003 a Internet “porque ya tiene SSH”. Licencia: Personal Edition es free no comercial; Standard es evaluación / pago. Respeta eso en lab vs trabajo. Objetivo real: migrar el workload. SSH es el puente para sacar datos y apagar el caja. Relacionado Para abrir un portal HTTPS desde el mismo host (IE8 ya no sirve): navegador moderno en XP/2003 con Supermium.\nDocs y descarga: Bitvise SSH Server.\n","permalink":"https://inet.sh/es/posts/windows/ssh-server-2003-bitvise/","summary":"2003 no trae SSH. OpenSSH para Windows no aplica. Bitvise sí.","title":"SSH a Windows Server 2003 con Bitvise"},{"content":"Los temas son las carpetas del sitio (ZFS, iLO, …). No son lo mismo que los tags: un tag es un detalle (encryption, bitvise); un tema es la familia entera.\nTemas ZFS — pools, snapshots, cifrado, send/recv HP iLO — CLI, firmware, licencia Proxmox — plantillas cloud-init y VMs Windows — legacy XP/2003, disco, SSH k3s — cluster ligero, data-dir, migración de discos Tags Si buscas por palabra clave suelta (extensión, herramienta, síntoma): todos los tags.\n","permalink":"https://inet.sh/es/temas/","summary":"Los bloques grandes del blog. Los tags finos (encryption, firmware…) están aparte.","title":"Temas"},{"content":"En Linux, cuando el disco se llena, el reflejo es:\n1 2 du -xh --max-depth=1 / | sort -h # o ncdu / En Windows no hay un du decente en la caja. Explorer → Properties es lento y opaco. La herramienta que uso en lab y en escritorios: WinDirStat — free, open source, treemap interactivo.\nPiensa en du con esteroides: escanea un drive o una carpeta y te muestra dónde está el espacio, no solo cuántos GB.\nQué hace (más allá de sumar bytes) Vista Para qué Lista de directorios Ordenar por tamaño, como du | sort -h Estadísticas por extensión Ver si .iso, .vmdk, .log o .bak dominan Treemap Cada rectángulo = un archivo; área = tamaño; color = tipo Largest files / duplicados Candidatos obvios a borrar o mover El sitio del proyecto documenta scan multithread, scan NTFS directo cuando aplica, dark mode e integración con Explorer.\nUso rápido Descarga el instalador (o portable) desde windirstat.net / GitHub releases del proyecto. Ejecuta como Administrador si vas a escanear C:\\ entero (permisos en Windows, perfiles de otros usuarios, etc.). Elige el volumen o una carpeta concreta (D:\\VMs, C:\\Users\\…\\AppData). Espera el scan. En discos grandes tarda; no es du sobre un tmpfs. En el treemap, haz zoom en el bloque gordo. Abre la carpeta en Explorer o borra desde la UI solo si sabes lo que es. Cuándo usarlo Disco “lleno” y no sabes si es Downloads, hibernación, pagefile, ISOs o snapshots de VM. Comparar antes/después de limpiar un perfil o un share. Enseñar a alguien no-CLI qué está ocupando espacio (el treemap vende solo). Qué no es No sustituye du/ncdu en Linux o en un NAS por SSH. No es un limpiador mágico: borrar System Volume Information, WinSxS o bases de datos “porque son grandes” rompe el host. Un scan de todo C:\\ en un file server con millones de archivos puede tardar mucho; acota la raíz. Equivalente mental Mundo Herramienta Linux CLI du, ncdu Windows GUI WinDirStat macOS DaisyDisk / OmniDiskSweeper (otra familia) Descarga y docs: https://windirstat.net/.\n","permalink":"https://inet.sh/es/posts/windows/windirstat-uso-disco/","summary":"du te da números. WinDirStat te muestra el mapa: qué carpeta y qué extensión se comen el disco.","title":"WinDirStat: ver qué se come el disco en Windows"},{"content":"Cuando el firmware de iLO está tan viejo que el navegador ya no habla TLS con él, SSH + HTTP sigue funcionando.\n1. Sirve el .bin por HTTP El iLO descarga el firmware; no se lo empujas por SCP. Un python3 -m http.server en la red de management basta, o nginx. El archivo es el ilo*.bin oficial de HPE.\n2. Entra y carga 1 2 3 4 ssh -c aes256-cbc Administrator@\u0026lt;ilo-ip\u0026gt; show /map1/firmware1 cd /map1/firmware1 load -source http://\u0026lt;http-server\u0026gt;/ilofirmware.bin -c aes256-cbc es el truco en iLO 2/3: OpenSSH moderno rechaza los ciphers del iLO si no se los pides.\nshow /map1/firmware1 imprime la versión actual antes de tocar nada. Guárdala.\nQué esperar El load tarda minutos. No cortes la sesión. El iLO se reinicia solo. El host no se apaga (el firmware vive en el BMC). Si el HTTP no es alcanzable desde la NIC del iLO, load falla con un error opaco: prueba oemhp_ping al servidor HTTP. Después del reboot, show /map1/firmware1 otra vez y confirma el version string.\nReferencia: Upgrade HP iLO via SSH.\nVer también: comandos CLI de iLO.\n","permalink":"https://inet.sh/es/posts/ilo/actualizar-firmware-ssh/","summary":"iLO no abre la UI. Sube el .bin por HTTP y haz load desde la sesión SSH.","title":"Actualizar firmware de HP iLO por SSH"},{"content":"OpenZFS cifra datasets, no el pool entero. El pool (etiquetas, metaslab) sigue visible; el contenido de tank/secret no. Sirve en TrueNAS, Proxmox y Linux.\nGuías útiles: Ars native encryption, ZFS encrypted backups.\nCrear 1 2 zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt tank/encrypted zfs create tank/encrypted/child1 child1 hereda cifrado. No pongas encryption=off en un hijo: OpenZFS no permite “agujero” sin cifrar bajo un padre cifrado.\nKeyfile en vez de prompt:\n1 2 zfs create -o encryption=on -o keyformat=passphrase \\ -o keylocation=file:///root/zfs.key tank/encrypted El archivo de la key no va en el dataset cifrado. USB, TPM o un path en otro pool.\nCargar la key al boot 1 2 zfs load-key tank/encrypted zfs mount tank/encrypted Sin load-key, el dataset existe y zfs list lo muestra, pero no monta.\nRecibir un dataset claro como cifrado En el primer recv, puedes fijar propiedades de cifrado:\n1 2 3 zfs send tank/test@snap1 \\ | zfs recv -o encryption=on -o keyformat=passphrase \\ -o keylocation=file:///path/to/keyfile tank/encrypted Eso es un receive sin -w. -w (raw) copia el wrapping key del origen: solo aplica si el origen ya estaba cifrado. Detalle en send de dataset sin cifrar a cifrado.\nRotar passphrase (OpenZFS) En Solaris el comando era zfs key -c. En OpenZFS / Linux / TrueNAS:\n1 2 zfs change-key tank/encrypted zfs get keyformat,keylocation,keystatus tank/encrypted Keyfile nueva:\n1 zfs change-key -o keylocation=file:///media/stick/key tank/encrypted rekey de wrapping key (no re-cifra todos los bloques; rota la key que envuelve las master keys) es zfs change-key -i según versión — lee zfs change-key de tu man page antes de usarlo en producción.\nVer también: hold de snapshots, backups fuera del host.\n","permalink":"https://inet.sh/es/posts/zfs/cifrado/","summary":"encryption=on en el create. Los hijos heredan. Para rotar la key en Linux usa zfs change-key.","title":"Cifrado nativo de ZFS (OpenZFS): crear, heredar y cambiar la key"},{"content":"zfs send produce un stream replicable, no un directorio. El destino natural es otro pool (zfs recv). S3 es un segundo salto: guardas el stream como objeto, o usas una herramienta tipo z3.\nIncremental a otro host (el comando que uso) 1 2 zfs send -w -R -v -i vol1/secure/backups@initial vol1/secure/backups@new \\ | ssh root@10.0.0.1 zfs recv -s vol1/secure/backups Flag Qué hace -w raw: manda el dataset cifrado como está. El destino no necesita la key para recibir. -R replica propiedades y snapshots hijas -i @initial @new incremental desde @initial (tiene que existir en origen y destino) -v progreso recv -s resumible si se corta el SSH (zfs restart / recv -s otra vez) Pon un hold en @initial y @new mientras corre el send, o el prune te rompe la cadena.\nEl primer full (sin -i) es obligatorio una vez:\n1 2 zfs send -w -R -v vol1/secure/backups@initial \\ | ssh root@10.0.0.1 zfs recv -s vol1/secure/backups Aterrizar en S3 Mismo stream, otro lado del pipe:\n1 2 3 zfs send -w -R vol1/secure/backups@new \\ | gzip -1 \\ | aws s3 cp - s3://mi-bucket/zfs/backups@new.zfs.gz Restaurar:\n1 2 3 aws s3 cp s3://mi-bucket/zfs/backups@new.zfs.gz - \\ | gunzip \\ | zfs recv -s vol1/secure/backups Esto no es un sync de archivos. Es un blob opaco: o recuperas el stream entero (o el incremental encima del full), o no recuperas nada. Versiona los nombres @initial, @new y no borres el full.\nPara incrementales en S3, herramientas como z3 llevan el catálogo de qué snapshot ya subió. Un aws s3 cp - crudo no sabe de eso.\n-w en S3 es correcto si el dataset ya está cifrado: Amazon no ve plaintext. Si el origen no está cifrado, o cifras en recv (artículo) o cifras el objeto (KMS / cliente) — el stream en claro en un bucket es un backup en claro.\nVer también: cifrado nativo.\n","permalink":"https://inet.sh/es/posts/zfs/backups-s3/","summary":"El stream de zfs send no es un tar. Primero otro pool, luego objeto en S3 si hace falta.","title":"Enviar snapshots ZFS a otro host (y de ahí a S3)"},{"content":"En Proxmox un disco de VM en ZFS es un ZVOL (rpool/data/vm-101-disk-0), no un archivo. Para copiarlo a otro hypervisor o a un USB, sacas un RAW.\nHilo: Import/convert/export RAW images to ZFS volume.\nSnapshot y dd Si la VM está encendida, congela el disco con un snapshot y lee el snap (el ZVOL @snap aparece bajo /dev/zvol/…):\n1 2 3 zfs snapshot rpool/data/vm-101-disk-0@export dd if=/dev/zvol/rpool/data/vm-101-disk-0@export of=/mnt/backup/vm-101.raw bs=1M status=progress zfs destroy rpool/data/vm-101-disk-0@export VM apagada, puedes leer el zvol vivo:\n1 dd if=/dev/zvol/rpool/data/vm-101-disk-0 of=/mnt/backup/vm-101.raw bs=1M status=progress bs=1M (o 1m en dd GNU) importa: el default de 512 B es eterno.\nqemu-img (qcow2 / vmdk) 1 qemu-img convert -p -f raw -O qcow2 /mnt/backup/vm-101.raw /mnt/backup/vm-101.qcow2 O directo desde el zvol:\n1 qemu-img convert -p -f raw -O qcow2 /dev/zvol/rpool/data/vm-101-disk-0 vm-101.qcow2 El otro sentido (RAW → ZVOL) 1 2 zfs create -s -V 32G rpool/data/vm-101-disk-0 dd if=file.raw of=/dev/zvol/rpool/data/vm-101-disk-0 bs=1M status=progress -s = sparse. El RAW no puede ser más grande que el zvol.\nVer también: comandos básicos.\n","permalink":"https://inet.sh/es/posts/zfs/exportar-zvol-raw/","summary":"El ZVOL es un block device. dd (o qemu-img convert) a .raw. Snapshot primero si la VM está up.","title":"Exportar un ZVOL de ZFS a un archivo RAW"},{"content":"Si tienes SSH al iLO y no quieres abrir la consola web, el canal es SMASH CLP (/map1, oemhp_*). Esto es el dialecto de iLO 2/3/4 clásico, no Redfish.\nConectarte 1 ssh Administrator@\u0026lt;ilo-ip\u0026gt; En firmware viejo a veces hace falta un cipher débil:\n1 ssh -c aes256-cbc Administrator@\u0026lt;ilo-ip\u0026gt; Cuentas Crear un usuario con grupos típicos de admin (el iLO se puede resetear después de cambios de red; las cuentas no):\n1 create /map1/accounts1 username=ops password=\u0026#39;\u0026lt;password\u0026gt;\u0026#39; group=admin,config,oemhp_vm,oemhp_rc,oemhp_power Cambiar el password de Administrator (hazlo en el primer boot; hpinvent / Administrator es el default de HP):\n1 set /map1/accounts1/Administrator password=\u0026#39;\u0026lt;nuevo-password\u0026gt;\u0026#39; Red (el iLO se reinicia) 1 2 3 set map1/dhcpendpt1 EnabledState=no set map1/enetport1/lanendpt1/ipendpt1 IPv4Address=192.168.1.213 SubnetMask=255.255.255.0 set map1/enetport1 SystemName=merlin Tras cada set de red, espera a que el iLO vuelva y reconecta SSH a la IP nueva.\nMontar un ISO por HTTP y boot una vez El ISO tiene que ser HTTP alcanzable desde el iLO, no desde tu laptop.\n1 2 3 set /map1/oemhp_vm1/cddr1 oemhp_image=http://10.254.0.50/ssp2017.iso set /map1/oemhp_vm1/cddr1 oemhp_boot=Once show /map1/oemhp_vm1/cddr1 Power 1 2 3 4 show /system1 start /system1 stop /system1 reset /system1 Ping desde el iLO Útil para ver si el iLO ve la red de management:\n1 oemhp_ping /map1 10.1.1.50 Manual La referencia de HP para este árbol CLP: iLO scripting and command line.\nVer también: actualizar firmware por SSH, leer la licencia.\n","permalink":"https://inet.sh/es/posts/ilo/comandos-cli/","summary":"Cheat sheet de iLO CLP: cuentas, red, virtual media y power.","title":"HP iLO CLI: usuarios, red, ISO y power"},{"content":"Tras un corte de luz el pool a menudo existe en los discos pero zpool status no lo muestra: quedó exportado sucio o el host arrancó sin él. No hagas zpool create sobre esos discos.\nVer qué hay 1 zpool import Lista pools importables con su nombre (VOL1 en el ejemplo) y si están FAULTED / UNAVAIL.\nImportar 1 zpool import -f VOL1 -f = “sé que puede estar importado en otro host”. Es el caso típico después de un crash: ZFS cree que el otro lado todavía lo tiene.\nSi -f no basta porque las últimas txgs quedaron a medias:\n1 zpool import -F VOL1 -F rebobina a un txg anterior consistente. Puedes perder los segundos de writes del apagón. Es preferible a un pool que no monta.\n-n simula:\n1 zpool import -F -n VOL1 Después: scrub 1 2 zpool scrub VOL1 zpool status VOL1 El scrub confirma que el rewind no dejó checksum errors. Déjalo terminar antes de borrar snapshots “por si acaso”.\nQué no hacer zpool create sobre los mismos sdX destruye las etiquetas. -F no es el primer recurso: prueba -f primero. Si el pool es raíz (rpool / bpool de Proxmox), importa desde un live USB, no desde el sistema que no arranca. Ver también: reemplazar discos, comandos básicos.\n","permalink":"https://inet.sh/es/posts/zfs/importar-pool-despues-apagado/","summary":"El pool no importa. -f fuerza, -F rebobina txgs, luego scrub.","title":"Importar un pool ZFS después de un apagón"},{"content":"iLO Advanced se licencia por key. Si heredaste un ProLiant y la UI no abre (certificado, Java, firmware), el BMC igual publica un XML de inventario.\nEl endpoint 1 curl -sk \u0026#34;https://\u0026lt;ilo-ip\u0026gt;/xmldata?item=CpqKey\u0026#34; En el navegador: https://\u0026lt;ilo-ip\u0026gt;/xmldata?item=CpqKey.\nLa respuesta es XML con el producto y la key (o el estado unlicensed). No es Redfish; es el interfaz xmldata de iLO, el mismo que usan los scripts viejos de HP SIM.\nNotas -k porque el certificado del iLO casi nunca es de un CA público. Algunos iLO sirven esto en HTTP (http://\u0026lt;ilo-ip\u0026gt;/xmldata?item=CpqKey) si HTTPS ya no negocia. Trata la key como secreto. No la subas a git ni a un paste. Leerla no activa nada: solo lee lo que ya está grabado en el BMC. Para aplicar otra key sigue siendo license en CLP o la UI. Ver también: comandos CLI.\n","permalink":"https://inet.sh/es/posts/ilo/obtener-licencia/","summary":"GET https://\u003c!-- raw HTML omitted --\u003e/xmldata?item=CpqKey y busca la key en el XML.","title":"Leer la license key de HP iLO sin entrar a la UI"},{"content":"El ISO de instalador sobra si solo quieres un Linux que arranque con usuario, llave SSH y DHCP. Las distros publican un GenericCloud / cloudimg (qcow2): lo importas, le pegas un drive de cloud-init y lo conviertes en template.\nProbado en Proxmox 8.0.4. El flujo es el de este gist (fork del de zidenis). Las URLs de Fedora 38 / Ubuntu 23.04 envejecen: cambia el wget por el cloud image actual de la distro.\n1. Bajar el image En el nodo, como root, en un storage con espacio (NFS, local, lo que uses):\n1 2 3 4 5 6 export IMAGES_PATH=\u0026#34;/mnt/pve/nfs-data/images/\u0026#34; cd \u0026#34;${IMAGES_PATH}\u0026#34; wget https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2 wget https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/CHECKSUM -O SHA256SUMS sha256sum -c SHA256SUMS --ignore-missing Otras distros (descomenta la que toque):\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # Amazon Linux 2 — https://cdn.amazonlinux.com/os-images/latest/ # wget https://cdn.amazonlinux.com/os-images/2.0.20230727.0/kvm/amzn2-kvm-2.0.20230727.0-x86_64.xfs.gpt.qcow2 # CentOS Stream 9 # wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2 # Fedora (ajusta la versión) # wget https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2 # Oracle Linux 9 — el .qcow no es qcow2; conviértelo # wget https://yum.oracle.com/templates/OracleLinux/OL9/u2/x86_64/OL9U2_x86_64-kvm-b197.qcow # qemu-img convert -O qcow2 -o compat=0.10 OL9U2_x86_64-kvm-b197.qcow OL9U2_x86_64-kvm-b197.qcow2 # RHEL 9 — hace falta login en access.redhat.com # Rocky 9 # wget https://dl.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base.latest.x86_64.qcow2 # Ubuntu cloudimg # wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img 2. Variables de la VM y de cloud-init 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 export QEMU_CPU_MODEL=\u0026#34;host\u0026#34; export VM_CPU_SOCKETS=1 export VM_CPU_CORES=2 export VM_MEMORY=4098 export VM_RESOURCE_POOL=\u0026#34;CustomResourcePool\u0026#34; export CLOUD_INIT_USER=\u0026#34;user\u0026#34; export CLOUD_INIT_SSHKEY=\u0026#34;/home/user/.ssh/id_rsa.pub\u0026#34; export CLOUD_INIT_IP=\u0026#34;dhcp\u0026#34; export CLOUD_INIT_NAMESERVER=\u0026#34;1.1.1.1\u0026#34; export CLOUD_INIT_SEARCHDOMAIN=\u0026#34;example.com\u0026#34; export TEMPLATE_ID=1001 export VM_NAME=\u0026#34;alma9\u0026#34; export VM_DISK_IMAGE=\u0026#34;${IMAGES_PATH}/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2\u0026#34; --cpu host pasa las flags de la CPU del nodo (mejor rendimiento; el template no es portable a otro CPU vendor sin rehacer). VM_MEMORY=4098 es el valor del gist; 4096 también vale.\nEl usuario de cloud-init no es root. La llave tiene que ser el .pub que vas a usar desde tu laptop.\n3. Crear la VM base e importar el disco Cambia local-lvm y vmbr0 por tu storage y bridge reales.\n1 2 3 4 5 6 7 8 9 10 11 qm create ${TEMPLATE_ID} --name ${VM_NAME} --cpu ${QEMU_CPU_MODEL} \\ --sockets ${VM_CPU_SOCKETS} --cores ${VM_CPU_CORES} --memory ${VM_MEMORY} \\ --numa 1 --net0 virtio,bridge=vmbr0 --ostype l26 --agent 1 \\ --pool ${VM_RESOURCE_POOL} --scsihw virtio-scsi-single qm set ${TEMPLATE_ID} --scsi0 local-lvm:0,import-from=${VM_DISK_IMAGE} qm set ${TEMPLATE_ID} --ide2 local-lvm:cloudinit --boot order=scsi0 qm set ${TEMPLATE_ID} --ipconfig0 ip=${CLOUD_INIT_IP} \\ --nameserver ${CLOUD_INIT_NAMESERVER} --searchdomain ${CLOUD_INIT_SEARCHDOMAIN} qm set ${TEMPLATE_ID} --ciupgrade 1 --ciuser ${CLOUD_INIT_USER} --sshkeys ${CLOUD_INIT_SSHKEY} qm cloudinit update ${TEMPLATE_ID} --agent 1 pide qemu-guest-agent. Alma/Rocky/Fedora lo traen o cloud-init lo instala (ciupgrade). Amazon Linux 2 y algunos Ubuntu cloudimg no muestran la IP en la GUI de Proxmox hasta que instalas el agent a mano.\n4. Convertir a template 1 2 qm set ${TEMPLATE_ID} --name \u0026#34;${VM_NAME}-Template\u0026#34; qm template ${TEMPLATE_ID} A partir de aquí esa VM no se arranca: se clona.\n5. Clonar y arrancar 1 2 3 export VM_ID=$(pvesh get /cluster/nextid) qm clone ${TEMPLATE_ID} ${VM_ID} --name ${VM_NAME} qm start ${VM_ID} SSH con la llave privada pareja del .pub que metiste en cloud-init:\n1 ssh user@192.168.0.123 -i ~/.ssh/id_rsa Si no ves la IP en Proxmox: consola serial, o ip neigh en el bridge, o DHCP leases del router.\nFuente: gist inetshell/f1d0206d5319c11062845901e4f3d06b.\n","permalink":"https://inet.sh/es/posts/proxmox/plantillas-cloud-init/","summary":"Cinco pasos: bajar el cloud image, qm create, importar el disco, qm template, clonar.","title":"Plantillas Proxmox con cloud images (qm + cloud-init)"},{"content":"Los scripts de retención (zfs destroy -r …@auto-…) no preguntan. Un hold es un candado con nombre sobre un snapshot: destroy falla hasta que sueltas el tag.\nSirve para la snapshot desde la que estás haciendo zfs send, o para la que es el único rollback conocido después de un upgrade.\nPoner el hold 1 zfs hold keep tank/home/cindys@snap1 Recursivo en todo un árbol (primero snapshot, luego hold):\n1 2 zfs snapshot -r tank/home@now zfs hold -r keep tank/home@now El tag (keep) es libre, pero único por snapshot. Puedes tener keep y offsite a la vez en el mismo @now.\nQué ves al destruir 1 2 zfs destroy tank/home/cindys@snap1 # cannot destroy \u0026#39;tank/home/cindys@snap1\u0026#39;: dataset is busy Eso es el hold, no un dataset montado. zfs destroy -d marca el snapshot para borrar cuando no queden holds (diferido), no lo ignora.\nListar 1 2 zfs holds tank/home@now zfs holds -r tank/home@now 1 2 3 NAME TAG TIMESTAMP tank/home@now keep Thu Jul 15 11:25:39 2010 tank/home/cindys@now keep Thu Jul 15 11:25:39 2010 Soltar y entonces sí destruir 1 2 zfs release -r keep tank/home@now zfs destroy -r tank/home@now Si un send largo sigue corriendo, espera a que termine: el hold está precisamente para que el prune no te coma el cursor incremental.\nDocs de Oracle (el mecanismo es el mismo en OpenZFS): Holding ZFS snapshots.\nVer también: send a dataset cifrado.\n","permalink":"https://inet.sh/es/posts/zfs/hold-proteger-snapshot/","summary":"zfs destroy dice dataset is busy. Alguien puso un hold. Así se pone y se suelta.","title":"Proteger snapshots ZFS con hold para que no las borren"},{"content":"Proxmox documenta el caso: ZFS on Linux — change a failed device. El síntoma es un vdev OFFLINE / FAULTED y un número largo en vez de sde.\nEstado 1 zpool status vol1 Ejemplo: el miembro muerto aparece como GUID:\n1 1894156996840098641 OFFLINE Eso pasa cuando el kernel ya no tiene /dev/sdX para ese disco (lo arrancaste, se fue, o cambió de letra).\nReplace 1 zpool replace -f vol1 1894156996840098641 /dev/disk/by-id/ata-NEWDISK -f fuerza si ZFS todavía “recuerda” el disco viejo. El destino debe ser al menos del mismo tamaño (mejor, by-id, no sde).\nSi el disco nuevo es el mismo slot y ZFS lo ve:\n1 zpool replace vol1 /dev/disk/by-id/ata-OLDDISK /dev/disk/by-id/ata-NEWDISK o, autodetect del recambio en el mismo sitio:\n1 zpool replace vol1 /dev/disk/by-id/ata-OLDDISK Esperar el resilver 1 2 zpool status vol1 watch -n 5 zpool status vol1 No apagues el host, no exportes el pool, no hagas otro replace en el mismo vdev hasta resilvered. En RAIDZ1 estás un disco abajo: un segundo fallo en ese periodo es pérdida.\nDespués 1 2 zpool detach vol1 1894156996840098641 # solo si quedó como spare/old y status lo pide zpool labelclear /dev/sdOLD # si reusas el disco viejo en otra máquina Ver también: import después de apagón.\n","permalink":"https://inet.sh/es/posts/zfs/reemplazar-discos/","summary":"zpool status te da un GUID, no /dev/sde. replace -f GUID /dev/disk/by-id/…","title":"Reemplazar un disco en un pool ZFS"},{"content":"Quieres el mismo contenido, otra key. El origen sigue en claro; el destino nace cifrado. OpenZFS lo permite solo en el receive inicial (dataset que todavía no existe).\nHilo de origen: r/zfs.\nComando 1 2 3 4 5 6 zfs snapshot tank/test@snap1 zfs send tank/test@snap1 \\ | zfs recv -o encryption=on \\ -o keyformat=passphrase \\ -o keylocation=file:///path/to/keyfile \\ tank/encrypted Notas que rompen el send si se omiten:\nNo uses -w. Raw send reproduce el estado de cifrado del origen. Origen en claro → destino en claro, y los -o encryption=… se ignoran o fallan. Pon el nombre del dataset destino (tank/encrypted). Un recv sin destino no crea el dataset. Passphrase vs file: keylocation=prompt no funciona bien al otro lado de un pipe no interactivo. Keyfile o keylocation=file://. Los incrementales siguientes (-i) heredan el cifrado. No vuelvas a pasar -o encryption=on. Comprobar 1 2 zfs get encryption,keystatus,keyformat tank/encrypted zfs load-key tank/encrypted # si keystatus=unavailable El otro sentido Cifrado → cifrado con la misma wrapping key: zfs send -w. Cifrado → otro key wrapping: send sin -w (ZFS descifra al enviar; el recv vuelve a cifrar). Eso exige load-key en el origen y es más lento.\nVer también: cifrado nativo.\n","permalink":"https://inet.sh/es/posts/zfs/send-sin-cifrar-a-cifrado/","summary":"Sin -w. -o encryption=on solo en el primer recv. El destino necesita nombre de dataset.","title":"zfs send/recv de un dataset sin cifrar a uno cifrado"},{"content":"Referencia corta. Los procedimientos largos están enlazados al final.\nPool 1 2 3 4 5 6 zpool create vol1 raidz sda sdb sdc zpool status vol1 zpool export vol1 zpool import -f vol1 zpool destroy tank # irreversible zpool labelclear ada0 # limpia etiquetas ZFS de un disco suelto raidz aquí es RAIDZ1 (una paridad). Para dos: raidz2. Identifica discos por /dev/disk/by-id/…, no por sdX que se reordenan.\nMountpoint 1 2 3 zfs unmount vol1 zfs set mountpoint=/mnt/vol1 vol1 zfs mount vol1 L2ARC (cache) y SLOG (ZIL) 1 2 3 4 zpool add vol1 cache \u0026lt;disk-id\u0026gt; zpool add vol1 log \u0026lt;disk-id\u0026gt; zpool add vol1 log mirror \u0026lt;disk-id-a\u0026gt; \u0026lt;disk-id-b\u0026gt; zpool remove vol1 \u0026lt;device\u0026gt; Cache = lecturas calientes. Log = sync writes (NFS, VMs). Un SLOG USB “rápido” es peor que no tener SLOG: si muere a mitad de un txg, duele. Espeja el log.\nCompression 1 2 3 zfs set compression=lz4 newvol zfs set compression=off newvol zfs get compressratio newvol lz4 es el default razonable en OpenZFS moderno. zstd comprime más y cuesta CPU. La propiedad se hereda a datasets hijos que no la pisen.\nVer también Importar después de un apagón Reemplazar discos Cifrado nativo ","permalink":"https://inet.sh/es/posts/zfs/comandos-basicos/","summary":"Los comandos que se buscan a las 2 a.m. para crear, montar, comprimir y no destruir el pool equivocado.","title":"ZFS: cheat sheet de comandos (pool, compression, cache, log)"}]