IronFlockOS をドライブに書き込む
ironflock os flash は、新しいデバイスが起動するドライブを準備します。IronFlockOS とデバイス設定ファイル(.flock)をドライブに書き込むと、デバイスは初回起動時に登録されます。つまり、その .flock ファイルのデバイスとして IronFlock に接続します。準備できるものは次のとおりです:
- デバイスが起動する USB スティック、SD カード、外付けディスク
- PC の内蔵ディスクに IronFlockOS をインストールするインストーラースティック
- 仮想マシンが起動するディスクイメージファイル
FlockFlasher は、同じ作業を行うデスクトップアプリです。デバイスの .flock ファイルを取得するには、デバイスの接続 を参照してください。
典型的な流れ
# 1. スティックまたは SD カードを挿してから、書き込めるドライブを一覧表示する
ironflock os drives
# 2. 任意:カタログが提供するイメージを一覧表示する
ironflock os images
# 3. IronFlockOS とデバイスの .flock ファイルをドライブに書き込む
sudo ironflock os flash -c device.flock -d /dev/sdbos flash は計画を示し、ドライブを消去する前に質問します。完了したら、ドライブをデバイスに挿し、デバイスをそこから起動します。
ironflock os images
ドライブに書き込める IronFlockOS イメージを一覧表示します。既定では、production チャネルのリリースのイメージを一覧表示します。
ironflock os images [flags]Linux と macOS で動作します。root は不要です。何も質問しません。
フラグ
| フラグ | 意味 |
|---|---|
--channel <name> | リリースを一覧表示するチャネル:production(既定値)または test。 |
--version <x.y.z> | チャネルのリリースの代わりに一覧表示するリリース。例:0.13.0。 |
--target <target> | このハードウェアターゲットのイメージだけ:amd64-efi、arm64-efi、rpi-arm64。 |
--variant <variant> | このバリアントのイメージだけ:base、nvidia、installer。 |
--kernel <kernel> | このカーネルのイメージだけ:std または rt。 |
すべてのコマンドに共通するフラグは、フラグ、出力、終了コード に記載しています。
動作
一覧は、ダウンロードサーバーにある署名付きの IronFlockOS カタログ <download base>/ironflockos/manifest.json から取得します。ironflock は、カタログの Ed25519 署名を ironflock に組み込まれたカタログ鍵で検証できた場合にだけ、そのカタログを使います。FlockFlasher とデバイスエージェントも、同じ鍵を固定で組み込んでいます。このチェックを無効にするフラグや環境変数はありません。ダウンロードベースは、別のものを指定しない限り IronFlock クラウドです。ダウンロードベース を参照してください。
最後に検証できたカタログは、ダウンロードベースごとに 1 つずつ、キャッシュフォルダーに保持されます:
| ユーザー | Linux | macOS |
|---|---|---|
| 通常のユーザー | ~/.cache/ironflock/catalog/ | ~/Library/Caches/ironflock/catalog/ |
| root | /var/cache/ironflock/ の下 | /var/root/Library/Caches/ironflock/ の下 |
ダウンロードサーバーに到達できない場合は、保持しているコピーが代わりに使われ、stderr にその旨が示されます。同じダウンロードベースのカタログで、保持しているコピーより古いものは拒否されます。
イメージの名前は、ハードウェアターゲット、バリアント、カーネルから付けられます。形式は ironflockos-<target>-<variant> で、リアルタイムカーネルには -rt が付きます。ironflockos-amd64-efi-base-rt は、UEFI を備えた x86-64 PC 用の、リアルタイムカーネルを使うベースシステムです。ターゲットは次のとおりです:
amd64-efi— UEFI を備えた x86-64 PCarm64-efi— UEFI を備えた ARM64 マシンrpi-arm64— Raspberry Pi 4、400、CM4、および Raspberry Pi 5、CM5
バリアントは base、nvidia、installer です。インストーラーイメージからは、そこから起動したマシンのディスクに、含まれているイメージの 1 つをインストールする USB スティックが作られます。この ironflock が知らないバリアント、カーネル、アーキテクチャのイメージ(より新しいリリースのもの)は、stderr に注記を出して一覧から除かれます。
例
# 現在の production リリースのイメージ
ironflock os images
# Raspberry Pi のイメージだけ
ironflock os images --target rpi-arm64
# test チャネルのイメージを JSON で
ironflock os images --channel test --json結果
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 CM5--json の場合(ここでは --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 と key_id はカタログを表し、channels は各チャネルのリリースを示し、from_cache はダウンロードサーバーが応答しなかった場合に true です。各イメージには file があり、その url、size、sha256 が付きます。boards は .flock ファイルが記載するボードのモデル(board.model)で、hardware はその名前です。インストーラーイメージには payloads もあり、含まれているイメージの ID を示します。
失敗する場合
- 終了コード 2 —
--channelと--versionを同時に指定した、バージョンとして正しくない値を指定した、またはカタログにないチャネル、リリース、ターゲット、バリアント、カーネルを指定した。エラーには、カタログにあるものが示されます。 - 終了コード 1 — カタログを検証できない、64 KiB より大きい、この
ironflockが読み取れる形式でない、または保持しているコピーより古い。あるいは、カタログを取得できず、保持しているコピーもない。
ironflock os drives
このマシンのドライブのうち、IronFlockOS イメージを書き込めるもの、つまり USB スティック、SD カード、外付けディスクを一覧表示します。ドライブへの書き込み、アンマウント、オープンは一切行いません。
ironflock os drives [flags]Linux と macOS で動作します。root は不要です。何も質問しません。Linux では lsblk(util-linux に含まれる)を実行し、/proc と /sys を読み取ります。macOS では diskutil list、diskutil info、hdiutil info を実行します。
フラグ
| フラグ | 意味 |
|---|---|
--all | 拒否されるドライブも、その理由とともに一覧表示します。 |
すべてのコマンドに共通するフラグは、フラグ、出力、終了コード に記載しています。
拒否されるドライブ
os flash は、os drives が拒否するドライブを同じ理由で拒否します。次のいずれかに当てはまるドライブは拒否されます(表示されるのは、最初に当てはまる理由です):
- パーティションである。たとえば
/dev/sdb1です。拒否の理由にはそのディスクが示されます。イメージはディスク全体に書き込むためです。 - ディスクではない。光学ドライブ、メモリ上のディスク(
zram)、ほかのドライブの上に構築されたボリューム(LVM、dm-crypt、RAID、device-mapper。macOS では APFS コンテナ、AppleRAID セット、その他の合成ディスク)、またはコマンドが知らない種類のデバイス(nbd、mtdblock)です。 - 実行中のシステムの一部を含んでいる。
/、/boot、/efi、/usr、/var、/etcまたはこれらの下のマウント(/boot/efiの EFI パーティション、/var/lib/dockerの Docker のデータ)、/home、/opt、/srv、/data、スワップ、ライブシステムの媒体です。システムがドライブ上にどのように置かれていても当てはまります。パーティション内、LVM、dm-crypt、RAID、device-mapper 経由、複数のドライブにまたがる btrfs ファイルシステム内、ZFS プール内、オーバーレイ内、ループデバイスが読み取るファイル内のいずれでも同じです。macOS では、/と/Systemの下のボリュームが対象で、その APFS コンテナをたどって、それらを含むディスクまで当てはまります。 - 使用中である。LVM、dm-crypt、RAID、device-mapper、マウントされたデータセットを持つ ZFS プール、またはそのドライブ上のファイルを読み取るループデバイスによる使用です。macOS では、そのドライブ上の APFS コンテナ、AppleRAID セット、ファイルがそのドライブ上にあるディスクイメージ、またはアタッチされていない Core Storage、AppleRAID、APFS コンテナによる使用も含みます。macOS は、APFS コンテナを含むスティックを、スティックを消去したときにしか手放さないため、理由にはスティックを消去するコマンドが示されます。たとえば
diskutil eraseDisk FAT32 IRONFLOCK MBR /dev/disk6(またはディスクユーティリティの「消去」)です。 - マシンの内蔵ディスクである。SATA ディスク、NVMe ディスク、ボードの eMMC などです。USB か、デバイスを取り外せるほかのバスで接続されていない限り、ドライブは内蔵とみなされます。内蔵カードリーダーは内蔵ですが、その SD カードはリムーバブルメディアであり、Mac でも書き込み先として示されます。macOS では、場所を示さないディスクは内蔵とみなされます。
os flash --allow-internalは、ほかの理由で拒否されない場合に、--driveで指定した内蔵ディスクに書き込みます。 - 実行中のシステムの一部を含んでいる可能性がある。実行中のシステムの一部をドライブまでたどれない場合は、すべてのドライブが拒否されます。システムがホスト上にあるコンテナの中や、macOS で Core Storage のように物理ディスクに到達しないボリューム上にシステムがある場合がこれに当たります。
- 読み取り専用である。ロックされた SD カードなどです。
- 媒体がない。カードが入っていないカードリーダーなどです。
マウントされたファイルシステムを持つドライブは、書き込み先として示されます。mounted にそれらが一覧表示され、os flash は書き込む前にそれらをアンマウントします。ループデバイスと、macOS でアタッチされたディスクイメージは一覧に表示されませんが、--drive で指定すれば os flash はそれに書き込みます。
IronFlockOS を実行しているデバイスでは、コマンドは stderr と warnings で警告します。同じターゲットの IronFlockOS イメージはすべて同じパーティション UUID を持つため、別の IronFlockOS ドライブが接続されている間は、実行中のシステムが自分のパーティションとそのドライブのパーティションを区別できないためです。
例
# 書き込めるドライブ
ironflock os drives
# すべてのドライブと、拒否される各ドライブの理由
ironflock os drives --all
# ドライブを JSON で
ironflock os drives --json結果
Linux の場合:
DEVICE SIZE BUS MODEL
/dev/sdb 15.9 GB usb SanDisk Ultra
/dev/mmcblk0 31.9 GB mmc SD32G--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 systemMac で --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 yes--json の場合(一部省略):
{"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":[]}| フィールド | 意味 |
|---|---|
size | バイト単位のサイズ。 |
bus | システムの表記によるバス:Linux では usb、sata、nvme、mmc。macOS では USB、Secure Digital、Apple Fabric、PCI-Express。 |
removable | 媒体をドライブから取り出せる。 |
serial | シリアル番号。Mac では示されません。 |
mounted | マウントされている、ドライブのファイルシステム。 |
system | ドライブが含む、実行中のシステムの部分。 |
maybe_system | 実行中のシステムのうち、ドライブまでたどれなかった部分。 |
holders | ドライブを使用しているもの。 |
writable, refusal | 拒否されたドライブ(--all の場合)は "writable":false を持ち、理由が refusal に入ります。 |
書き込めるドライブがない場合は、テキストでその旨が示され、drives は空で、終了コードは 0 です。
失敗する場合
- 終了コード 3 — Linux で
lsblkがインストールされていない、またはコマンドが Linux と macOS 以外のシステムで実行されている。
ironflock os flash
IronFlockOS をドライブ(USB スティック、SD カード、外付けディスク)に書き込み、デバイスの .flock ファイルをドライブの IRONFLOCKOS パーティションに置きます。これは、すべての IronFlockOS ドライブにある、その名前の FAT32 パーティションです。デバイスは初回起動時にこのファイルで登録されます。--output を付けると、代わりに同じ内容を仮想マシン用のディスクイメージファイルに書き込みます。
警告:ドライブ上のすべてが消去されます。書き込む前に、
ironflock os drivesでドライブ名を確認してください。os flashが自分でドライブを選ぶことはありません。
ironflock os flash -c <device.flock> (-d <drive> | --output <file>) [flags]| Linux | macOS | |
|---|---|---|
| 動作 | 対応 | 対応 |
| root | ドライブへの書き込みには必要 | ドライブへの書き込みには必要。ただし、ドライブの raw デバイスに書き込めるユーザーには不要 |
| 質問 | ドライブを消去する前、または --output のファイルを置き換える前。「No」があらかじめ選択されている | 同じ |
root でない場合、エラーは入力すべきコマンドラインを、先頭に sudo を付けて示します。macOS では、ドライブの raw デバイスに書き込めるユーザーには root は不要です。ディスクイメージをアタッチしたユーザーや、マシンの所有者がドライブを割り当てたユーザー(たとえば sudo chown <user> /dev/disk4 /dev/rdisk4 で)がこれに当たります。--output では、コマンドに root は不要です。root 権限 も参照してください。
フラグ
| フラグ | 意味 |
|---|---|
-c, --config <file> | デバイスの .flock ファイル。必須です。 |
-d, --drive <drive> | 消去して書き込むドライブ。Linux では /dev/sdb や /dev/mmcblk0、または /dev/disk/by-id の下にあるものなど、それを指すリンク。macOS では /dev/disk4(/dev/rdisk4 や disk4 も可)。ironflock os drives で一覧表示されます。 |
--output <file> | ドライブの代わりに書き込むファイル:仮想マシン用の raw ディスクイメージ。 |
--image <id> | 書き込むイメージ。ironflockos- は付けても付けなくてもよく、たとえば amd64-efi-nvidia。既定値:.flock ファイルが記載するハードウェア用のイメージ。 |
--image-file <file> | 事前にダウンロードしたイメージファイル。カタログにあるそのイメージのファイルである必要があります。 |
--installer | イメージを PC の内蔵ディスクにインストールするインストーラースティックを書き込みます。 |
--installer-disk <rule> | インストーラーが書き込むディスク:largest(既定値)、/dev/<name>、by-id:<id>。 |
--installer-confirm yes|no | インストーラーが書き込む前に PC のコンソールで質問するかどうか。既定値は yes。 |
--installer-after poweroff|reboot | インストーラーの完了後に PC が行うこと。既定値は poweroff。 |
--installer-allow-usb yes|no | インストーラーが USB ディスクに書き込んでよいかどうか。既定値は no。 |
--wifi-ssid <name> | .flock ファイルの WiFi の代わりに、デバイスが接続する WiFi。 |
--wifi-password-file <file> | --wifi-ssid のパスフレーズを 1 行で含むファイルまたはパイプ(/dev/stdin)。 |
--allow-internal | --drive で指定したドライブが、このマシンの内蔵ディスクであっても書き込みます。 |
すべてのコマンドに共通するフラグは、フラグ、出力、終了コード に記載しています。
動作
- ドライブをチェックします。
--driveを解決し、何かを読み取る、取得する、質問する前に、os drivesと同じ理由でドライブを拒否します。--driveがない場合(--outputもない場合)は、書き込めるドライブを示して終了コード 2 で終了します。 .flockファイルを読み取ります。 5 MiB 以下の*.flockという名前のファイルで、secretとdevice_keyを持ち、nameとserial_numberが単純な名前である JSON オブジェクトである必要があります。- イメージを選びます。 署名付きのカタログから選び、カタログは
os imagesと同じように取得して検証します。--imageで指定したイメージ、なければ.flockファイルが記載するハードウェアの既定のイメージ(base バリアント、標準カーネル)を選びます。ハードウェアは.flockのboard.modelで、それがなければ、カタログにそのアーキテクチャ用のハードウェアが 1 つだけある場合にarchitectureで決まります。--installerを付けると、そのハードウェア用で、そのイメージを含むインストーラースティックを選びます。 - 計画を示します。 stderr に、イメージ、そのファイルの取得元、
.flockファイル(名前)、WiFi、ドライブ、アンマウントするドライブのファイルシステムを表示します。その後、質問します。「No」があらかじめ選択されているため、Enter だけでは何も消去されません。 - イメージファイルを取得します。
--image-fileのファイル、なければキャッシュのコピー、それもなければキャッシュへのダウンロードで、以前のダウンロードが止まったところから再開します。root の場合、キャッシュは Linux では/var/cache/ironflock/images、macOS では/var/root/Library/Caches/ironflock/imagesです。ダウンロードは.partファイルに書き込まれます。各ファイルは、そのサイズと SHA-256 がカタログと一致する場合にだけ書き込まれます。1 分間 1 バイトも届かないダウンロードの試行は終了し、そのような試行が 3 回続くとダウンロードを断念します。 - ドライブを再度チェックします。 計画で示したドライブであり、引き続き拒否されないものである必要があります。つまり、同じデバイス、サイズ、シリアル番号、媒体であることです。Linux では、ベンダー、モデル、バス、各パーティションとそのファイルシステム、ラベル、UUID、サイズも含みます。シリアル番号を示さない macOS では、モデル、バス、デバイスツリー内の位置、各パーティションとその UUID です。計画の後に抜かれたスティックの名前は、次に挿されたドライブに引き継がれます。そのようなドライブには書き込まれず、何もアンマウントされません。その後、コマンドは計画に記載したファイルシステムを、それだけをアンマウントし、ドライブを書き込み用に排他的に開きます。macOS では raw デバイス(
/dev/rdisk4)を通して書き込みます。2 つ目のos flashは、同時にそれを開くことができません。 - イメージを書き込み、その後ドライブを読み戻して比較します。
.flockファイルを書き込みます。IRONFLOCKOSパーティションをマウントせずに、そのルートフォルダーに書き込みます。インストーラースティックにはinstaller.confも書き込まれます。--wifi-ssidを付けた場合、ドライブ上のコピーにはそのネットワークが記載されます。.flockファイル自体は変更されません。- macOS では、ドライブを取り出します(
diskutil eject)。これで取り外せるようになります。取り出しに失敗しても、ドライブへの書き込みは完了しています。コマンドが警告を出すので、取り外す前に Finder でドライブを取り出してください。
root の場合、コマンドは、キャッシュフォルダーがリンクではなくフォルダーで、root の所有であり、ほかの誰も書き込めない場合にだけ使います。存在しない場合はモード 0700 で作成し、それ以外の場合は、そこで何かを読み取る、削除する、ダウンロードする前に停止します。カタログのイメージを取得する前に、カタログに記載されなくなったキャッシュ内のイメージファイルと、その途中までのダウンロードを削除します。
.flock ファイルが記載するものと異なるハードウェア用の --image は、計画に警告を出したうえで書き込まれます。そのデバイスではアプリが動作しないためです。IronFlockOS を実行しているデバイスでは、計画は os drives と同じように警告します。--allow-internal を付けると、計画はドライブが内蔵ディスクであることを警告します。
--yes は質問に「はい」と答えます。端末がなく(パイプ、スクリプト)--yes もない場合、コマンドは質問せず、終了コード 4 で終了します。--json も何も質問しないため、ドライブに書き込むには --yes が必要です。--json では計画は出力されず、stderr には進捗イベントだけが出力され、警告は結果に含まれます。質問と確認 と 出力と JSON を参照してください。
WiFi
デバイスは、.flock ファイルが記載する WiFi に接続します。--wifi-ssid は別のネットワークを指定します。IronFlockOS はパスフレーズ付きの WiFi にだけ接続するため、--wifi-ssid と --wifi-password-file は常に一緒に指定します。パスフレーズはファイルまたはパイプから取得し、コマンドラインからは取得しません。コマンドラインは ps やシェルの履歴に表示されるためです。コマンドはパスフレーズをどこにも表示しません。ドライブ上の .flock ファイルのコピーには、wlanssid と password にネットワークが記載されます。
注意:パスフレーズを
/dev/stdinから渡す場合、stdin は端末ではないため、コマンドは質問できません。--yesを追加してください。
インストーラースティック
--installer を付けると、ドライブは UEFI を備えた PC(amd64-efi、arm64-efi)用のインストーラースティックになります。インストーラーイメージは ironflock os images --variant installer で一覧表示されます。スティックには、そのハードウェア用の複数のイメージが含まれます。スティック上の installer.conf は、インストールするイメージ(payload。手順 3 と同じように選ばれたイメージ)を示し、指定した --installer-* フラグを保持します。PC がスティックから起動すると、インストーラーは次のように動作します:
--installer-diskに従ってディスクを選びます。最大のディスク(既定値)、ディスク/dev/<name>、または ID がby-id:<id>のディスクです。USB ディスクに書き込むのは、--installer-allow-usb yesの場合だけです。--installer-confirm noでない限り、書き込む前に PC のコンソールで質問します。- イメージとデバイスの
.flockファイルを、そのディスクに書き込みます。 - PC の電源を切ります(既定値)。
--installer-after rebootの場合は再起動します。
スティックを抜き、PC を内蔵ディスクから起動します。デバイスは初回起動時に登録されます。
警告:
--installer-confirm noで書き込んだスティックは、そこから起動したすべての PC のディスクを、質問せずに消去します。そのようなスティックにはラベルを付け、ほかのマシンから離して保管してください。
スティックを使わずに稼働中のマシンの Linux を置き換えるには、Linux を IronFlockOS に置き換える を参照してください。
ダウンロード済みのイメージファイル
--image-file は、事前にダウンロードしたイメージファイルを書き込みます。たとえば、カタログのイメージファイルをダウンロードできないマシンで使います。ファイルのアドレスは、os images --json の url から取得してください。ファイルは、そのイメージについてカタログにあるサイズと SHA-256 に一致する場合にだけ書き込まれます。
コマンドは、ファイルをチェックするために、引き続き署名付きのカタログを必要とします。カタログを取得するか、ダウンロードサーバーに到達できない場合は、同じダウンロードベースのカタログを最後に検証したときに保持したコピーを使います。このコピーはユーザーごとで、root の場合は root のコピーです。独自のサーバーも使えます。別のダウンロードベース(--download-base または IRONFLOCK_DL_BASE)を指定すると、コマンドはカタログを <download base>/ironflockos/manifest.json から、イメージファイルを <download base>/ironflockos/<version>/<file> から取得します。
注意:ファイルは書き込みの間にもう一度読み取られ、その SHA-256 は書き込みの後に初めて再確認されます。ほかのユーザーが変更できない場所にファイルを置いてください。
仮想マシン用のイメージファイル
--output <file> は、イメージとデバイスのファイルを、ドライブの代わりに通常のファイルに書き込みます。仮想マシンがディスクとして起動する raw ディスクイメージです。イメージ、そのチェック、IRONFLOCKOS 内のファイルは、ドライブの場合と同じです。ドライブを探すことも、アンマウントすることも、開くこともないため、コマンドに root は不要です。--image、--image-file、--installer とそのフラグ、--wifi-ssid は、ドライブの場合と同じように機能します。
- サイズ — 計画には、ファイルとそのサイズ、つまり展開したイメージのサイズが示されます。イメージをまだダウンロードする必要がある場合、その行はダウンロードの後に出力されます。
- 質問 — 新しいファイルでは何も消去されないため、コマンドは質問しません。既存のファイルは置き換えられます。計画にその旨が示され、コマンドは先に質問します。
- まず別の名前で — イメージは、同じフォルダー内の新しいファイル
<file>.<number>.partに書き込まれます。そのファイルがイメージ全体を含み、読み戻して検証され、IRONFLOCKOSパーティションにデバイスのファイルを含んだ時点で初めて、名前<file>が付けられます。書き込みが失敗または中断した場合は.partファイルが削除され、その名前には何もないか、元からあったファイルが変更されずに残ります。kill -9や停電では、.partファイルが残ることがあります。 - 非公開 — このファイルには、
.flockファイルと同じくデバイスのシークレットが含まれます。モード 0600 が設定され、より広いモードのファイルを置き換える場合も同じです。 - スパース — イメージにゼロだけのブロック(4 MiB 単位のブロック)がある箇所では、ホールに対応したファイルシステム上であれば、ファイルにホールが作られます。読み取った内容は同じで、使う領域が少なくなります。
# 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.イメージは、IRONFLOCKOS パーティションと、IronFlockOS が交互に更新する 2 つのシステムスロットの 1 つ目(スロット A)を含みます。初回起動時に、IronFlockOS はスロット A と同じ大きさのスロット B と、ディスクの残りの領域にデータパーティション /data を作成します。仮想マシンがファイルから初めて起動する前に、ファイルを拡張してください。base では 10 GiB 以上、nvidia では 18 GiB 以上です。拡張した分はゼロで、ファイルシステムはこれをホールとして保持します。raw ディスクを扱えるハイパーバイザーは、ファイルをそのまま使います。ほかの形式にするには、拡張したファイルを変換します。たとえば qemu-img convert -f raw -O qcow2 device.img device.qcow2 です。
amd64-efi と arm64-efi のイメージは QEMU で起動しますが、Raspberry Pi のイメージ(rpi-arm64)は起動しません。KVM とパッケージ ovmf(Debian、Ubuntu)の UEFI ファームウェアを備えた Linux 上で amd64-efi を起動する場合:
# ファイルを拡張し、ファームウェアの変数をコピーして、マシンを起動する
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-nographicは、最初のシリアルポートを端末につなぎます。GRUB とカーネルはそこに出力します。Ctrl-A X で QEMU を終了します。-device i6300esbはウォッチドッグです。IronFlockOS は、これを通してハングしたマシンを再起動します。-netdev userは、マシンにホストのネットワークを使わせます。デバイスはこれを通して IronFlock に到達します。- KVM がない場合(
/dev/kvmがない、またはホストのアーキテクチャが異なる場合)は、-accel kvmを外して-cpu maxを使います。その場合、QEMU はマシンをエミュレートするため、はるかに遅くなります。
arm64-efi は、qemu-system-aarch64 -machine virt と、パッケージ qemu-efi-aarch64 のファームウェア(/usr/share/AAVMF/AAVMF_CODE.fd と AAVMF_VARS.fd のコピー)で、ウォッチドッグなしで起動します。Apple シリコンを搭載した Mac では、Homebrew の QEMU で、-accel hvf -cpu host とファームウェア /opt/homebrew/share/qemu/edk2-aarch64-code.fd、および edk2-arm-vars.fd のコピーを使って起動します。
例
# .flock ファイルのハードウェア用の既定のイメージを USB スティックに書き込む
sudo ironflock os flash -c device.flock -d /dev/sdb
# PC に NVIDIA イメージをインストールするインストーラースティックを書き込む
sudo ironflock os flash -c device.flock -d /dev/sdb --image amd64-efi-nvidia --installer
# WiFi「Workshop」に接続するデバイス用の SD カードを書き込む
sudo ironflock os flash -c device.flock -d /dev/mmcblk0 --wifi-ssid Workshop --wifi-password-file wifi.txt
# Mac でスティックを書き込む
sudo ironflock os flash -c device.flock -d /dev/disk4結果
計画と進捗は stderr に出力され、最後の行が結果です。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.Mac で、まず root なしで、次に 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.--json の場合。ここではインストーラースティックの例です(--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":[]}--output の場合、結果には drive の代わりに output があります。たとえば "output":{"file":"/home/anna/device.img","replaced":true} です。
| フィールド | 意味 |
|---|---|
action | flashed |
device | .flock ファイルから取得したデバイスの名前。 |
device_file | IRONFLOCKOS 内の .flock ファイルの名前。 |
hardware | イメージの対象ハードウェア。 |
image | 書き込んだイメージ:image_id、version、そのファイルの file、url、size、sha256。url はダウンロード元、またはダウンロードしていれば使われたはずの場所です。 |
installer | インストーラースティックの場合のみ:インストールするイメージである payload と、インストーラーが適用する disk、confirm、after、allow_usb。 |
wifi | ssid と from:flock または flags。WiFi がない場合は null。 |
drive | ドライブの場合のみ:device、size、bus、model、serial、internal。internal は、--allow-internal で書き込んだ内蔵ディスクの場合に true です。 |
output | --output の場合のみ:絶対パスである file と、同じ名前のファイルを置き換えた場合に true となる replaced。 |
source | イメージファイルの取得元:download、cache、file。 |
unmounted | 書き込み前にアンマウントしたマウントポイント。--output では空です。 |
bytes, verified | 書き込んだバイト数(セクター単位に切り上げたイメージのサイズ。--output ではファイルのサイズ)と、ドライブまたはファイルからそれを読み戻して検証したこと。 |
ejected | macOS:ドライブが取り出され、取り外せる状態であること。Linux と --output では false。 |
files | IRONFLOCKOS に書き込んだファイル。 |
catalog | 使用したカタログ:issued_at、key_id、from_cache、およびこの ironflock がカタログから除いたものについての notes。 |
warnings | 計画の警告と、macOS ではドライブを取り出せなかったこと。 |
拒否する場合
終了コード 3。何も書き込まれません:
- ドライブが、
os drivesが拒否するものである。エラーには理由が示され、--yesを付けても変わりません。唯一の例外はこのマシンの内蔵ディスクです。--driveで指定した場合、--allow-internalはそれに書き込みます。このフラグでドライブが書き込めるようになる場合は、エラーにこのフラグが示されます。このフラグはほかの拒否を解除せず、質問にも答えません。 - 計画と書き込みの間にドライブが変わった、またはその時点で拒否される。エラーには何が変わったかが示されます。
- ドライブを開いたときに使用中である。計画に記載されていないファイルシステムがマウントされている、ファイルシステムをアンマウントできない、またはプログラムがドライブを使用している。
- コマンドが root で実行されていない(macOS では、ドライブの raw デバイスに書き込めるユーザーとしても実行されていない)。エラーには
sudoを付けたコマンドラインが示されます。 --outputの場合:何かを読み取る、取得する前の時点で、その名前が通常のファイルではない(デバイス、フォルダー、名前付きパイプ、またはシンボリックリンク)、またはそのフォルダーが存在しない。新しいファイルを作れないフォルダー(権限がない、読み取り専用のファイルシステム)は、計画の後、ダウンロードの前に拒否されます。計画では新しいファイルとされていたのに、イメージの書き込み中にその名前で作られたファイルは置き換えられません。
終了コード 2。コマンドラインの誤り:
--driveも--outputもない(--allow-internalを付けた場合も)。--driveまたは--allow-internalと組み合わせた--output、名前のない--output、-を指定した--output。-cの.flockファイルまたは--image-fileのファイルを指定した--output。--installerなしの--installer-*フラグ、またはインストーラーが受け付けない値。--wifi-password-fileなしの--wifi-ssid、またはその逆。- どのハードウェア用かを記載していない
.flockファイル。その場合は--imageでイメージを選びます。 - カタログにないイメージ、そのイメージを含まないインストーラースティック、またはインストーラースティックのないハードウェア。
--hostでの--image-fileと--output。--hostはイメージファイルを別のマシンにコピーせず、ファイルを持ち帰ることもしないためです。このコマンドは--hostを付けずにここで実行するか、マシン自体で実行してください。.flockファイルとパスフレーズファイルは一緒に送られます。
終了コード 4:質問に「いいえ」と答えた(Enter だけ、または Esc)、または質問できず、--yes も指定されていなかった。
終了コード 1。コマンドが失敗した:
.flockファイルまたはパスフレーズファイルが正しいものでない、またはイメージファイルがカタログのものでない。os imagesが失敗するのと同じ理由で、カタログを使えない。- ダウンロード、書き込み、または読み戻しが失敗した。最初のブロックの後で書き込みが失敗した場合(I/O エラー、イメージより小さいドライブ)は、ドライブにイメージの一部が書き込まれていて、それでは何も起動しないことが示されます。もう一度書き込んでください。
- イメージはドライブに書き込まれて読み戻しも済んだが、
.flockファイルをIRONFLOCKOSに書き込めなかった。このファイルがないとデバイスは登録されません。同じコマンドで両方をもう一度書き込みます。 --outputの場合:ファイルシステムがいっぱいである、デバイスのファイルをイメージに入れられない、またはイメージの書き込み中に.partファイルのエントリーが置き換えられた。その場合、名前は以前のままです。
終了コード 130:イメージのダウンロード、書き込み、読み戻しの最中の Ctrl-C。中断されたダウンロードは何も書き込んでおらず、同じコマンドで再開されます。書き込みや読み戻しは次のブロックで止まり、エラーはドライブに何が残っているかを示します。最後のブロックを読み戻した後は、コマンドは残りの短い手順を最後まで実行し、0 で終了します。2 回目の Ctrl-C はコマンドをすぐに終了させます。--output の場合は .part ファイルが残ることがあります。