Escribir IronFlockOS en una unidad
ironflock os flash prepara la unidad desde la que arranca un dispositivo nuevo. Escribe IronFlockOS y el archivo de configuración del dispositivo (.flock) en la unidad, y el dispositivo se inscribe en su primer arranque: se conecta a IronFlock como el dispositivo de ese archivo .flock. Puedes preparar:
- una memoria USB, una tarjeta SD o un disco externo desde el que arranca el dispositivo,
- una memoria USB de instalación que instala IronFlockOS en el disco interno de un PC,
- un archivo de imagen de disco desde el que arranca una máquina virtual.
FlockFlasher es la app de escritorio para la misma tarea. Para obtener el archivo .flock de un dispositivo, consulta Conectar dispositivos.
Ejecución típica
# 1. Conectar la memoria USB o la tarjeta SD y listar las unidades en las que se puede escribir
ironflock os drives
# 2. Opcional: listar las imágenes que ofrece el catálogo
ironflock os images
# 3. Escribir IronFlockOS y el archivo .flock del dispositivo en la unidad
sudo ironflock os flash -c device.flock -d /dev/sdbos flash muestra su plan y pregunta antes de borrar la unidad. Cuando termina, pon la unidad en el dispositivo y arranca el dispositivo desde ella.
ironflock os images
Lista las imágenes de IronFlockOS que se pueden escribir en una unidad. Por defecto lista las imágenes del release del canal de producción.
ironflock os images [flags]Se ejecuta en Linux y macOS. No necesita root. No pregunta nada.
Flags
| Flag | Significado |
|---|---|
--channel <name> | El canal cuyo release se lista: production (por defecto) o test. |
--version <x.y.z> | El release que se lista en lugar del de un canal, como 0.13.0. |
--target <target> | Solo las imágenes de este target de hardware: amd64-efi, arm64-efi o rpi-arm64. |
--variant <variant> | Solo las imágenes de esta variante: base, nvidia o installer. |
--kernel <kernel> | Solo las imágenes con este kernel: std o rt. |
Los flags que aceptan todos los comandos están en Flags, salida y códigos de salida.
Qué hace
La lista viene del catálogo firmado de IronFlockOS del servidor de descargas, <download base>/ironflockos/manifest.json. ironflock solo usa el catálogo cuando su firma Ed25519 se verifica con la clave del catálogo integrada en ironflock. FlockFlasher y el agente del dispositivo llevan fijada la misma clave. Ningún flag ni ninguna variable de entorno desactiva esta comprobación. La base de descarga es la nube de IronFlock salvo que indiques otra; consulta Base de descarga.
El último catálogo que se verificó se guarda en una carpeta de caché, una copia por base de descarga:
| Usuario | Linux | macOS |
|---|---|---|
| tú | ~/.cache/ironflock/catalog/ | ~/Library/Caches/ironflock/catalog/ |
| root | dentro de /var/cache/ironflock/ | dentro de /var/root/Library/Caches/ironflock/ |
Cuando no se puede alcanzar el servidor de descargas, la copia guardada lo sustituye, con una nota en stderr. Se rechaza un catálogo de la misma base de descarga que sea más antiguo que la copia guardada.
Una imagen se nombra por su target de hardware, su variante y su kernel: ironflockos-<target>-<variant>, con -rt para el kernel de tiempo real. ironflockos-amd64-efi-base-rt es el sistema base con el kernel de tiempo real para PC x86-64 con UEFI. Los targets son:
amd64-efi— PC x86-64 con UEFIarm64-efi— máquina ARM64 con UEFIrpi-arm64— Raspberry Pi 4, 400 y CM4; Raspberry Pi 5 y CM5
Las variantes son base, nvidia e installer. La imagen de instalación crea una memoria USB que instala una de las imágenes que lleva en el disco de la máquina que arranca desde ella. Una imagen de una variante, un kernel o una arquitectura que este ironflock no conoce (de un release más reciente) se omite, con una nota en stderr.
Ejemplos
# Las imágenes del release de producción actual
ironflock os images
# Solo las imágenes de Raspberry Pi
ironflock os images --target rpi-arm64
# Las imágenes del canal de pruebas, como JSON
ironflock os images --channel test --jsonResultado
IMAGE VERSION SIZE HARDWARE
ironflockos-amd64-efi-base 0.13.0 638.1 MB x86-64 PC with UEFI
ironflockos-amd64-efi-base-rt 0.13.0 650.4 MB x86-64 PC with UEFI
ironflockos-amd64-efi-nvidia 0.13.0 1.0 GB x86-64 PC with UEFI
ironflockos-amd64-efi-installer 0.13.0 2.5 GB x86-64 PC with UEFI, installer stick for base, base-rt, nvidia
ironflockos-arm64-efi-base 0.13.0 582.4 MB ARM64 machine with UEFI
ironflockos-arm64-efi-base-rt 0.13.0 594.1 MB ARM64 machine with UEFI
ironflockos-arm64-efi-installer 0.13.0 1.5 GB ARM64 machine with UEFI, installer stick for base, base-rt
ironflockos-rpi-arm64-base 0.13.0 639.4 MB Raspberry Pi 4, 400 and CM4; Raspberry Pi 5 and CM5Con --json (aquí con --target rpi-arm64):
{"issued_at":"2026-11-10T09:41:47Z","key_id":"036ef3bd","from_cache":false,"channels":{"production":"0.13.0","test":"0.13.0"},"images":[{"image_id":"ironflockos-rpi-arm64-base","version":"0.13.0","channels":["production","test"],"target":"rpi-arm64","variant":"base","kernel":"std","architecture":"arm64","boards":["raspberrypi4","raspberrypi5"],"hardware":["Raspberry Pi 4, 400 and CM4","Raspberry Pi 5 and CM5"],"file":"ironflockos-rpi-arm64-base-0.13.0.img.gz","url":"https://instance-registry.ironflock.com/dl/ironflockos/0.13.0/ironflockos-rpi-arm64-base-0.13.0.img.gz","size":639408901,"sha256":"9abd17f2098dfa236d440005222d0a6b583546ea9768e5eca8807c4e24ec88db"}]}issued_at y key_id describen el catálogo, channels indica el release de cada canal, y from_cache es true cuando el servidor de descargas no respondió. Cada imagen tiene su file con su url, size y sha256. boards son los modelos de placa que indica un archivo .flock (board.model), y hardware son sus nombres. Una imagen de instalación tiene además payloads, los id de las imágenes que lleva.
Cuándo falla
- Código de salida 2 —
--channely--versionjuntos, una versión que no tiene forma de versión, o un canal, release, target, variante o kernel que el catálogo no tiene. El error indica lo que tiene el catálogo. - Código de salida 1 — el catálogo no se verifica, ocupa más de 64 KiB, no es uno que este
ironflockpueda leer o es más antiguo que la copia guardada; o no se puede obtener y no hay ninguna copia guardada.
ironflock os drives
Lista las unidades de esta máquina en las que se puede escribir una imagen de IronFlockOS: memorias USB, tarjetas SD, discos externos. No escribe, no desmonta ni abre ninguna unidad.
ironflock os drives [flags]Se ejecuta en Linux y macOS. No necesita root. No pregunta nada. En Linux ejecuta lsblk (de util-linux) y lee /proc y /sys. En macOS ejecuta diskutil list, diskutil info y hdiutil info.
Flags
| Flag | Significado |
|---|---|
--all | Lista también las unidades rechazadas, con el motivo. |
Los flags que aceptan todos los comandos están en Flags, salida y códigos de salida.
Qué unidades se rechazan
os flash rechaza las unidades que rechaza os drives, por los mismos motivos. Una unidad se rechaza cuando (se muestra el primer motivo que se aplica):
- es una partición, como
/dev/sdb1. El rechazo indica su disco: una imagen va al disco entero. - no es un disco: una unidad óptica, un disco en memoria (
zram), un volumen construido sobre otras unidades (LVM, dm-crypt, RAID, device-mapper; en macOS, un contenedor APFS, un conjunto AppleRAID u otro disco sintetizado), o un tipo de dispositivo que el comando no conoce (nbd,mtdblock). - contiene parte del sistema en ejecución:
/,/boot,/efi,/usr,/var,/etco un montaje dentro de uno de ellos (la partición EFI en/boot/efi, los datos de Docker en/var/lib/docker),/home,/opt,/srv,/data, swap, o el soporte de un sistema live. Esto vale sea cual sea la forma en que el sistema está en la unidad: en una partición, a través de LVM, dm-crypt, RAID o device-mapper, en un sistema de archivos btrfs repartido en varias unidades, en un pool ZFS, en un overlay, o en un archivo que lee un dispositivo loop. En macOS:/y los volúmenes dentro de/System, a través de sus contenedores APFS hasta el disco que los contiene. - está en uso: por LVM, dm-crypt, RAID o device-mapper, por un pool ZFS con un dataset montado, o por un dispositivo loop que lee un archivo que hay en ella. En macOS, también por un contenedor APFS que hay en ella, un conjunto AppleRAID, una imagen de disco cuyo archivo está en ella, o por Core Storage, AppleRAID o un contenedor APFS que no está conectado. macOS solo libera una memoria USB con un contenedor APFS cuando se borra la memoria, así que el motivo indica el comando que la borra, por ejemplo
diskutil eraseDisk FAT32 IRONFLOCK MBR /dev/disk6(o Borrar en Utilidad de Discos). - es un disco interno de la máquina: un disco SATA o NVMe, la eMMC de una placa. Una unidad es interna salvo que esté conectada por USB o por otro bus cuyos dispositivos se puedan desenchufar. Un lector de tarjetas integrado es interno, pero su tarjeta SD es un soporte extraíble y se ofrece, también en un Mac. En macOS, un disco que no indica dónde está cuenta como interno.
os flash --allow-internalescribe un disco interno que indica--drive, cuando ningún otro motivo lo rechaza. - puede contener parte del sistema en ejecución: cuando una parte del sistema en ejecución no se puede rastrear hasta una unidad, se rechazan todas las unidades. Es el caso en un contenedor, cuyo sistema está en su host, y en macOS para un sistema en un volumen que no llega a ningún disco físico, como Core Storage.
- es de solo lectura, como una tarjeta SD bloqueada.
- no tiene soporte, como un lector de tarjetas sin tarjeta.
Una unidad con sistemas de archivos montados se ofrece; mounted los enumera, y os flash los desmonta antes de escribir. Los dispositivos loop y, en macOS, las imágenes de disco conectadas no se listan, pero os flash escribe uno que indique --drive.
En un dispositivo que ejecuta IronFlockOS, el comando advierte en stderr y en warnings: todas las imágenes de IronFlockOS de un target tienen los mismos UUID de partición, así que, mientras haya conectada una segunda unidad de IronFlockOS, el sistema en ejecución no puede distinguir sus propias particiones de las de la unidad.
Ejemplos
# Las unidades en las que se puede escribir
ironflock os drives
# Todas las unidades, con el motivo de cada una rechazada
ironflock os drives --all
# Las unidades como JSON
ironflock os drives --jsonResultado
En Linux:
DEVICE SIZE BUS MODEL
/dev/sdb 15.9 GB usb SanDisk Ultra
/dev/mmcblk0 31.9 GB mmc SD32GCon --all:
DEVICE SIZE BUS MODEL WRITABLE
/dev/sda 2.0 TB sata WDC WD20EZBX-00AYRA0 no: is an internal disk of this machine
/dev/sdb 15.9 GB usb SanDisk Ultra yes
/dev/mmcblk0 31.9 GB mmc SD32G yes
/dev/nvme0n1 1.0 TB nvme Samsung SSD 980 PRO 1TB no: holds / of the running systemEn un Mac, con --all:
DEVICE SIZE BUS MODEL WRITABLE
/dev/disk0 500.3 GB Apple Fabric APPLE SSD AP0512R no: holds / of the running system
/dev/disk1 524.3 MB Apple Fabric APPLE SSD AP0512R no: is a volume (APFS container), not a disk
/dev/disk2 5.4 GB Apple Fabric APPLE SSD AP0512R no: is a volume (APFS container), not a disk
/dev/disk3 494.4 GB Apple Fabric APPLE SSD AP0512R no: is a volume (APFS container), not a disk
/dev/disk5 15.9 GB Secure Digital Built In SDXC Reader yesCon --json (abreviado):
{"drives":[{"device":"/dev/sdb","kind":"disk","size":15931539456,"bus":"usb","removable":true,"internal":false,"read_only":false,"vendor":"SanDisk","model":"Ultra","serial":"4C530001230812115352","mounted":[{"device":"/dev/sdb1","mountpoint":"/media/anna/STICK"}],"system":[],"maybe_system":[],"holders":[],"writable":true},{"device":"/dev/mmcblk0",...}],"warnings":[]}| Campo | Significado |
|---|---|
size | El tamaño en bytes. |
bus | El bus con las palabras del sistema: usb, sata, nvme, mmc en Linux; USB, Secure Digital, Apple Fabric, PCI-Express en macOS. |
removable | El soporte se puede sacar de la unidad. |
serial | El número de serie. Un Mac no indica ninguno. |
mounted | Los sistemas de archivos de la unidad que están montados. |
system | Qué parte del sistema en ejecución contiene la unidad. |
maybe_system | Qué parte del sistema en ejecución no se pudo rastrear hasta una unidad. |
holders | Lo que usa la unidad. |
writable, refusal | Una unidad rechazada (con --all) tiene "writable":false y el motivo en refusal. |
Cuando no hay ninguna unidad en la que escribir, el texto lo indica, drives está vacío y el código de salida es 0.
Cuándo falla
- Código de salida 3 — en Linux,
lsblkno está instalado; o el comando se ejecuta en un sistema que no es Linux ni macOS.
ironflock os flash
Escribe IronFlockOS en una unidad (una memoria USB, una tarjeta SD, un disco externo) y pone el archivo .flock del dispositivo en la partición IRONFLOCKOS de la unidad, la partición FAT32 con ese nombre que tiene toda unidad de IronFlockOS. El dispositivo se inscribe con ese archivo en su primer arranque. Con --output, escribe lo mismo en un archivo de imagen de disco para una máquina virtual.
Advertencia: Se borra todo lo que hay en la unidad. Comprueba el nombre de la unidad con
ironflock os drivesantes de escribir.os flashnunca elige una unidad por sí mismo.
ironflock os flash -c <device.flock> (-d <drive> | --output <file>) [flags]| Linux | macOS | |
|---|---|---|
| Se ejecuta | sí | sí |
| Root | necesario para escribir una unidad | necesario para escribir una unidad, salvo que puedas escribir en el dispositivo raw de la unidad |
| Pregunta | antes de borrar la unidad o de reemplazar el archivo de --output; la respuesta «No» está preseleccionada | igual |
Sin root, el error indica la línea de comandos que hay que escribir, con sudo delante. En macOS, un usuario que puede escribir en el dispositivo raw de la unidad no necesita root: el usuario que conectó una imagen de disco, o un usuario al que el propietario de la máquina dio la unidad, por ejemplo con sudo chown <user> /dev/disk4 /dev/rdisk4. Con --output, el comando no necesita root. Consulta también Privilegios de root.
Flags
| Flag | Significado |
|---|---|
-c, --config <file> | El archivo .flock del dispositivo. Obligatorio. |
-d, --drive <drive> | La unidad que se borra y se escribe. En Linux, /dev/sdb o /dev/mmcblk0, o un enlace a ella, como uno dentro de /dev/disk/by-id. En macOS, /dev/disk4 (también /dev/rdisk4 o disk4). ironflock os drives las lista. |
--output <file> | El archivo que se escribe en lugar de una unidad: una imagen de disco raw para una máquina virtual. |
--image <id> | La imagen que se escribe, con o sin ironflockos-, como amd64-efi-nvidia. Por defecto: la imagen para el hardware que indica el archivo .flock. |
--image-file <file> | El archivo de imagen, descargado antes. Tiene que ser el archivo de la imagen que indica el catálogo. |
--installer | Escribe la memoria USB de instalación que instala la imagen en el disco interno de un PC. |
--installer-disk <rule> | El disco que escribe el instalador: largest (por defecto), /dev/<name> o by-id:<id>. |
--installer-confirm yes|no | Si el instalador pregunta en la consola del PC antes de escribir. Por defecto yes. |
--installer-after poweroff|reboot | Qué hace el PC cuando termina el instalador. Por defecto poweroff. |
--installer-allow-usb yes|no | Si el instalador puede escribir un disco USB. Por defecto no. |
--wifi-ssid <name> | El WiFi al que se une el dispositivo, en lugar del que indica el archivo .flock. |
--wifi-password-file <file> | Un archivo o una tubería (/dev/stdin) cuya única línea es la frase de contraseña de --wifi-ssid. |
--allow-internal | Escribe la unidad que indica --drive aunque sea un disco interno de esta máquina. |
Los flags que aceptan todos los comandos están en Flags, salida y códigos de salida.
Qué hace
- Comprueba la unidad. Resuelve
--drivey la rechaza por los motivos que daos drives, antes de leer, obtener o preguntar nada. Sin--drive(y sin--output), indica las unidades en las que puede escribir y termina con el código de salida 2. - Lee el archivo
.flock. Tiene que ser un archivo con nombre*.flockde 5 MiB como máximo, un objeto JSON con unsecrety unadevice_key, cuyosnameyserial_numbersean nombres simples. - Elige la imagen del catálogo firmado, que obtiene y verifica como hace
os images. Toma la imagen que indica--imageo, si no, la imagen por defecto (variante base, kernel estándar) del hardware que indica el archivo.flock: suboard.modelo, si no, suarchitecturecuando el catálogo tiene un único hardware para ella. Con--installer, toma la memoria USB de instalación de ese hardware que lleva la imagen. - Muestra el plan en stderr: la imagen, de dónde viene su archivo, el archivo
.flock(por su nombre), el WiFi, la unidad y los sistemas de archivos de la unidad que desmonta. Después pregunta. «No» está preseleccionado, así que Enter solo no borra nada. - Obtiene el archivo de imagen: el archivo de
--image-fileo, si no, la copia de la caché o, si no, una descarga a la caché, que se reanuda donde se detuvo una descarga anterior. Como root, la caché es/var/cache/ironflock/imagesen Linux y/var/root/Library/Caches/ironflock/imagesen macOS. La descarga va a un archivo.part. Cada archivo solo se escribe cuando su tamaño y su SHA-256 son los del catálogo. Un intento de descarga que no trae ningún byte en un minuto termina, y la descarga desiste tras tres intentos así seguidos. - Vuelve a comprobar la unidad. Tiene que ser la unidad que mostró el plan y seguir sin estar rechazada: el mismo dispositivo, tamaño, número de serie y soporte. En Linux eso incluye el fabricante, el modelo, el bus y cada partición con su sistema de archivos, etiqueta, UUID y tamaño. En macOS, que no indica número de serie, son el modelo, el bus, la posición en el árbol de dispositivos y las particiones con sus UUID. Una memoria USB que se retiró después del plan deja su nombre a la siguiente unidad que se conecte; esa unidad no se escribe, y no se desmonta nada. Después, el comando desmonta los sistemas de archivos que enumeró el plan, y solo esos, y abre la unidad en exclusiva para escribir. En macOS escribe a través del dispositivo raw (
/dev/rdisk4), que un segundoos flashno puede abrir a la vez. - Escribe la imagen, después relee la unidad y la compara.
- Escribe el archivo
.flocken la carpeta raíz de la particiónIRONFLOCKOS, sin montarla. Una memoria USB de instalación recibe ademásinstaller.conf. Con--wifi-ssid, la copia de la unidad indica esa red; el propio archivo.flockno cambia. - En macOS, expulsa la unidad (
diskutil eject) para que puedas sacarla. Cuando la expulsión falla, la unidad queda escrita igualmente: el comando advierte, y tú expulsas la unidad en el Finder antes de sacarla.
Como root, el comando solo usa una carpeta de caché cuando es una carpeta y no un enlace, pertenece a root y nadie más puede escribir en ella. Crea una que falte con el modo 0700 y se detiene ante cualquier otra antes de leer, borrar o descargar nada allí. Antes de obtener una imagen del catálogo, borra los archivos de imagen de la caché que el catálogo ya no lista, y sus descargas parciales.
Un --image para un hardware distinto del que indica el archivo .flock se escribe tras una advertencia en el plan: el dispositivo no ejecutaría sus apps. En un dispositivo que ejecuta IronFlockOS, el plan advierte como lo hace os drives. Con --allow-internal, el plan advierte de que la unidad es un disco interno.
--yes responde sí a la pregunta. Sin terminal (una tubería, un script) y sin --yes, el comando no pregunta y termina con el código de salida 4. --json tampoco pregunta nada, así que necesita --yes para escribir una unidad. Con --json, el plan no se imprime: stderr lleva solo los eventos de progreso, y las advertencias están en el resultado. Consulta Preguntas y confirmación y Salida y JSON.
WiFi
El dispositivo se une al WiFi que indica su archivo .flock. --wifi-ssid le da otra red. IronFlockOS solo se une a un WiFi con frase de contraseña, así que --wifi-ssid y --wifi-password-file van siempre juntos. La frase de contraseña viene de un archivo o de una tubería, nunca de la línea de comandos, donde ps y el historial del shell la mostrarían. El comando no la imprime en ninguna parte. La copia del archivo .flock en la unidad indica la red en wlanssid y password.
Nota: Cuando la frase de contraseña llega por
/dev/stdin, stdin no es una terminal, así que el comando no puede preguntar. Añade--yes.
Memoria USB de instalación
Con --installer, la unidad pasa a ser una memoria USB de instalación para un PC con UEFI (amd64-efi, arm64-efi); ironflock os images --variant installer lista las imágenes de instalación. La memoria lleva varias imágenes de su hardware; installer.conf en la memoria indica la que instala (payload, la imagen elegida como en el paso 3) y contiene los flags --installer-* que indicaste. Cuando el PC arranca desde la memoria, el instalador:
- elige el disco según
--installer-disk: el disco más grande (por defecto), el disco/dev/<name>o el disco con el idby-id:<id>. Solo escribe un disco USB con--installer-allow-usb yes. - pregunta en la consola del PC antes de escribir, salvo con
--installer-confirm no. - escribe la imagen y el archivo
.flockdel dispositivo en ese disco. - apaga el PC (por defecto), o lo reinicia con
--installer-after reboot.
Saca la memoria y arranca el PC desde su disco interno. El dispositivo se inscribe en su primer arranque.
Advertencia: Una memoria escrita con
--installer-confirm noborra el disco de cada PC que arranca desde ella, sin preguntar. Etiqueta una memoria así y mantenla lejos de otras máquinas.
Para reemplazar el Linux de una máquina en funcionamiento sin memoria USB, consulta Reemplazar Linux por IronFlockOS.
Un archivo de imagen descargado
--image-file escribe un archivo de imagen que descargaste antes, por ejemplo en una máquina que no puede descargar los archivos de imagen del catálogo. Toma la dirección del archivo del url de os images --json. El archivo solo se escribe cuando tiene el tamaño y el SHA-256 que el catálogo indica para la imagen.
El comando sigue necesitando el catálogo firmado para comprobar el archivo. Obtiene el catálogo o, cuando no se puede alcanzar el servidor de descargas, usa la copia que guardó la última vez que se verificó un catálogo de la misma base de descarga. Esa copia es por usuario: como root, es la copia de root. Un servidor propio también funciona: con otra base de descarga (--download-base o IRONFLOCK_DL_BASE), el comando obtiene el catálogo de <download base>/ironflockos/manifest.json y el archivo de imagen de <download base>/ironflockos/<version>/<file>.
Nota: El archivo se lee una vez más mientras se escribe, y su SHA-256 solo se vuelve a conocer después de la escritura. Guarda el archivo donde ningún otro usuario pueda cambiarlo.
Un archivo de imagen para una máquina virtual
--output <file> escribe la imagen y los archivos del dispositivo en un archivo normal en lugar de en una unidad: una imagen de disco raw desde la que arranca una máquina virtual como su disco. La imagen, sus comprobaciones y los archivos de IRONFLOCKOS son los mismos que para una unidad. No se busca, desmonta ni abre ninguna unidad, así que el comando no necesita root. --image, --image-file, --installer con sus flags y --wifi-ssid funcionan como con una unidad.
- Tamaño — El plan indica el archivo y su tamaño: el tamaño de la imagen descomprimida. Cuando la imagen aún está por descargar, esa línea sigue a la descarga.
- Pregunta — Un archivo nuevo no borra nada, y el comando no pregunta. Un archivo que ya existe se reemplaza: el plan lo dice, y el comando pregunta antes.
- Primero con otro nombre — La imagen va a un archivo nuevo en la misma carpeta,
<file>.<number>.part. Recibe el nombre<file>solo cuando contiene la imagen entera, se ha releído y tiene los archivos del dispositivo en su particiónIRONFLOCKOS. Una escritura que falla o se interrumpe elimina el archivo.part, y con ese nombre no hay nada, o está el archivo que había, sin cambios. Unkill -9o un corte de corriente pueden dejar el archivo.part. - Privado — El archivo contiene el secreto del dispositivo, igual que el archivo
.flock. Recibe el modo 0600, también cuando reemplaza un archivo con un modo más amplio. - Disperso — Donde la imagen tiene un bloque entero de ceros (bloques de 4 MiB), el archivo recibe un hueco en un sistema de archivos que admite huecos. Se lee igual y ocupa menos espacio.
# Escribir un archivo de imagen de disco para una máquina virtual, sin root
ironflock os flash -c device.flock --output device.imgIronFlockOS catalog of 2026-11-10T09:41:47Z, signed with key 036ef3bd.
Image: ironflockos-amd64-efi-base 0.13.0, for x86-64 PC with UEFI
Image file: https://instance-registry.ironflock.com/dl/ironflockos/0.13.0/ironflockos-amd64-efi-base-0.13.0.img.gz (638.1 MB), downloaded and checked against the catalog
Device file: device.flock, for the device kitchen-pc
WiFi: Office (from the .flock)
Output: device.img, a new file: the image, unpacked; its size is known once the image is downloaded
(the progress of downloading, checking)
Unpacked, the image has 4.6 GB: the size of device.img.
(the progress of writing, reading back)
Done: IronFlockOS 0.13.0 (ironflockos-amd64-efi-base) is in device.img and read back, with device.flock in its IRONFLOCKOS partition.
Grow the file to the size of the virtual machine's disk before the machine starts from it (truncate -s 20G device.img): on its first boot IronFlockOS makes slot B and /data in that space, and the device enrolls as kitchen-pc.La imagen contiene la partición IRONFLOCKOS y el primero de los dos slots del sistema que IronFlockOS actualiza por turnos (el slot A). En su primer arranque, IronFlockOS crea el slot B, del mismo tamaño que el slot A, y la partición de datos /data en el resto del disco. Amplía el archivo antes de que la máquina virtual arranque desde él por primera vez: como mínimo a 10 GiB para base y a 18 GiB para nvidia. Lo que gana el archivo son ceros, que el sistema de archivos guarda como un hueco. Un hipervisor que acepta discos raw usa el archivo tal cual. Para otro formato, convierte el archivo ampliado, por ejemplo con qemu-img convert -f raw -O qcow2 device.img device.qcow2.
Las imágenes de amd64-efi y arm64-efi arrancan en QEMU; la imagen de la Raspberry Pi (rpi-arm64), no. Para amd64-efi en Linux con KVM y el firmware UEFI del paquete ovmf (Debian, Ubuntu):
# Ampliar el archivo, copiar las variables del firmware e iniciar la máquina
truncate -s 20G device.img
cp /usr/share/OVMF/OVMF_VARS_4M.fd device-vars.fd
qemu-system-x86_64 -machine q35 -accel kvm -cpu host -m 2048 -smp 2 \
-drive if=pflash,format=raw,unit=0,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \
-drive if=pflash,format=raw,unit=1,file=device-vars.fd \
-drive file=device.img,format=raw,if=virtio \
-netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
-device i6300esb \
-nographic-nographicpone el primer puerto serie en la terminal, donde escriben GRUB y el kernel. Ctrl-A X termina QEMU.-device i6300esbes un watchdog, mediante el cual IronFlockOS reinicia una máquina que se cuelga.-netdev userda a la máquina la red del host, por la que el dispositivo alcanza IronFlock.- Sin KVM (sin
/dev/kvm, o en un host de otra arquitectura), omite-accel kvmy usa-cpu max. QEMU emula entonces la máquina, lo que es mucho más lento.
La imagen arm64-efi arranca con qemu-system-aarch64 -machine virt y el firmware del paquete qemu-efi-aarch64 (/usr/share/AAVMF/AAVMF_CODE.fd y una copia de AAVMF_VARS.fd), sin el watchdog. En un Mac con Apple silicon, QEMU de Homebrew la arranca con -accel hvf -cpu host y el firmware /opt/homebrew/share/qemu/edk2-aarch64-code.fd, con una copia de edk2-arm-vars.fd.
Ejemplos
# Escribir en una memoria USB la imagen por defecto para el hardware del archivo .flock
sudo ironflock os flash -c device.flock -d /dev/sdb
# Escribir una memoria USB de instalación que instala la imagen NVIDIA en un PC
sudo ironflock os flash -c device.flock -d /dev/sdb --image amd64-efi-nvidia --installer
# Escribir una tarjeta SD para un dispositivo que se une al WiFi «Workshop»
sudo ironflock os flash -c device.flock -d /dev/mmcblk0 --wifi-ssid Workshop --wifi-password-file wifi.txt
# Escribir una memoria USB en un Mac
sudo ironflock os flash -c device.flock -d /dev/disk4Resultado
El plan y el progreso van a stderr; las últimas líneas son el resultado. En Linux:
IronFlockOS catalog of 2026-11-10T09:41:47Z, signed with key 036ef3bd.
Image: ironflockos-amd64-efi-base 0.13.0, for x86-64 PC with UEFI
Image file: https://instance-registry.ironflock.com/dl/ironflockos/0.13.0/ironflockos-amd64-efi-base-0.13.0.img.gz (638.1 MB), downloaded and checked against the catalog
Device file: device.flock, for the device kitchen-pc
WiFi: Office (from the .flock)
Drive: /dev/sdb: SanDisk Ultra, 15.9 GB, usb, serial 4C530001230812115352
Everything on /dev/sdb is erased. Unmounted first: /media/anna/STICK.
(the progress of downloading, checking, writing, reading back)
Done: IronFlockOS 0.13.0 (ironflockos-amd64-efi-base) is on /dev/sdb and read back, with device.flock in its IRONFLOCKOS partition.
Start the device from it: it enrolls as kitchen-pc on its first boot.En un Mac, primero sin root y después con sudo:
$ ironflock os flash -c pi.flock -d /dev/disk5
Error: "ironflock os flash" must run as root (sudo) to write a drive: sudo ironflock os flash -c pi.flock -d /dev/disk5
$ sudo ironflock os flash -c pi.flock -d /dev/disk5 --yes
IronFlockOS catalog of 2026-11-10T16:41:54Z, signed with key 036ef3bd.
Image: ironflockos-rpi-arm64-base 0.14.0, for Raspberry Pi 4, 400 and CM4
Image file: https://instance-registry.ironflock.com/dl/ironflockos/0.14.0/ironflockos-rpi-arm64-base-0.14.0.img.gz (640.1 MB), downloaded and checked against the catalog
Device file: pi.flock, for the device pi-workshop
WiFi: Office (from the .flock)
Drive: /dev/disk5: Built In SDXC Reader, 15.9 GB, Secure Digital
Everything on /dev/disk5 is erased. Unmounted first: /Volumes/UNTITLED.
(the progress of downloading, checking, writing, reading back)
Done: IronFlockOS 0.14.0 (ironflockos-rpi-arm64-base) is on /dev/disk5 and read back, with pi.flock in its IRONFLOCKOS partition.
/dev/disk5 is ejected and can be taken out.
Start the device from it: it enrolls as pi-workshop on its first boot.Con --json, aquí para una memoria USB de instalación (--installer --installer-confirm no --yes --json):
{"action":"flashed","device":"kitchen-pc","device_file":"device.flock","hardware":"x86-64 PC with UEFI","image":{"image_id":"ironflockos-amd64-efi-installer","version":"0.13.0","file":"ironflockos-amd64-efi-installer-0.13.0.img.gz","url":"https://instance-registry.ironflock.com/dl/ironflockos/0.13.0/ironflockos-amd64-efi-installer-0.13.0.img.gz","size":2512345678,"sha256":"..."},"installer":{"payload":"ironflockos-amd64-efi-base","disk":"largest","confirm":"no","after":"poweroff","allow_usb":"no"},"wifi":{"ssid":"Office","from":"flock"},"drive":{"device":"/dev/sdb","size":15931539456,"bus":"usb","model":"SanDisk Ultra","serial":"4C530001230812115352","internal":false},"source":"download","unmounted":["/media/anna/STICK"],"bytes":6442450944,"verified":true,"ejected":false,"files":["device.flock","installer.conf"],"catalog":{"issued_at":"2026-11-10T09:41:47Z","key_id":"036ef3bd","from_cache":false,"notes":[]},"warnings":[]}Con --output, el resultado tiene output en lugar de drive, por ejemplo "output":{"file":"/home/anna/device.img","replaced":true}.
| Campo | Significado |
|---|---|
action | flashed |
device | El nombre del dispositivo, del archivo .flock. |
device_file | El nombre del archivo .flock en IRONFLOCKOS. |
hardware | El hardware para el que es la imagen. |
image | La imagen escrita: image_id, version, y file, url, size y sha256 de su archivo. url es de donde se descargó, o de donde se habría descargado. |
installer | Solo memoria USB de instalación: payload, la imagen que instala, y disk, confirm, after, allow_usb tal como los aplica el instalador. |
wifi | ssid, y from: flock o flags. null sin WiFi. |
drive | Solo unidad: device, size, bus, model, serial, e internal, que es true para un disco interno escrito con --allow-internal. |
output | Solo --output: file, la ruta absoluta, y replaced, true cuando se reemplazó un archivo con ese nombre. |
source | De dónde vino el archivo de imagen: download, cache o file. |
unmounted | Los puntos de montaje desmontados antes de la escritura. Vacío con --output. |
bytes, verified | Los bytes escritos (la imagen rellenada hasta un sector completo; con --output, el tamaño del archivo), y que la relectura de la unidad o del archivo los devolvió iguales. |
ejected | macOS: la unidad se expulsó y se puede sacar. false en Linux y con --output. |
files | Los archivos escritos en IRONFLOCKOS. |
catalog | El catálogo usado: issued_at, key_id, from_cache, y notes sobre lo que este ironflock omitió de él. |
warnings | Las advertencias del plan y, en macOS, que la unidad no se pudo expulsar. |
Cuándo se niega
Código de salida 3, y no se escribe nada:
- La unidad es una que rechaza
os drives; el error da el motivo, y--yesno cambia nada. La única excepción es un disco interno de esta máquina:--allow-internallo escribe cuando--drivelo indica, y el error nombra el flag cuando este haría que se pudiera escribir la unidad. El flag no levanta ningún otro rechazo y no responde a la pregunta. - La unidad cambió entre el plan y la escritura, o en ese momento se rechaza. El error dice qué cambió.
- La unidad está en uso cuando se abre: hay montado un sistema de archivos que el plan no enumeró, un sistema de archivos no se desmonta o un programa tiene la unidad abierta.
- El comando no se ejecuta como root (o, en macOS, como un usuario que puede escribir en el dispositivo raw de la unidad). El error indica la línea de comandos con
sudo. - Con
--output: el nombre no es un archivo normal (un dispositivo, una carpeta, una tubería con nombre o cualquier enlace simbólico), o su carpeta no existe, antes de que se lea u obtenga nada. Una carpeta que no admite un archivo nuevo (sin permiso, un sistema de archivos de solo lectura) se rechaza después del plan y antes de la descarga. Un archivo que tomó el nombre mientras se escribía la imagen, donde el plan indicaba un archivo nuevo, no se reemplaza.
Código de salida 2, una línea de comandos incorrecta:
- Ni
--driveni--output, también con--allow-internal.--outputcon--driveo con--allow-internal, sin nombre o con-. Un--outputque indica el archivo.flockde-co el archivo de--image-file. - Un flag
--installer-*sin--installer, o con un valor que el instalador no acepta. --wifi-ssidsin--wifi-password-file, o al revés.- Un archivo
.flockque no dice para qué hardware es; en ese caso,--imageelige la imagen. - Una imagen que el catálogo no tiene, una memoria USB de instalación que no lleva la imagen, o un hardware sin memoria USB de instalación.
- Con
--host:--image-filey--output, porque--hostno copia el archivo de imagen a la otra máquina ni trae ningún archivo de vuelta. Ejecuta el comando aquí sin--host, o en la propia máquina. El archivo.flocky el archivo de frase de contraseña sí se envían.
Código de salida 4: se respondió no a la pregunta (Enter solo o Esc), o no se pudo hacer y no se indicó --yes.
Código de salida 1, el comando falló:
- El archivo
.flocko el archivo de frase de contraseña no son válidos, o el archivo de imagen no es el del catálogo. - El catálogo no se puede usar, por los motivos por los que falla
os images. - Falla la descarga, la escritura o la relectura. Una escritura que falla después de su primer bloque (un error de E/S, una unidad más pequeña que la imagen) indica que la unidad contiene ahora una parte de la imagen, con la que no arranca nada: vuelve a escribirla.
- La imagen está en la unidad y releída, pero el archivo
.flockno se pudo escribir enIRONFLOCKOS. Sin él, el dispositivo no se inscribe; el mismo comando vuelve a escribir ambos. - Con
--output: el sistema de archivos está lleno, los archivos del dispositivo no se pueden poner en la imagen, o la entrada del archivo.partse reemplazó mientras se escribía la imagen. El nombre queda entonces como estaba antes.
Código de salida 130: Ctrl-C mientras se descarga, se escribe o se relee la imagen. Una descarga interrumpida no ha escrito nada, y el mismo comando la reanuda. Una escritura o una relectura se detiene en el siguiente bloque, y el error dice qué contiene la unidad. Una vez releído el último bloque, el comando completa sus últimos pasos breves y termina con 0. Un segundo Ctrl-C termina el comando de inmediato; con --output puede quedar el archivo .part.