2026/01/01(木)geom label のメモ

geom ラベルの操作がよくわからないので確認した。

geom part modify や geom パーティション作成の際の create にラベルを指定した場合はラベルがディスクに書き込まれる。glabel や geom label を使った場合はディスクに書き込まれない。OS上のgeomデータとして保持されるので、これは揮発する。という事らしい。

自分の理解では、ラベルの操作は3つのコマンドで実施できる。

  • glabel
  • geom label
  • gpart
    • create -l LABEL
    • modify -l LABEL

それぞれラベルの付き方や見え方が異なるみたいだ。

  • /dev/ 以下での見え方が異なる。
  • geom 関連コマンド

GEOMのラベルと GUID Partition のラベルをないまぜにとらえてしまっているのか?

gpart(8) の label の説明がこれ。GUID Partition のメタデータを使ってラベルを付けている。

-l label The label attached to the partition. This option is only valid when used on partitioning schemes that support partition labels.

glabel(8) の説明はこれ。GPT (= GUID Partition) だと思われる。

Support for partition metadata is implemented for:

  • GPT labels (directory /dev/gpt/).
  • GPT UUIDs (directory /dev/gptid/).

geom label は glabel っぽい。

geom(8) の説明。これっぽい。ラベルを付与するときに create サブコマンドを使うとデバイスには書き込まれない。label サブコマンドで作るとデバイスに書き込まれる。

create Create temporary label name for the given provider. This is the
“manual” method. The kernel module geom_label.ko will be loaded if it is not loaded already.
label Set up a label name for the given provider. This is the
“automatic” method, where metadata is stored in a provider's last sector. The kernel module geom_label.ko will be loaded if it is not loaded already.

動かしてみる

ada6p1 にラベルを付けてみる。初期状態。gptid だけ付与されている。

Geom name: ada6p1
Providers:
1. Name: gptid/074bb1ee-375d-11ed-8291-7085c2c786cd
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   secoffset: 0
   offset: 0
   seclength: 5860533088
   length: 3000592941056
   index: 0
Consumers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

glabel create で付与してみる。 geom ではラベルが付くが、gpt パーティションには書き込まれないはず。

%sudo glabel create labelc ada6p1

glabel list や geom label list だとラベルが見える .. code:

Geom name: ada6p1
Providers:
1. Name: gptid/074bb1ee-375d-11ed-8291-7085c2c786cd
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   secoffset: 0
   offset: 0
   seclength: 5860533088
   length: 3000592941056
   index: 0
Consumers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

Geom name: ada6p1
Providers:
1. Name: label/labelc
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   secoffset: 0
   offset: 0
   seclength: 5860533088
   length: 3000592941056
   index: 0
Consumers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

geom part list では label が null になっている。

%geom part list ada6
Geom name: ada6
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 5860533127
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,GPT,074bb1ee-375d-11ed-8291-7085c2c786cd,0x28,0x15d50a360)
   rawuuid: 074bb1ee-375d-11ed-8291-7085c2c786cd
   rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
   label: (null)
   length: 3000592941056
   offset: 20480
   type: freebsd-zfs
   index: 1
   end: 5860533127
   start: 40
Consumers:
1. Name: ada6
   Mediasize: 3000592982016 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

glabel label で付与してみる。デバイスに書き込まれず geom ラベルが上書きされた。想定外。

Geom name: ada6p1
Providers:
1. Name: gptid/074bb1ee-375d-11ed-8291-7085c2c786cd
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   secoffset: 0
   offset: 0
   seclength: 5860533088
   length: 3000592941056
   index: 0
Consumers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

Geom name: ada6p1
Providers:
1. Name: label/labell
   Mediasize: 3000592940544 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   secoffset: 0
   offset: 0
   seclength: 5860533087
   length: 3000592940544
   index: 0
Consumers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
%geom part list ada6
Geom name: ada6
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 5860533127
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,GPT,074bb1ee-375d-11ed-8291-7085c2c786cd,0x28,0x15d50a360)
   rawuuid: 074bb1ee-375d-11ed-8291-7085c2c786cd
   rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
   label: (null)
   length: 3000592941056
   offset: 20480
   type: freebsd-zfs
   index: 1
   end: 5860533127
   start: 40
Consumers:
1. Name: ada6
   Mediasize: 3000592982016 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

gpart modify, geom part modify を使うとパーティションに書き込まれる。 .. code:

%sudo gpart modify -i 1 -l "on-partition" ada6
ada6p1 modified
%geom part list ada6
Geom name: ada6
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 5860533127
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: ada6p1
   Mediasize: 3000592941056 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,GPT,074bb1ee-375d-11ed-8291-7085c2c786cd,0x28,0x15d50a360)
   rawuuid: 074bb1ee-375d-11ed-8291-7085c2c786cd
   rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
   label: on-partition
   length: 3000592941056
   offset: 20480
   type: freebsd-zfs
   index: 1
   end: 5860533127
   start: 40
