はじめに
AIX (IBMが開発した企業向けのUNIX系オペレーティングシステム) の重要概念である ODM (Object Data Manager) について、最近忘れていたので思い出そうと自分用に調べた内容のまとめです。ご参考まで。
参考文書
1.2.11 ODM
ODMとは何か?
1. 基本概念
ODM(Object Data Manager, オブジェクト・データ・マネージャー) は、AIXシステム情報の保管を目的とするデータ・マネージャーです。
情報は「オブジェクト」として、関連する特性とともに保管・維持されます。
-
構成情報の保存
ODMは、物理ボリューム、論理ボリューム、ボリュームグループなどの属性や状態をデータベースとして管理します。LVMコマンド(例:mkvg、mklv、chvgなど)を実行すると、その結果がODMに記録されます。 -
システム起動時の参照
システムが起動する際、AIXはODMに保存された情報を読み込んで、論理ボリュームやファイルシステムを正しくマウントします。 -
構成の一貫性維持
ODMは、LVMの構成情報を一元的に管理することで、システム構成を維持しています。
2. ODMが管理する主なデータ
- 入出力装置構成情報 - ディスク、ネットワーク・アダプターなどのハードウェア情報
- SMIT表示情報 - システム管理インターフェースツールのメニューやダイアログ
- インストール・更新データ - ソフトウェアパッケージの重要情報
- 通信構成情報 - ネットワーク設定やプロトコル情報
- システム・リソース情報 - メモリ、CPU、その他のリソース情報
3. ODMの仕組み
ODMは厳密にはデータベースではなく、データベース・エンジンです。
オブジェクト・クラスから構成される、オブジェクト指向設計です。
主要なコンポーネント
1. オブジェクト・クラス(Object Classes)
オブジェクト・クラスは、同じ定義を持つオブジェクトのグループです。データベースのテーブルに相当します。
例: Fictional_Characters
オブジェクト・クラス
class Fictional_Characters {
char Story_Star[20]; // キャラクター名
char Birthday[20]; // 誕生日
short Age; // 年齢
char Friend[20]; // 友達
};
2. オブジェクト(Objects)
オブジェクトは、オブジェクト・クラスのメンバーです。データベースのレコードに相当します。
例: Fictional_Characters
クラスのオブジェクト
Fictional_Characters:
Story_Star = "Cinderella"
Birthday = "Once upon a time"
Age = 19
Friend = "mice"
3. ディスクリプター(Descriptors)
ディスクリプターは、オブジェクトの属性を定義します。
オブジェクト・クラスの各フィールド(カラム)に相当します。
主なディスクリプター・タイプ:
- char - 固定長文字列
- short - 2バイト整数
- long - 4バイト整数
- binary - バイナリデータ
- vchar - 可変長文字列
ODM コマンド
1. 基本的なODMコマンド
コマンド | 機能 |
---|---|
odmcreate | オブジェクト・クラスの作成 |
odmadd | オブジェクトの追加 |
odmget | オブジェクトの取得・表示 |
odmchange | オブジェクトの変更 |
odmdelete | オブジェクトの削除 |
odmdrop | オブジェクト・クラスの削除 |
odmshow | オブジェクト・クラスの構造表示 |
重要なODMオブジェクト・クラス
1. デバイス構成関連
以下はよく参照するオブジェクト・クラスの例です。
クラス名 | 説明 |
---|---|
PdDv | 事前定義デバイス(サポートされているすべてのデバイス) |
PdAt | 事前定義属性(デバイス属性のデフォルト値) |
CuDv | カスタマイズ・デバイス(実際に存在するデバイス) |
CuAt | カスタマイズ属性(デフォルト以外の属性値) |
CuDvDr | カスタマイズ・デバイス・ドライバー |
CuVPD | カスタマイズ重要製品データ |
2. データベースの場所
環境変数 ODMDIR で定義しています。デフォルトは /etc/objrepos
です。/usr/lib/objrepos
などにも存在しています。
# env | grep ODMDIR
ODMDIR=/etc/objrepos
#
# echo $ODMDIR
/etc/objrepos
- /etc/objrepos - 書き込み可能なODMクラス(デフォルト)
- /usr/lib/objrepos - 読み取り専用ODMクラス(ほとんどが事前定義情報)
AIX 7.3 TL1 # ls -l /etc/objrepos 結果(折りたたんでいます)
# oslevel -s
7300-01-01-2246
# ls -l /etc/objrepos
total 2824
-rw-r--r-- 1 root system 4096 Jul 27 07:54 CDiagAtt
-rw-r--r-- 1 root system 4096 Jul 27 07:54 CDiagAtt.vc
-rw-r--r-- 1 root system 4096 Jul 27 07:54 CDiagDev
-rw-r--r-- 1 root system 16384 May 14 2023 Config_Rules
-rw-r--r-- 1 root system 16384 Jul 07 02:36 CuAt
-rw-r--r-- 1 root system 4096 Jul 07 02:36 CuAt.vc
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuAtDef
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuAtDef.vc
-rw-r--r-- 1 root system 4096 May 19 04:57 CuAtSav
-rw-r--r-- 1 root system 4096 May 19 04:57 CuAtSav.vc
-rw------- 1 root system 4096 Jul 07 2024 CuData
-rw------- 1 root system 4096 Jul 07 2024 CuData.vc
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuDep
-rw-r--r-- 1 root system 12288 Mar 05 2025 CuDv
-rw-r--r-- 1 root system 32768 Mar 05 2025 CuDvDr
-rw-r--r-- 1 root system 4096 May 26 2023 CuLk
-rw-r--r-- 1 root system 4096 May 26 2023 CuLk.vc
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuPath
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuPath.vc
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuPathAt
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuPathAt.vc
-rw-r--r-- 1 root system 8192 Mar 05 2025 CuVPD
-rw-r--r-- 1 root system 4096 Jul 07 2024 CuWxt
-rw-r--r-- 1 root system 4096 May 26 2023 DAVars
lrwxrwxrwx 1 root system 28 Nov 21 2021 DSMOptions -> /usr/lib/objrepos/DSMOptions
lrwxrwxrwx 1 root system 31 Nov 21 2021 DSMOptions.vc -> /usr/lib/objrepos/DSMOptions.vc
lrwxrwxrwx 1 root system 24 Nov 21 2021 DSMenu -> /usr/lib/objrepos/DSMenu
-rw-r--r-- 1 root system 4096 May 26 2023 FRUB
-rw-r--r-- 1 root system 4096 May 26 2023 FRUB_SRC
-rw-r--r-- 1 root system 4096 May 26 2023 FRUs
-rw-r--r-- 1 root system 4096 May 26 2023 FRUs_src
-rw-r--r-- 1 root system 4096 May 26 2023 MenuGoal
lrwxrwxrwx 1 root system 26 Nov 21 2021 PDiagAtt -> /usr/lib/objrepos/PDiagAtt
lrwxrwxrwx 1 root system 29 Nov 21 2021 PDiagAtt.vc -> /usr/lib/objrepos/PDiagAtt.vc
lrwxrwxrwx 1 root system 26 Nov 21 2021 PDiagDev -> /usr/lib/objrepos/PDiagDev
lrwxrwxrwx 1 root system 29 Nov 21 2021 PDiagDev.vc -> /usr/lib/objrepos/PDiagDev.vc
lrwxrwxrwx 1 root system 26 Nov 21 2021 PDiagELA -> /usr/lib/objrepos/PDiagELA
lrwxrwxrwx 1 root system 29 Nov 21 2021 PDiagELA.vc -> /usr/lib/objrepos/PDiagELA.vc
lrwxrwxrwx 1 root system 26 Nov 21 2021 PDiagFRU -> /usr/lib/objrepos/PDiagFRU
lrwxrwxrwx 1 root system 29 Nov 21 2021 PDiagFRU.vc -> /usr/lib/objrepos/PDiagFRU.vc
lrwxrwxrwx 1 root system 28 Nov 21 2021 PDiagMcode -> /usr/lib/objrepos/PDiagMcode
lrwxrwxrwx 1 root system 31 Nov 21 2021 PDiagMcode.vc -> /usr/lib/objrepos/PDiagMcode.vc
lrwxrwxrwx 1 root system 26 Nov 21 2021 PDiagRes -> /usr/lib/objrepos/PDiagRes
lrwxrwxrwx 1 root system 29 Nov 21 2021 PDiagRes.vc -> /usr/lib/objrepos/PDiagRes.vc
lrwxrwxrwx 1 root system 26 Nov 21 2021 PDiagSRN -> /usr/lib/objrepos/PDiagSRN
lrwxrwxrwx 1 root system 29 Nov 21 2021 PDiagSRN.vc -> /usr/lib/objrepos/PDiagSRN.vc
lrwxrwxrwx 1 root system 25 Nov 21 2021 PDiagTU -> /usr/lib/objrepos/PDiagTU
lrwxrwxrwx 1 root system 28 Nov 21 2021 PDiagTU.vc -> /usr/lib/objrepos/PDiagTU.vc
lrwxrwxrwx 1 root system 27 Nov 21 2021 PDiagTask -> /usr/lib/objrepos/PDiagTask
lrwxrwxrwx 1 root system 30 Nov 21 2021 PDiagTask.vc -> /usr/lib/objrepos/PDiagTask.vc
lrwxrwxrwx 1 root system 22 Nov 21 2021 PdAt -> /usr/lib/objrepos/PdAt
lrwxrwxrwx 1 root system 25 Nov 21 2021 PdAt.vc -> /usr/lib/objrepos/PdAt.vc
lrwxrwxrwx 1 root system 25 Nov 21 2021 PdAtXtd -> /usr/lib/objrepos/PdAtXtd
lrwxrwxrwx 1 root system 28 Nov 21 2021 PdAtXtd.vc -> /usr/lib/objrepos/PdAtXtd.vc
lrwxrwxrwx 1 root system 22 Nov 21 2021 PdCn -> /usr/lib/objrepos/PdCn
lrwxrwxrwx 1 root system 22 Nov 21 2021 PdDv -> /usr/lib/objrepos/PdDv
lrwxrwxrwx 1 root system 25 Nov 21 2021 PdDv.vc -> /usr/lib/objrepos/PdDv.vc
lrwxrwxrwx 1 root system 26 Nov 21 2021 PdPathAt -> /usr/lib/objrepos/PdPathAt
lrwxrwxrwx 1 root system 29 Nov 21 2021 PdPathAt.vc -> /usr/lib/objrepos/PdPathAt.vc
-rw-rw-r-- 1 root system 4096 Jun 25 2021 SRCextmeth
-rw-rw-r-- 1 root system 4096 Sep 19 2024 SRCnotify
-r--r--r-- 1 root system 0 Nov 21 2021 SRCodmlock
-rw-rw-r-- 1 root system 4096 Sep 19 2024 SRCsubsvr
-rw-rw-r-- 1 root system 376832 Sep 19 2024 SRCsubsys
-rw-rw-r-- 1 root system 12288 Jul 07 2024 SWservAt
-rw-rw-r-- 1 root system 24576 Jul 07 2024 SWservAt.vc
-rw-r--r-- 1 root system 4096 May 26 2023 TMInput
-rw-rw-r-- 1 root system 4096 Nov 21 2021 acfnx_odm
-r--r--r-- 1 root system 0 Nov 21 2021 config_lock
lrwxrwxrwx 1 root system 31 May 11 2023 crypto_module -> /usr/lib/objrepos/crypto_module
lrwxrwxrwx 1 root system 34 May 11 2023 crypto_module.vc -> /usr/lib/objrepos/crypto_module.vc
-r--r--r-- 1 root system 0 May 26 2023 diag_lock
-r-------- 1 root system 0 May 26 2023 diag_log_lock
-rw-rw-r-- 1 root system 12288 Jul 07 2024 errnotify
-rw-rw-r-- 1 root system 102400 Mar 06 2025 history
-rw-rw-r-- 1 root system 4096 Mar 06 2025 history.vc
-rw-rw-r-- 1 root system 385024 Mar 06 2025 inventory
-rw-rw-r-- 1 root system 4096 Mar 06 2025 inventory.vc
-rw-rw-r-- 1 root system 65536 Jul 07 02:42 lpp
-rw-rw-r-- 1 root system 12288 Jul 07 02:42 lpp.vc
-rw-r--r-- 1 root system 30720 Sep 19 2024 nimdb.backup
-rw-rw-r-- 1 root system 131072 Jul 07 02:42 product
-rw-rw-r-- 1 root system 61440 Jul 07 02:42 product.vc
AIX 7.3 TL1 # ls -l /usr/lib/objrepos 結果(折りたたんでいます)
# oslevel -s
7300-01-01-2246
# ls -l /usr/lib/objrepos
total 56760
-r-------- 1 root system 0 Nov 21 2021 .sna.anynet.socksna.fail_install
-rw-rw-r-- 1 root system 303104 May 14 2023 CC
-rw-rw-r-- 1 root system 8192 May 14 2023 CC.vc
-rw-r--r-- 1 root system 4096 May 14 2023 DSMOptions
-rw-r--r-- 1 root system 4096 May 14 2023 DSMOptions.vc
-rw-r--r-- 1 root system 4096 May 14 2023 DSMenu
-rw-rw-r-- 1 root system 4096 May 14 2023 FONT
-rw-rw-r-- 1 root system 4096 May 14 2023 FONT.vc
-rw-r--r-- 1 root system 4096 Nov 21 2021 GAI
-rw-r--r-- 1 root system 4096 Nov 21 2021 GAI.vc
-rw-rw-r-- 1 root system 73728 May 14 2023 KEYBOARD
-rw-rw-r-- 1 root system 49152 May 14 2023 KEYBOARD.vc
-rw-rw-r-- 1 root system 8192 May 14 2023 MESSAGES
-rw-rw-r-- 1 root system 8192 May 14 2023 MESSAGES.vc
-rw-r--r-- 1 root system 90112 May 14 2023 PDiagAtt
-rw-r--r-- 1 root system 16384 May 14 2023 PDiagAtt.vc
-rw-r--r-- 1 root system 4096 Nov 21 2021 PDiagDev
-rw-r--r-- 1 root system 4096 Nov 21 2021 PDiagDev.vc
-rw-r--r-- 1 root system 32768 May 14 2023 PDiagELA
-rw-r--r-- 1 root system 4096 May 14 2023 PDiagELA.vc
-rw-r--r-- 1 root system 12288 May 14 2023 PDiagFRU
-rw-r--r-- 1 root system 4096 May 14 2023 PDiagFRU.vc
-rw-r--r-- 1 root system 24576 May 14 2023 PDiagMcode
-rw-r--r-- 1 root system 4096 May 14 2023 PDiagMcode.vc
-rw-r--r-- 1 root system 45056 May 14 2023 PDiagRes
-rw-r--r-- 1 root system 4096 May 14 2023 PDiagRes.vc
-rw-r--r-- 1 root system 45056 May 14 2023 PDiagSRN
-rw-r--r-- 1 root system 8192 May 14 2023 PDiagSRN.vc
-rw-r--r-- 1 root system 106496 May 14 2023 PDiagTU
-rw-r--r-- 1 root system 12288 May 14 2023 PDiagTU.vc
-rw-r--r-- 1 root system 8192 May 14 2023 PDiagTask
-rw-r--r-- 1 root system 4096 May 14 2023 PDiagTask.vc
-rw-r--r-- 1 root system 1126400 May 14 2023 PdAt
-rw-r--r-- 1 root system 155648 May 14 2023 PdAt.vc
-rw-r--r-- 1 root system 159744 May 14 2023 PdAtXtd
-rw-r--r-- 1 root system 36864 May 14 2023 PdAtXtd.vc
-rw-r--r-- 1 root system 237568 May 14 2023 PdCn
-rw-r--r-- 1 root system 90112 May 14 2023 PdDv
-rw-r--r-- 1 root system 49152 May 14 2023 PdDv.vc
-rw-r--r-- 1 root system 4096 May 14 2023 PdPathAt
-rw-r--r-- 1 root system 4096 May 14 2023 PdPathAt.vc
-rw-r--r-- 1 root system 4096 Nov 21 2021 XINPUT
-rw-r--r-- 1 root system 4096 Nov 21 2021 XINPUT.vc
-rw------- 1 root system 4096 May 14 2023 crypto_module
-rw------- 1 root system 4096 May 14 2023 crypto_module.vc
-rw-r----- 1 root system 256 Apr 21 2023 dsc.sig
-rw-r----- 1 root system 21 Apr 06 2023 dsc.vrmf
-rw-r----- 1 root system 3543040 Apr 21 2023 dsc_inventory
-rw-r----- 1 root system 4694016 Apr 21 2023 dsc_inventory.vc
-rw-r----- 1 root system 4096 Aug 12 2020 dsc_key
-rw-r----- 1 root system 4096 Aug 12 2020 dsc_key.vc
-rw-r----- 1 root system 4096 Aug 12 2020 dsc_keystore
-rw-rw-r-- 1 root system 4096 Aug 13 2020 file_overlay
-rw-rw-r-- 1 root system 4096 Aug 13 2020 file_overlay.vc
-rw-rw-r-- 1 root system 167936 Mar 06 2025 fix
-rw-rw-r-- 1 root system 335872 Mar 06 2025 fix.vc
-r--r--r-- 1 root system 0 Nov 21 2021 fix_lock
-rw-rw-r-- 1 root system 147456 Jul 07 02:42 history
-rw-rw-r-- 1 root system 4096 Jul 07 02:42 history.vc
-rw-rw-r-- 1 root system 11038720 Jul 07 02:42 inventory
-rw-rw-r-- 1 root system 471040 Jul 07 02:42 inventory.vc
-rw-rw-r-- 1 root system 4096 May 14 2023 lag
-rw-rw-r-- 1 root system 4096 May 14 2023 lag.vc
-rw-rw-r-- 1 root system 118784 Jul 07 02:42 lpp
-rw-rw-r-- 1 root system 24576 Jul 07 02:42 lpp.vc
-rw-rw-r-- 1 root system 208896 Jul 07 02:42 product
-rw-rw-r-- 1 root system 106496 Jul 07 02:42 product.vc
-rw-rw-r-- 1 root system 356352 Mar 06 2025 sm_cmd_hdr
-rw-rw-r-- 1 root system 729088 Mar 06 2025 sm_cmd_hdr.vc
-rw-rw-r-- 1 root system 2129920 Mar 06 2025 sm_cmd_opt
-rw-rw-r-- 1 root system 1077248 Mar 06 2025 sm_cmd_opt.vc
-rw-rw-r-- 1 root system 557056 Mar 06 2025 sm_menu_opt
-rw-rw-r-- 1 root system 122880 Mar 06 2025 sm_menu_opt.vc
-rw-rw-r-- 1 root system 106496 Mar 06 2025 sm_name_hdr
-rw-rw-r-- 1 root system 163840 Mar 06 2025 sm_name_hdr.vc
-rw-r--r-- 1 root system 4096 Jun 25 2021 snap_config
-rw-r--r-- 1 root system 4096 Jun 25 2021 snap_config.vc
-rw-rw-r-- 1 root system 4096 Nov 21 2021 vendor
-rw-rw-r-- 1 root system 4096 Nov 21 2021 vendor.vc
使用例
主に参照系で使用することが多いです。
CuAt の で en0 の IPアドレスを確認する例
# odmget -q "name=en0 and attribute=netaddr" CuAt
CuAt:
name = "en0"
attribute = "netaddr"
value = "172.16.200.36"
type = "R"
generic = "DU"
rep = "s"
nls_index = 4
#
- CuDv で hdisk0 を確認する例
# odmget -q "name=hdisk0" CuDv
CuDv:
name = "hdisk0"
status = 1
chgstatus = 2
ddins = "scsidisk"
location = "C2-T0-01"
parent = "fscsi0"
connwhere = "W_0"
PdDvLn = "disk/fcp/mpioosdisk"
#
そのほか、下記の記事で ODM の操作を実施している例があります。
注意事項と推奨事項
AIX の構成情報のため直接的に変更するケースは多くありませんが、操作には十分な注意が必要です。
ODMの安全な操作のために
- 必ずバックアップを作成 - ODM操作前に必ずバックアップ
- テスト環境で確認 - 本番環境での直接操作は避ける
- IBMサポートとの連携 - 複雑な変更はサポートと相談
避けた方が良い操作
- システム・オブジェクト・クラスの直接編集
- /usr/lib/objreposディレクトリの直接変更
- バックアップなしでのODM操作
コマンドとの関連
ODMは以下のAIXコマンドの基盤です:
- lsdev - デバイス・リストの表示
- lsattr - デバイス属性の表示
- chdev - デバイス属性の変更
- cfgmgr - デバイス構成マネージャー
- mkvg, chvg, mklv, chlv など - VG(ボリューム・グループ)、LV(論理ボリューム)操作
- smit - システム管理インターフェース・ツール
これらのコマンドは内部的にODMを参照・更新しています。
おわりに
AIX ODMは、システム構成情報の重要なコンポーネントです。
ポイント:
- ODMは情報の保管・管理を行うデータベース・エンジン
- オブジェクト・クラス、オブジェクト
- 安全な操作のためのバックアップが必須
- 多くのAIXコマンドがODMを基盤として動作
odmget
コマンドでの情報表示から始めて、徐々にODMの仕組みを理解していくことがお勧めです。
以上です。