[AIX Tips] AIX の ODM(Object Data Manager) とは?

## はじめに

AIX (IBMが開発した企業向けのUNIX系オペレーティングシステム) の重要概念である ODM (Object Data Manager) について、最近忘れていたので思い出そうと自分用に調べた内容のまとめです。ご参考まで。


### 参考文書


* [オブジェクト・データ・マネージャー](https://www.ibm.com/docs/ja/aix/7.3.0?topic=concepts-object-data-manager)


* Redbooks : [AIX Logical Volume Manager, from A to Z: Introduction and concepts](https://www.redbooks.ibm.com/redbooks/pdfs/sg245432.pdf)

> 1.2.11 ODM 


---

## ODMとは何か？

### 1. 基本概念

**ODM（Object Data Manager, オブジェクト・データ・マネージャー)** は、AIXシステム情報の保管を目的とするデータ・マネージャーです。
情報は「オブジェクト」として、関連する特性とともに保管・維持されます。

<br>

* 構成情報の保存
ODMは、物理ボリューム、論理ボリューム、ボリュームグループなどの属性や状態をデータベースとして管理します。LVMコマンド（例：mkvg、mklv、chvgなど）を実行すると、その結果がODMに記録されます。

* システム起動時の参照
システムが起動する際、AIXはODMに保存された情報を読み込んで、論理ボリュームやファイルシステムを正しくマウントします。



* 構成の一貫性維持
ODMは、LVMの構成情報を一元的に管理することで、システム構成を維持しています。

### 2. ODMが管理する主なデータ

- <font color="green"><b>入出力装置構成情報</b></font> - ディスク、ネットワーク・アダプターなどのハードウェア情報
- <font color="green"><b>SMIT表示情報</b></font> - システム管理インターフェースツールのメニューやダイアログ
- <font color="green"><b>インストール・更新データ</b></font> - ソフトウェアパッケージの重要情報
- <font color="green"><b>通信構成情報</b></font> - ネットワーク設定やプロトコル情報
- <font color="green"><b>システム・リソース情報</b></font> - メモリ、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）

ディスクリプターは、オブジェクトの属性を定義します。
オブジェクト・クラスの各フィールド（カラム）に相当します。


#### 主なディスクリプター・タイプ：

- <font color="green"><b>char</b></font> - 固定長文字列
- <font color="green"><b>short</b></font> - 2バイト整数
- <font color="green"><b>long</b></font> - 4バイト整数
- <font color="green"><b>binary</b></font> - バイナリデータ
- <font color="green"><b>vchar</b></font> - 可変長文字列


----

## ODM コマンド

### 1. 基本的なODMコマンド

| コマンド | 機能 |
|----------|------|
| [odmcreate](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmcreate-command) | オブジェクト・クラスの作成 |
| [odmadd](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmadd-command) | オブジェクトの追加 |
| [odmget](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmget-command) | オブジェクトの取得・表示 |
| [odmchange](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmchange-command) | オブジェクトの変更 |
| [odmdelete](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmdelete-command) | オブジェクトの削除 |
| [odmdrop](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmdrop-command) | オブジェクト・クラスの削除 |
| [odmshow](https://www.ibm.com/docs/ja/aix/7.3.0?topic=o-odmshow-command) | オブジェクト・クラスの構造表示 |

---

## 重要なODMオブジェクト・クラス

### 1. デバイス構成関連

以下はよく参照するオブジェクト・クラスの例です。

| クラス名 | 説明 |
|----------|------|
| **PdDv** | 事前定義デバイス（サポートされているすべてのデバイス） |
| **PdAt** | 事前定義属性（デバイス属性のデフォルト値） |
| **CuDv** | カスタマイズ・デバイス（実際に存在するデバイス） |
| **CuAt** | カスタマイズ属性（デフォルト以外の属性値） |
| **CuDvDr** | カスタマイズ・デバイス・ドライバー |
| **CuVPD** | カスタマイズ重要製品データ |


![aix_odm_structure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/41db03da-2fe3-4b10-ba28-9ae68e928847.png)



### 2. データベースの場所

環境変数 **ODMDIR** で定義しています。デフォルトは `/etc/objrepos` です。`/usr/lib/objrepos` などにも存在しています。

```
# env | grep ODMDIR
ODMDIR=/etc/objrepos
#
# echo $ODMDIR
/etc/objrepos
```


- **/etc/objrepos** - 書き込み可能なODMクラス（デフォルト)
- **/usr/lib/objrepos** - 読み取り専用ODMクラス（ほとんどが事前定義情報）

<br>

<details><summary>AIX 7.3 TL1 # ls -l /etc/objrepos 結果(折りたたんでいます)</summary>

```
# 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

```


</details>


<details><summary>AIX 7.3 TL1 # ls -l /usr/lib/objrepos 結果(折りたたんでいます)</summary>

```
# 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

```

</details>


### 使用例

主に参照系で使用することが多いです。

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 の操作を実施している例があります。


https://qiita.com/c_u/items/a603e32a521856245c5d

https://qiita.com/hiroyuki_onodera/items/26666d014f5eb13f1319

https://qiita.com/c_u/items/1dd78e765243aa14a846


---

## 注意事項と推奨事項

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を基盤として動作

<br>

`odmget`コマンドでの情報表示から始めて、徐々にODMの仕組みを理解していくことがお勧めです。


以上です。