Consumers:
1. Name: ada6
   Mediasize: 3000592982016 (2.7T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

man を読んで把握した内容とは食い違うけど、

  • glabel コマンドではパーティションに書き込まない
  • gpart modify, create や geom part modify, create では書き込める

という事みたい。zpool の指定にデバイス名ではなくラベルを使いたくて確認していたけど、label だと揮発してしまうので modify を使って付与したラベルを使うのが安全そう。

2024/09/30(月)ignitionでパッケージインストール

FedoraCoreos にパッケージを追加する場合は Ansible でも使うのがいいかな?と考えていたけど、一応公式ドキュメントにパッケージを追加する場合のサンプルがある。

https://docs.fedoraproject.org/en-US/fedora-coreos/os-extensions/

Type=oneshot で systemd ユニットを実行する事で起動時に一回だけ実行させる方法が取られている。これを ignition で実行する事でOSインストール時に一緒に実行できる。もっといい方法を導入する予定だ、と2020年に宣言されているが続報はない。

簡単な操作ならこれでもいい。 Ansible をインストールするような systemd ユニットを作るのが妥協点だろうか。

https://pvamos.github.io/fcos-k8s/

そんな事例を見つけた。

2024/09/29(日)bhyveでk8s - #1 fedoracoreos

参考情報

参考情報をみてやるだけ、ではある。 https://docs.freebsd.org/en/books/handbook/virtualization/#virtualization-host-bhyve https://forums.freebsd.org/threads/hints-for-installing-fedora-in-bhyve.80257/

目論見

  • 管理ノードを3台で構築する。
  • ワーカーノードを2台くらい作る。
  • なんか乗せる。

余力で

  • bhyve で node のスケーリングってできる?
  • ignition を 動的に作成できないか
    • 人の手で構築するのはナウくない気がする

やってみるとクラウド環境って便利。自動化とかスケーリングとか当たり前にある前提だけどローカルにそれらはない。kind とか minikube 使わずコントロールプレーン側を触ってみるのが目的なので不便は承知。

作業

bhyve 環境は出来ている前提

Fedora CoreOs の準備

Live DVD をダウンロードしておく https://fedoraproject.org/

ディスクを作る

散らからないように階層を掘ってボリュームを作る。例では k8s という階層にまとめた。

sudo zfs create  -o mountpoint=none stor/k8s
sudo zfs create -V 16G stor/k8s/coreos01
sudo zfs create -V 16G stor/k8s/coreos02
sudo zfs create -V 16G stor/k8s/coreos03

ネットワークインタフェース作成

bridge インターフェースはbhyve環境として準備されている前提。

sudo ifconfig tap create
sudo ifconfig bridge addm tap0

ignition ファイルを作る

  • fedoraCoreOSは初期設定を ignition ファイルで指定するらしい
  • yaml で書いて、butane というツールで json に変換するらしい
  • なぜ変換を介在させるのかはよくわからない
  • テンプレートエンジンを持っているとか器用なことができるわけではない

ファイルを用意

  • ssh 公開鍵を置く
    • 2つあるのはbhyveホストと普段の生活環境PCの分
  • IP アドレスを指定する
    • DHCP側でIPアドレスを固定できるならその方が楽かも
    • hostname って NetworkNodemanager の設定で指定できないの?
  • ファイルは http で公開する
    • 署名付き S3 とか
    • ローカルHTTPサーバとか
variant: fcos
version: 1.5.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAGbIdk/TcXdtEmKo7MgQGmhOKmaZgxGG8YXzWUP84yx1yI44YOlGUgSez4aR5JoJ40XdoyNJY6eJyN== BSD
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5A mac
storage:
  files:
    - path: /etc/NetworkManager/system-connections/enp0s2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=enp0s2
          type=ethernet
          interface-name=enp0s2
          [ipv4]
          dns=192.168.3.1
          gateway=192.168.3.1
          address1=192.168.1.1/22
          method=manual

このファイルを butane で ign ファイルに変換する。適当に Linux VM を用意して実行する。

https://docs.fedoraproject.org/en-US/fedora-coreos/producing-ign/#_via_a_container_with_podman_or_docker

インストーラーの起動

こんな具合のスクリプトを使って Fedoracoreos のLiveDVDを起動する。 fbufのパスワードが指定してあるのは、指定なしだと接続できなかったため。mac の 画面共有アプリのせいなのかどうなのかは未確認。

while ループに入れているのは、ゲストOSの再起動時にも bhyve が終了してしまうので。bhyve の戻り値はゲストの終了の仕方によって決まっていて、再起動のときは 0 が返る。

CoreOS は自動で更新して自動で再起動するが、bhyveコマンドをループさせておかないとこのタイミングでVMが終了してしまう。

while [ $? -eq 0 ]; do
bhyve -A -H -P -c 2 -m 2048M \
  -s 0:0,hostbridge \
  -s 1:0,lpc \
  -s 2:0,virtio-net,tap0 \
  -s 3:0,virtio-blk,/dev/zvol/stor/k8s/coreos01 \
  -s 4:0,ahci-cd,/pub/ISO/Linux/FedoraCoreos/fedora-coreos-39.20231119.3.0-live.x86_64.iso \
  -s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait,password=pass \
  -s 30,xhci,tablet \
  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
  fedoracore01
done

mac では 画面共有 (Screen Sharing.app) で VNC 接続できる。とりあえずは Installing CoreOS on Bare Metal に従ってインストールする。

https://docs.fedoraproject.org/en-US/fedora-coreos/bare-metal/

起動したらインストーラーコマンドを実行する。

sudo coreos-installer install /dev/vda \
--ignition-url https://s3.ap-northeast-1.amazonaws.com/ign.teak.jp/k8smaster01.ign?response-content-disposition=inline&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAkaDmFwLW5vcnRoZWFzdC0xIkcwRQIh...

この後に続く kubeadm とかの設定が面倒そうだなぁ、と思っている。

2024/09/23(月)bhyve で Ubuntu24

久しぶりなのと土台の bhyve 環境もなくなっていたのでおさらいを兼ねて。

bridge と tap を作成する。

%sudo ifconfig bridge create
%sudo ifconfig tap create
%sudo ifconfig bridge0 addm tap0

/etc/rc.conf.d/bhyve_bridge0.conf をこんな感じ?

cloned_interfaces="bridge0"
autobridge_interfaces="bridge0"
autobridge_bridge0="tap* em0"

ISOイメージを手に入れて

%ls /pub/ISO/Linux/Ubuntu/ubuntu-24.04.1-live-server-amd64.iso

ディスクを作って

%sudo zfs create -V 16G stor/bhyve/ubuntu24

bhyve 起動コマンドをファイルに書く fbuf(Frame Buffer) デバイスを定義しているので 5900/TCP に VNC でつなげばコンソールが見える。

bhyve -A -H -P -c 2 -m 2048M \
  -s 0:0,hostbridge \
  -s 2:0,virtio-net,tap0 \
  -s 3:0,virtio-blk,/dev/zvol/stor/bhyve/ubuntu24 \
  -s 4:0,ahci-cd,/pub/ISO/Linux/Ubuntu/ubuntu-24.04.1-live-server-amd64.iso \
  -s 29,fbuf,tcp=0.0.0.0:5900,w=1024,h=800,wait,password=ubuntu \
  -s 30,xhci,tablet \
  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
  ubuntu24

起動

%sudo sh /common/bhyve/ubuntu.sh                                                     
fbuf frame buffer base: 0x151812a00000 [sz 16777216]

我が家は mac なので 画面共有(Screen Sharing)

スクリーンショット 2024-09-23 9.34.46.png
で接続する。bhyve 側でVNCのパスワードを設定しておかないとうまく動かないっぽい。

スクリーンショット 2024-09-23 9.32.34.png

OpenSSH の有効化と docker ランタイムのインストールだけいじって、後は既定値。 sshはパスワード認証いけるらしい。

#PasswordAuthentication yes

nmdm を使ったシリアルコンソールがうまく動かないのはなんでだ。

2023/12/08(金)zvol 上の Dynamic Disk 内の ntfs

Windows PC を3年くらい起動してないんだけど、中のデータが欲しくなった。幸い、失いたくないデータは FreeBSD マシン上の zvol を iSCSI ディスクとして接続していた。

安直に

% mount -t ntfs-3g /dev/zvol/hoge/fuga /mnt
mount: /dev/zvol/stor/hoge/fuga: Invalid fstype: Invalid argument

ダメだ

ZFS Access data stored inside a Windows formatted iscsi volume へー、

  • fusefs-ntfs パッケージと、geom_part_ldm カーネルモジュールが必要
  • ctld がデバイスを握っていると geom 情報が見えない
  • fusefs-ntfs で入った ntfs-3g は mount の fstype として指定するのではなく、ntfs-3g というプログラムを呼ぶ
%sudo pkg install fusefs-ntfs
%sudo kldload geom_part_ldm
%sudo service  ctld stop
Stopping ctld.
Waiting for PIDS: 806.
%sudo gpart show /dev/zvol/hoge/fuga
=>       34  134217661  zvol/hoge/fuga  GPT  (64G)
         34       2048                          1  ms-ldm-metadata  (1.0M)
       2082     260096                          2  ms-reserved  (127M)
  262178  133955517                          3  ms-ldm-data  (64G)

おほっ

%sudo mount -t ntfs-3g -r /dev/zvol/hoge/fugap3s1 /mnt
mount: /dev/zvol/hoge/fuga: Invalid fstype: Invalid argument

あれ?

%sudo ntfs-3g -o ro /dev/zvol/hoge/fugap3s1 /mnt
%ls /mnt
$RECYCLE.BIN                    programs               fonts
home                            System Volume Information

かつては、PCSX2での3D描画が遅いのでグラボを買い替えたほどなのに、M2 mac book air で普通に動きそうなんスよね。時代の流れが怖いわー。もう個人的にはWindowsいらないのかも。この先なにかあって仕事でWindowsを使わされる時が来たらしんどいな。