2026/01/09(金)ディスク無罪

zpool に異常が起きたので嫌々ながら HDD を2本買ってデータを移行したけど、問題は SATA カードか、ケースのHDDバックプレーンの結線が怪しかった?

安物のSATAカードを買ったんだけど、なんか不安になったので HBA カードを買った。HPとかNECの中古サーバーから抜いて売られてる LSI 7300 チップのやつ。

カードを入れ替えてケーブルを差し替えて終わり。 GPTラベルを設定して、それを識別子として zpool を構成しているのでデバイス名が変わっても影響を受けない。

カードが届いて小一時間で入れ替えが終わってしまう便利さと一抹の寂しさ。

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 を使って付与したラベルを使うのが安全そう。

2025/02/27(木)emacs

書く分には色々試してもいいんだけど、読むときの方が手に馴染んだものがいい。というか emacs がいい。

emacs はファイラーでもある。dired とか sppedbar とかがなくても充分素早い操作ができる。それをマウスを使わずホームポジションだけで操作できる。

そのままファイルの内容をインクリメンタルサーチできる。正規表現サーチできる。ディレクトリのgrepは、なんかクセがある。でもシェルを起動してgrepはできる。

マルチウィンドウマルチフレームマルチバッファをスイスイ行き来できる。

こんなエディタ他に無いんだよな。GUIを容赦なく使いこなすあたり、Vimにはない特徴だと思う。

M-x 5 2 を打ちまくれ。

2025/01/19(日)おじさんがgoを学ぶ5 ChatGPT

ChatGPTいいですね。 goの「習得は優しいが使いこなすのは難しい」を解決するのに、

  • ストリーム型って持ち回っていいの?
  • このコードってベター?
    • 正解?じゃなく正解はないけどグラデーションがある質問にも回答をくれる

いちいち人に聞いたり調べたりしていたらきりがない質問も気兼ねなく聞ける。 RustやC#のように制限が強い言語もよいけど、goのようなゆるい言語をChatGPTで学ぶっていうのもよい。

2025/01/17(金)AIがプログラマを駆逐する

AIは既存のデータを大量に集めることで正解っぽいものを提示してる。プログラムなら github で公開されているコードから情報を集めたりしてる。

なので、プログラマがいない世界ではAIはプログラムを学べない。プログラマが書いたコードが大量に存在しないといけない。

本当にAIがプログラマの仕事を奪うにはAI最適化されたプログラム言語とか、制御構造はブラックボックスでいきなりアセンブラを吐くとかそんな世界なんじゃないかな。

って思いました。