Solaris
2008/10/7更新
対応バージョン: 10
FSS(Fair Share Scheduler)によってZone環境のリソース配分を行う手順を示す。
FSS有効化
まずシステムでFSSを有効にする。
現状確認
デフォルトではスケジューリングクラスは未設定である。
# dispadmin -d dispadmin: Default scheduling class is not set
FSS有効化
スケジューリングクラスをFSSに設定する。
# dispadmin -d FSS
確認
設定したスケジューリングクラスは/etc/dispadmin.confに書き込まれOS起動時にクラス設定が行われるので、ここでいったんシステムをリブートし、FSSが有効になっていることを確認する。
# dispadmin -d FSS (Fair Share)
Zoneにシェア設定
FSSが有効になったらZoneにシェアを設定する。
ここではNon-Global Zoneが1つ存在し、以下の割り当てを行うものとする。
Global Zone
1 (システム全体の3分の1)
Non-Global Zone(zone1)
2 (システム全体の3分の2)
Global Zoneにはデフォルトでシェア = 1が割り当てられるので、ここではNon-Global Zoneの設定を行う。
# zonecfg -z zone1 zonecfg:zone1> add rctl zonecfg:zone1:rctl> set name=zone.cpu-shares zonecfg:zone1:rctl> add value (priv=privileged,limit=2,action=none) zonecfg:zone1:rctl> end zonecfg:zone1> verify zonecfg:zone1> commit zonecfg:zone1> exit
(*) 設定値のうち意味を持つのはlimitのみなので、privとactionはそれぞれ固定で「privileged」「none」を指定する。
設定が終わったらZoneを再起動する。
# zoneadm -z zone1 reboot
シェア割当状況チェック
シェアの割当状況はprstatの-Zオプションにて確認できる。
Non-Global Zone(zone1)とGlobal Zone(global)それぞれでCPU負荷の高い処理を実行すると大体割当通りの2対1になっていることが分かる。
# prstat -Z : ZONEID NPROC SWAP RSS MEMORY TIME CPU ZONE 2 37 118M 171M 31% 0:01:24 62% zone1 0 106 321M 217M 39% 0:12:29 30% global
関連資料・記事
2008/10/2更新
対応バージョン: 10
動作中のZoneの設定を変更する手順を示す。
変更内容によってはZone内の設定ファイルを変更しなければならないものがある(IPアドレスなど)のでいったんZoneをアンインストールしてから再設定 & インストールを行ったほうがよい。
ここでは例としてZone名を「zone1」とし、ZoneのIPアドレスを変更するものとする。
Zone停止
# zoneadm -z zone1 halt
Zoneアンインストール
Zoneをアンインストールすると当然ながらZone内のファイルは削除されるので必要なファイルがあればあらかじめ退避しておく。
# zoneadm -z zone1 uninstall ゾーン zone1 を uninstall してよろしいですか (y/[n])? ← y
Zone設定変更
# zonecfg -z zone1 zonecfg:zone1> remove net address=192.168.0.100 ← 既存のIPアドレスを削除 zonecfg:zone1> add net zonecfg:zone1:net> set address=192.168.0.200 ← 新たなIPアドレスを追加 zonecfg:zone1:net> set physical=e1000g0 zonecfg:zone1:net> end zonecfg:zone1> verify zonecfg:zone1> commit zonecfg:zone1> exit
Zoneインストール
# zoneadm -z zone1 install
Zone起動
# zoneadm -z zone1 boot
関連資料・記事
2008/9/28更新
対応バージョン: 10
既存のGlobal Zone上にNon-Global Zoneを作成する手順を示す。
初期状態確認
まず初期状態のZone設定について確認する。
何も設定していない状態ではGlobal Zoneが一つ稼働しているのみである。
# zoneadm list -vc ID NAME STATUS PATH BRAND IP 0 global running / native shared
Non-Global Zone作成
次にこのGlobal Zone上にNon-Global Zone(以下、Zone)を作成する。
ここでは以下のZoneを作成する。Zone情報の定義にはzonecfgコマンドを使用する。
Zone名
zone1
# zonecfg -z zone1 zone1: そのような構成済みゾーンはありません 'create' を使用して、新しいゾーンの構成を開始してください。 zonecfg:zone1> create
Zoneのrootファイルシステムの場所
/export/zones/zone1
zonecfg:zone1> set zonepath=/export/zones/zone1
共有ファイルシステム(read only)
/export/common
(*) /lib, /platform, /sbin, /usrはデフォルトで定義済
zonecfg:zone1> add inherit-pkg-dir zonecfg:zone1:inherit-pkg-dir> set dir=/export/common zonecfg:zone1:inherit-pkg-dir> end
共有ファイルシステム(read-write)
/usr/local (Global Zoneの/usr/localにマウント)
ファイルシステムはlofs(loopback file system)としてマウントされる。
zonecfg:zone1> add fs zonecfg:zone1:fs> set dir=/usr/local zonecfg:zone1:fs> set special=/usr/local zonecfg:zone1:fs> set type=lofs zonecfg:zone1:fs> end
Global Zone起動時の自動起動
有効
zonecfg:zone1> set autoboot=true
IPアドレス
192.168.0.100 (デバイスはe1000g0)
zonecfg:zone1> add net zonecfg:zone1:net> set address=192.168.0.100 zonecfg:zone1:net> set physical=e1000g0 zonecfg:zone1:net> end
他にもいろいろな設定があるがここでは割愛する。
設定検証
エラーの場合はメッセージが出力される。
zonecfg:zone1> verify
設定書き込み
設定をstable storageに書き込む。
zonecfg:zone1> commit
設定終了
zonecfg:zone1> exit
設定の内容は以下の方法で確認できる。
# zonecfg -z zone1 info zonename: zone1 zonepath: /export/zones/zone1 brand: native autoboot: true bootargs: pool: limitpriv: scheduling-class: ip-type: shared inherit-pkg-dir: dir: /lib inherit-pkg-dir: dir: /platform inherit-pkg-dir: dir: /sbin inherit-pkg-dir: dir: /usr inherit-pkg-dir: dir: /export/common fs: dir: /usr/local special: /usr/local raw が指定されていません type: lofs options: [] net: address: 192.168.0.100 physical: e1000g0
この設定は/etc/zones/
# cat /etc/zones/zone1.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1"> <!-- DO NOT EDIT THIS FILE. Use zonecfg(1M) instead. --> <zone name="zone1" zonepath="/export/zones/zone1" autoboot="true"> <inherited-pkg-dir directory="/lib"/> <inherited-pkg-dir directory="/platform"/> <inherited-pkg-dir directory="/sbin"/> <inherited-pkg-dir directory="/usr"/> <inherited-pkg-dir directory="/export/common"/> <filesystem special="/usr/local" directory="/usr/local" type="lofs"/> <network address="192.168.0.100" physical="e1000g0"/> </zone>
ここまでで新たなZoneの定義が終わったのでZoneの一覧を見てみる。
# zoneadm list -vc ID NAME STATUS PATH BRAND IP 0 global running / native shared - zone1 configured /export/zones/zone1 native shared
ステータスが「configured」になっている。
ここでZoneのステータスについて説明する。
定義が終わった状態ではまだZoneは使用できず、installを行ってZoneに必要なファイルをインストールした後にbootを行ってZoneを起動する。以下にステータスの遷移図を記す。
---------- Configured ... Zone定義済 ---------- | ^ install| |uninstall v | --------- Installed ... Zone固有のrootファイルシステム作成済 --------- | ^ | ^ | | | | | | | +---------+ | | +---------+ | | | ready| |halt | | v | | | ----- boot| |halt Ready ... Zone有効化(ユーザプロセスは起動しない) | | ----- | | ^ | | | ready| |boot | | +---------+ | | | | +---------+ | | | | v | | v --------- Running ... Zone起動 ---------
Zoneインストール
Zoneの定義まで終わったのでインストールを行う。Zoneの制御にはzoneadmコマンドを使用する。
この処理はマシンの性能にもよるが数十分〜数時間かかる。
# zoneadm -z zone1 install Preparing to install zone <zone1>. Creating list of files to copy from the global zone. : Copying <7441> files to the zone. : Initializing zone product registry. Determining zone package initialization order. : Preparing to initialize <1189> packages on the zone. : Initialized <1189> packages on zone. Zone <zone1> is initialized. The file </export/zones/zone1/root/var/sadm/system/logs/install_log> contains a log of the zone installation.
インストールが終わるとZoneのステータスは「installed」に変わる。
# zoneadm list -vc ID NAME STATUS PATH BRAND IP 0 global running / native shared - zone1 installed /export/zones/zone1 native shared
Zone起動
インストール終、Zoneを起動する。
# zoneadm -z zone1 boot # zoneadm list -vc ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 zone1 running /export/zones/zone1 native shared
ステータスが「running」に変わり、IDが割り当てられる。
IPアドレスも有効になり、以下のようにIPエイリアスが設定される。
# ifconfig -a : e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 192.168.0.12 netmask ffffff00 broadcast 192.168.0.255 ether 0:c:29:3b:bf:b5 e1000g0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 zone zone1 inet 192.168.0.100 netmask ffffff00 broadcast 192.168.0.255
この状態からhaltにより「installed」状態に、readyにより「ready」状態に変えることができる。またrebootによりZoneが再起動し、新たなIDが割り当てられる。
Zoneをアンインストールするには「installed」状態にしてからuninstallを実行する。
Zoneログイン
Zoneが起動するとログイン可能になる。
Zoneにログインするにはzloginコマンドを使用する。
# zlogin -C zone1 [ゾーン 'zone1' コンソールに接続しました]
最初のログインでは通常のSolarisインストールと同じように各種設定メニューが表示されるので必要な設定を行う。
Select a Language 0. English 1. Japanese :
設定が終わるとZoneがリブートする。
: System identification is completed. rebooting system due to change(s) in /etc/default/init : (リブート) : SunOS Release 5.10 Version Generic_127128-11 64-bit Copyright 1983-2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Hostname: <Zoneのホスト名> XXXXX console login:
尚、zloginには上記の-Cオプションによるコンソールモードの他に対話型/非対話型の2つのモードがあるが、ここでは説明を割愛する。
Zoneから抜ける場合はloginプロンプトから「~^D」('~' + Ctrl-D)を入力する。
関連資料・記事
2007/8/16更新
対応バージョン: 8
zipコマンドを以下のオプション付で実行する。
-A
自己解凍形式で圧縮する
-m
アーカイブを作成したら元ファイルを削除
他にもいろいろなオプションがあるのでマニュアルを参照のこと。
% zip -A -m <圧縮後ファイル名> <元ファイル>
例) *.txtファイルを一つずつ全てzip圧縮する
ls *.txt | awk '{printf("zip -A -m %s.zip %s\n",$1,$1)}' | sh
2009/1/14更新
対応バージョン: 10 x86
ZFS領域をNFSでshareするにはsharenfsプロパティをonに設定すればよく、通常のNFS shareの設定である/etc/dfs/dfstabへの記述は必要ない。
この設定はマシンをリブートしても恒久的に有効になる。
# zfs list NAME USED AVAIL REFER MOUNTPOINT rz2 142K 62.8M 19.9K /rz2 rz2/foo 17.9K 62.8M 17.9K /rz2/foo # zfs set sharenfs=on rz2 # zfs get sharenfs rz2 NAME PROPERTY VALUE SOURCE rz2 sharenfs on local # share - /rz2/foo rw "" - /rz2 rw ""
オプションを指定したい場合はsharenfsプロパティに必要なオプションを設定する。
例) 任意のホストにroでshareする
# zfs set sharenfs=ro=host1 rz2 # zfs get sharenfs rz2 NAME PROPERTY VALUE SOURCE rz2 sharenfs ro=host1 local # share - /rz2/foo sec=sys,ro=host1 "" - /rz2 sec=sys,ro=host1 ""
オプションは通常のshareと同様にカンマで区切って複数指定できる。
share解除
shareを解除するにはsharenfsプロパティをoffに設定する。
# zfs set sharenfs=off rz2 # zfs get sharenfs rz2 NAME PROPERTY VALUE SOURCE rz2 sharenfs off local # share (何も出力されない)
2008/12/8更新
対応バージョン: 10
ZFSのスナップショットは自身と同じストレージプール内に保存されるが、send/receiveコマンドを使うことによって保存済のスナップショットを別のストレージプールや別のホストに送信することができる。
sendで書き出し、receiveで読み込みを行う。
スナップショット作成
# zfs snapshot rz2/foo@snapshot1 # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rz2/foo@snapshot1 0 - 35.4K -
スナップショットをファイルに保存し、そのファイルを別のストレージプールに送信する
# zfs send rz2/foo@snapshot1 > /var/tmp/foo.img # zfs receive bkup/foo < /var/tmp/foo.img # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT bkup/foo@snapshot1 0 - 35.5K - rz2/foo@snapshot1 33.4K - 35.4K -
保存先のbkup/fooが既に存在している場合は保存できない。
スナップショットを同一ホストの別ストレージプールに送信する
# zfs send rz2/foo@snapshot1 | zfs receive bkup/foo
スナップショットを別ホストのストレージプールに送信する
# zfs send rz2/foo@snapshot1 | ssh host2 zfs receive bkup/foo
スナップショット間の差分データを送信する
sendの-iオプションを使ってスナップショット間の差分データを取り扱うことができる。
# zfs snapshot rz2/foo@snapshot2 # zfs send -i rz2/foo@snapshot1 rz2/foo@snapshot2 | ssh host2 zfs receive bkup/foo
関連資料・記事
2008/12/5更新
対応バージョン: 10
ZFSのスナップショットを作成/ロールバック/破棄する手順を示す。
スナップショット作成
ここではrz2/fooストレージプールが/Users/fooにマウントされているものとし、1つファイルを作る度にスナップショットを取り、同じ操作を2回やってみる。
まず任意のファイルを作成する。
# dd if=/dev/random of=/Users/foo/file bs=1024 count=10 # digest -v -a md5 /Users/foo/file md5 (/Users/foo/file) = e3a8f135f20af45e062a3e8ff5e6267e
次にこのストレージプールのスナップショットを取る。
# zfs snapshot rz2/foo@one
先ほどと同様の手順で任意のファイルを作成する。
# dd if=/dev/random of=/Users/foo/file bs=1024 count=10 # digest -v -a md5 /Users/foo/file md5 (/Users/foo/file) = e17036a607b01e416d8fc35b19946f79
最初のファイルとはMD5値が違っている。
さらに2つ目のスナップショットを取る。
# zfs snapshot rz2/foo@two
三たび、任意のファイルを作成する。
# dd if=/dev/random of=/Users/foo/file bs=1024 count=10 # digest -v -a md5 /Users/foo/file md5 (/Users/foo/file) = 1802165c4a2585ec77ead86f50b6238f
今回もMD5値が違っている。
ここまででスナップショット2つ、各スナップショットに任意のファイルが存在する状態になっている。
スナップショットには各ファイルシステムの先頭から.zfs/snapshotでアクセスできるので2つのスナップショットの状態を見てみる。
# ls -l /Users/foo/.zfs/snapshot/{one,two}/file ... 10240 12月 5日 03:20 /Users/foo/.zfs/snapshot/one/file ... 10240 12月 5日 03:21 /Users/foo/.zfs/snapshot/two/file # digest -v -a md5 /Users/foo/.zfs/snapshot/{one,two}/file md5 (/Users/foo/.zfs/snapshot/one/file) = e3a8f135f20af45e062a3e8ff5e6267e md5 (/Users/foo/.zfs/snapshot/two/file) = e17036a607b01e416d8fc35b19946f79
このように各スナップショットにはそれぞれ独立したファイルが保存されているので必要なファイルを簡単に復元することができる。
# cp /Users/foo/.zfs/snapshot/one/file /Users/foo/file.old # digest -v -a md5 /Users/foo/file* md5 (/Users/foo/file) = 1802165c4a2585ec77ead86f50b6238f md5 (/Users/foo/file.old) = e3a8f135f20af45e062a3e8ff5e6267e
スナップショットロールバック
直近のスナップショットをロールバックするには以下のようにする。
# zfs rollback rz2/foo@two # digest -v -a md5 /Users/foo/file md5 (/Users/foo/file) = e17036a607b01e416d8fc35b19946f79
より古いスナップショットをロールバックするには-rオプションを付ける。
# zfs rollback -r rz2/foo@one # digest -v -a md5 /Users/foo/file md5 (/Users/foo/file) = e3a8f135f20af45e062a3e8ff5e6267e
スナップショット破棄
スナップショットの状態は以下のようにして参照できる。
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rz2/foo@one 0 - 35.4K - rz2/foo@two 0 - 35.4K -
スナップショットの破棄はdestroyサブコマンドを使用する。
# zfs destroy rz2/foo@one # zfs destroy rz2/foo@two # zfs list -t snapshot no datasets available
関連資料・記事
2008/8/21更新
対応バージョン: 10 x86
既存のストレージプールにホットスペアを設定する手順を示す。
ここでは各100MBの3ファイルで構成されているraidz2のストレージプールにスペアを追加する。
# zpool status rz2 pool: rz2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0 # mkfile 100m /zfs/spare-1 # zpool add rz2 spare /zfs/spare-1 # zpool status rz2 pool: rz2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0 spares /zfs/spare-1 AVAIL
スペアを削除する場合は以下のようにする。
# zpool remove rz2 /zfs/spare-1
スペアの手動切り替え
通常、現用デバイスに障害が発生すると自動的にスペアに切り替わるが、手動でこれを行うこともできる。
例えば/zfs/raidz-3をスペアに置き換える場合は以下のようにする。
# zpool replace rz2 /zfs/raidz-3 /zfs/spare-1 # zpool status rz2 pool: rz2 state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Sun Nov 30 05:51:05 2008 config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 spare ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0 /zfs/spare-1 ONLINE 0 0 0 spares /zfs/spare-1 INUSE currently in use
ここで/zfs/raidz-3を切り離す。
# zpool detach rz2 /zfs/raidz-3 # zpool status rz2 pool: rz2 state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Sun Nov 30 06:03:06 2008 config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 /zfs/spare-1 ONLINE 0 0 0
この状態で/zfs/raidz-3がメンテナンス可能である。
メンテナンスが終わったら/zfs/raidz-3をスペアの替わりにプールに戻す。
# zpool replace rz2 /zfs/spare-1 /zfs/raidz-3 # zpool status rz2 pool: rz2 state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Sun Nov 30 06:09:32 2008 config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 replacing ONLINE 0 0 0 /zfs/spare-1 ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0
上記のようにスペアからの置き換えが始まるのでしばらく待つと以下のようになる。
# zpool status rz2 pool: rz2 state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Sun Nov 30 06:09:32 2008 config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0
この状態になったらスペアを再度設定する。
# zpool add rz2 spare /zfs/spare-1 # zpool status rz2 pool: rz2 state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Sun Nov 30 06:09:32 2008 config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0 spares /zfs/spare-1 AVAIL
2008/8/21更新
対応バージョン: 10 x86
ZFSのストレージプールに未使用のディスクを追加する手順を示す。
ここでは現在のストレージプールが1つの物理ディスクで作成されているものとし、新たに1GBのUSBメモリを追加する。
USBメモリ使用準備
まずUSBメモリのデバイス名を調べる。
# rmformat Looking for devices... 1. Volmgt Node: /vol/dev/aliases/rmdisk0 Logical Node: /dev/rdsk/c2t0d0p0 Physical Node: /pci@0,0/pcie11,b8@1d,7/storage@1/disk@0,0 Connected Device: Sony Storage Media 0100 Device Type: Removable
関連資料・記事
次にこのデバイスをvoldの管理下から外す。手順は以下の資料を参照のこと。
関連資料・記事
ストレージプール拡張
現在のストレージプールの状態は以下のようになっている。
# zpool status foo pool: foo state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM foo ONLINE 0 0 0 c1d0s0 ONLINE 0 0 0
ここにUSBメモリを追加する。
# zpool add foo c2t0d0p0
これによりfooストレージプールのサイズは以下のように拡張される。
拡張前
# df -h /foo Filesystem size used avail capacity Mounted on foo 18G 24K 18G 1% /foo
拡張後
# df -h /foo Filesystem size used avail capacity Mounted on foo 19G 24K 19G 1% /foo
また、ストレージプールに新たなディスクが追加されているのが確認できる。
# zpool status foo pool: foo state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM foo ONLINE 0 0 0 c1d0s0 ONLINE 0 0 0 c2t0d0p0 ONLINE 0 0 0
2008/8/21更新
対応バージョン: 10 x86
ZFSストレージプールはRAID-Z、ミラーのほか、単一のデバイスでも構成することができる。
以下、RAID-Zを中心にそれぞれの方式についてストレージプールの作成手順を示す。
プールに含めるデバイスは通常物理デバイス(例:c0t0d0)を使用するが、試験用に通常のファイルを使用することもできる。
ここでは全て通常のファイルを使用することとする。
RAID-Z
RAID-Zはシングルパリティのraidz1、ダブルパリティのraidz2のいずれかが指定できる。
両方とも手順は同じなのでraidz2について説明する。
準備
まずプールを構成するファイルを作成する。
# mkdir /zfs # mkfile 1g /zfs/raidz-1 # mkfile 1g /zfs/raidz-2 # mkfile 1g /zfs/raidz-3
ストレージプール作成
次にストレージプールを作成する。
# zpool create rz2 raidz2 /zfs/raidz-1 /zfs/raidz-2 /zfs/raidz-3
ストレージプールの状態は以下の方法で確認できる。
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT rz2 2.98G 267K 2.98G 0% ONLINE - # zpool status rz2 pool: rz2 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rz2 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 /zfs/raidz-1 ONLINE 0 0 0 /zfs/raidz-2 ONLINE 0 0 0 /zfs/raidz-3 ONLINE 0 0 0
これでストレージプールが/rz2にマウントされファイルシステムとして使用可能になる。
# df -h /rz2 Filesystem size used avail capacity Mounted on rz2 983M 24K 983M 1% /rz2
アンマウントする時は以下のようにする。
# zfs unmount rz2
別プール作成
作成したプールから別のプールを切り出すには以下のようにする。
# zfs create rz2/p1 # df -h -F zfs Filesystem size used avail capacity Mounted on rz2 983M 25K 983M 1% /rz2 rz2/p1 983M 24K 983M 1% /rz2/p1
こうすることで同じストレージプール内に独立したファイルシステムを生成することができる。
マウントポイント変更
マウントポイントをデフォルト以外の場所にしたい場合は以下のようにする。
# mkdir /var/p1 # zfs set mountpoint=/var/p1 rz2/p1 # df -h -F zfs Filesystem size used avail capacity Mounted on rz2 983M 24K 983M 1% /rz2 rz2/p1 983M 24K 983M 1% /var/p1
ストレージプール削除
ストレージプールを削除するには以下のようにする。
# zpool destroy rz2
マウントは自動的に解除されストレージプールが削除される。使用しなくなったファイルは別のプールに割り当てたり他のファイルシステムとして使用したりできる。
なおマウントポイントは自動では削除されないので適宜削除する。
ミラー
ミラーは2つ以上のデバイスの複製を作る構成である。サイズの違うファイルを使用することもできるが、その場合は一番小さいファイルのサイズに揃えられる。
# mkfile 1g /zfs/mirror-1 # mkfile 1g /zfs/mirror-2 # zpool create mi mirror /zfs/mirror-1 /zfs/mirror-2 # zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT mi 1016M 88K 1016M 0% ONLINE - # zpool status mi pool: mi state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM mi ONLINE 0 0 0 mirror ONLINE 0 0 0 /zfs/mirror-1 ONLINE 0 0 0 /zfs/mirror-2 ONLINE 0 0 0 # df -h /mi Filesystem size used avail capacity Mounted on mi 984M 24K 984M 1% /mi
単一デバイス
単一デバイスでストレージプールを作る場合、物理デバイスにまたがる冗長性は持てないがZFSの持つ様々な特徴は生かすことができる。
# mkfile 1g /zfs/gen # zpool create gen /zfs/gen # zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT gen 1016M 88K 1016M 0% ONLINE - # zpool status gen pool: gen state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM gen ONLINE 0 0 0 /zfs/gen ONLINE 0 0 0 # df -h /gen Filesystem size used avail capacity Mounted on gen 984M 24K 984M 1% /gen
2007/8/15更新
対応バージョン: 10
Solarisシステムが正常に稼働しているかどうかを判断するには日常的な監視が欠かせない。
ここではSolarisシステムを監視するのに必要なコマンドとその結果を分析するポイントについてまとめる。
後半ではシステム性能が悪化した場合の問題点の特定から改善までの流れについて事例を交えて紹介する。
システムの稼働状況を確認するためのコマンド
システム全体の稼働状況やシステムの性能悪化の原因を調査するためにはsarやvmstatコマンドを使用する。
その後psやprstatコマンドを使用し性能を悪化させているプロセスの特定を行う。
問題となっているプロセスが特定できればプロセスの見直し(優先度の変更や実行スケジュールの変更、ユーザプログラムの改善など)を行う。
特に原因となるプロセスが特定できない場合、プロセスの見直しが不可能である場合、性能の悪化が慢性的な場合などはハードウェアの増強を検討する必要がある。
以下はシステム稼働状況の解析に使用する主なコマンドである。
sar
システム全体の稼働状況を確認する
vmstat
システム全体の稼働状況を確認する
mpstat
CPU使用稼働状況を確認する
iostat
ハードディスク、CPUの使用状況を確認する
ps
プロセス情報を確認する
prstat
プロセス情報を確認する
priocntl
プロセスの優先度を変更する
prtconf
システム構成情報を確認する
swap
仮想記憶領域を確認する
sysdef
カーネルパラメータを確認する
各コマンドの使用方法
sar、vmstat、mpstat、iostatコマンドについてはコマンド実行時に「計測間隔」と「計測回数」を指定する。
「計測間隔」の指定についてはコマンド実行によるシステムへの影響を含ませないように、最低でも5秒以上を指定するのが望ましいとされている。
また「計測回数」の指定について以下の実行例では1回のみのデータを採取しているが実際にデータを採取する際は5回(一度に多くの資源が使用される場合)から20回程度(徐々に資源が使用される場合)のデータを採取するとよい。
以下に各コマンドの使用例と、出力結果を分析するためのポイントを紹介する。
sarコマンド
sarコマンドにはいくつかのオプションがあり、そのオプションを指定することによってシステムの稼働状況に関するさまざまな情報が確認できる。
以下のオプションが全てではないが、特に頻繁に使用されるオプションとその出力結果からシステムの稼働状況の問題であるか否か、またパフォーマンス低下の原因は何であるかを判断するための基準値について解説する。
-uオプション
CPUの使用率を確認する。
<実行例>% sar -u 5 1 11:34:24 %usr %sys %wio %idle 11:34:29 95 5 0 0<表示結果>
%usr
ユーザ空間(プロセスの実行に費やされた時間)で使用されたCPUの時間の割合(vmstatのus、mpstatのusrと同等)
%sys
カーネル空間(システムコールなどの処理時間)で使用されたCPUの時間の割合(vmstatのsy、mpstatのsysと同等)
%wio
I/O処理によってCPU処理が待ち状態にあった時間の割合(mpstatのwtと同等)
%idle
CPUが待ち状態にあった時間の割合(vmstatのid、mpstatのidlと同等)
<監視ポイント>%usr + %sys > 90、かつ%usr < %sysの状態が継続する場合
メモリ不足がシステム性能を悪化させている可能性がある。あるいはプロセスがシステムコールを多発してCPUに負荷がかかりシステム性能を悪化させている可能性がある。
%usr + %sys > 90、かつ%usr > %sysの状態が継続する場合
ユーザプロセスの異常動作によってCPUに負荷がかかりシステム性能を悪化させている可能性がある。
%wio > 10の状態が継続する場合
ハードディスクなどのI/O装置の性能が不足しているためI/O処理がシステム性能を悪化させている可能性がある。
-qオプション
プロセスキューの状況を確認する。
<実行例>% sar -q 5 1 11:31:53 runq-sz %runocc swpq-sz %swpocc 11:31:58 4.0 30 0.0 0<表示結果>
runq-sz
実行可能だが実行待ちのプロセス数(vmstatのrと同等)
%runocc
実行キューが占有されていた時間の割合
swpq-sz
実行可能だがスワップアウトされたプロセス数
%swpocc
スワップ待ち行列が占有されている時間の割合
<監視ポイント>runq-sz / CPU数 > 2、かつ %runocc > 90 あるいは runq-sz > 10 の状態が継続する場合
CPU処理の負荷のため複数のプロセスがCPU待ちになっている可能性がある。
%runocc > 90、かつ runq-sz < 1 の状態が継続する場合
1つのプロセスがCPUを占有しCPU使用率が高くなっている可能性がある。
swpq-sz > 0 の状態が継続する場合
メモリ不足がシステム性能を悪化させている可能性がある。
-cオプション
システムコールの発行状況を確認する。
<実行例>% sar -c 5 1 11:39:57 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s 11:40:02 1028 203 52 0.00 0.00 9613 8033<表示結果>
scall/s
システムコールの総数/秒
sread/s
readシステムコールの発行回数/秒
swrit/s
writeシステムコールの発行回数/秒
fork/s
fork(fork1、vfork含む)システムコールの発行回数/秒
exec/s
execシステムコールの発行回数/秒
rchar/s
readシステムコールが転送した文字数(バイト数)/秒
wchar/s
writeシステムコールが転送した文字数(バイト数)/秒
<監視ポイント>exec/s / fork/s > 3 以上の状態が続く場合
PATH環境変数に設定されているパスの順番がふさわしくない可能性がある。
rchar/s / sread/s < 8KB以上の状態が続く場合、あるいはwchar/s / swrit/s < 8KB以上の状態が続く場合
大きいサイズのファイルを小さい単位でアクセスするアプリケーションが動作している可能性がある。
-pオプション
ページイン動作状況を確認する。
<実行例>% sar -p 5 1 11:39:57 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s 11:40:02 0.00 4.50 4.50 2.00 6.00 0.00<表示結果>
pgin/s
ページイン要求の平均数/秒
ppgin/s
ページインされた平均ページ数/秒
vflt/s
アドレス変換ページフォルト数/秒
<監視ポイント>vflt/s > 50(*)、かつsar -gコマンドのpgfree/s > 5の状態が続く場合
メモリ不足のため空きページを見つけるのに時間がかかっている。
(*) vflt/sが大きな値になる理由は以下の場合があるが、この場合はメモリ不足ではない。
ファイルシステムの内容が実メモリ上にキャッシュされ、ファイルシステムからのreadが多い場合(vflt/sと同時にpgin/s、ppgin/sの値も大きくなる)
プロセスの新規生成処理数が多い場合(vflt/sと同時にsar -cコマンドのfork/s、exec/sの値も大きくなる)
-gオプション
ページアウト、メモリ解放動作状況を確認する。
<実行例>% sar -g 5 1 11:46:43 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf 11:46:48 0.00 0.00 0.00 0.00 0.00<表示結果>
pgfree/s
ページデーモンによって空きメモリ(sar -rのfreemem)に追加されたページ数
pgscan/s
ページデーモンによって走査されたn秒(*)あたりのページ数(vmstatのsrと同等)
%ufs_ipf
メモリの空きページからi-nodeを獲得した割合
(*) コマンド実行時に指定する計測間隔。
<監視ポイント>pgscan/s > 0 の状態が継続していると確認された場合
メモリが不足している可能性がある。
-rオプション
空きメモリ状況を確認する。
<実行例>% sar -r 5 1 11:46:43 freemem freeswap 11:46:48 588 830668<表示結果>
freemem
バーチャルメモリの空きページ数(単位:ページサイズ(*))
freeswap
ページスワップに使用可能なディスクブロック数(単位:512バイト/ブロック)
(*) ページサイズはカーネルアーキテクチャによって異なる。ページサイズはpagesizeコマンドにより確認することができる。
<監視ポイント>freememの値がlotsfree(*)の値を下回った場合
pageoutデーモンが起動されページアウトが開始される。
(*) lotsfreeはページング処理を開始するためのトリガーである(単位はページサイズ)。ページ数がlotsfreeのしきい値を下回るとpageoutデーモンがメモリスキャンを開始する。lotsfreeの値はmdbコマンドで確認できる。
# mdb -k > lotsfree/E lotsfree: lotsfree: 234 > $q
-dオプション
ディスク使用状況を確認する。
<実行例>% sar -d 5 1 11:46:48 device %busy avque r+w/s blks/s avwait avserv 11:46:53 nfs1 0 0.0 0 0 0.0 0.0 sd0 0 0.0 0 0 0.0 0.0 sd0,a 0 0.0 0 0 0.0 0.0 sd0,b 0 0.0 0 0 0.0 0.0 sd0,c 0 0.0 0 0 0.0 0.0 sd3 0 0.0 0 0 0.0 0.0<表示結果>
%busy
ディスクビジー率(転送要求サービスに費やした時間の割合) (iostatの%bと同等)
avque
実行を待っている要求の平均数
blks/s
デバイスに転送されたブロック数(単位:512バイト/ブロック)
avwait
転送要求がキュー上で待っていた平均時間/ミリ秒
avserv
転送要求がデバイスからサービスを受けた平均時間/ミリ秒
<監視ポイント>%busy > 60の状態が続く場合
ハードディスクなどのI/O装置の性能が不足しているためI/O処理でシステム性能が悪化している可能性がある。
同一コントローラ下のディスクのblks/sの合計 = コントローラ1秒あたりの転送量の3/4〜4/5に近い値が続く場合
ディスクコントローラの実行転送能力が低下している可能性がある。
RAIDを使用している場合%busyの値が高くてもハードディスクなどのI/O装置の性能が不十分であると特定ができないので、以下の項目についても確認する必要がある。複数の項目が該当する場合はディスクが問題となっている可能性がある。
avque > 1
avwait > avserv
avwait + avserv > 30
-bオプション
システムバッファの使用状況を確認する。
<実行例>% sar -b 5 1 19:10:28 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s 19:10:33 1 24 97 10 25 59 0 0<表示結果>
%rcache
システムバッファから読み込むことができた読み出し動作の割合(キャッシュヒット率)
%wcache
システムバッファへ書き込むことができた書き込み動作の割合(キャッシュヒット率)
<監視ポイント>%rcache < 90、かつ%wcache < 65の状態が続く場合
システムバッファが不足している可能性がある。
-vオプション
システムテーブルの使用状況を確認する。
<実行例>% sar -v 5 1 19:18:58 proc-sz ov inod-sz ov file-sz ov lock-sz 19:19:03 83/1882 0 5734/8316 0 601/601 0 0/0<表示結果>
proc-sz
プロセステーブルの使用数/割当数
ov
プロセステーブルのオーバーフロー発生回数
inod-sz
UFSファイルシステム用のi-nodeテーブルの使用数/割当数
ov
UFSファイルシステム用のi-nodeテーブルのオーバーフロー発生回数
file-sz
ファイルテーブルの使用数/割当数
ov
ファイルテーブルのオーバーフロー発生回数
lock-sz
カーネルで使用されている共用メモリレコードテーブルの使用数/割当数
<監視ポイント>各ov > 1の状態が続く場合
各テーブルのオーバーフローが発生している。
-aオプション
ファイルアクセスシステムルーチンの使用状況を確認する。
<実行例>% sar -a 5 1 19:18:58 iget/s namei/s dirbk/s 19:19:03 0 0 0<表示結果>
iget/s
i-node獲得ルーチンを呼び出した回数/秒
namei/s
ファイルシステムパス検索回数/秒
dirbk/s
UFSディレクトリブロック読み込み回数/秒
<監視ポイント>iget/s / namei/sの値が増加傾向にある状態が続く場合
ファイルアクセス時の負荷が高い可能性がある。
namei/s > 50、かつDNLCのヒット率(*) < 90の状態が続く場合
大量のi-nodeの獲得が行われている。
(*) DNLC(Directory Name Lookup Cache:ディレクトリ名検索キャッシュ)のヒット率の確認はvmstat -sコマンドで行う。
% vmstat -s : 20273707 total name lookups (cache hits 93%)
vmstatコマンド
vmstatコマンドはsarコマンドと同様にシステムのパフォーマンス状況を確認する。
Solaris以外にも広く実装されているコマンドである。
<実行例>% vmstat 5 1 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr dd f0 s0 -- in sy cs us sy id 0 0 0 472400 6536 5 23 38 10 12 0 4 4 0 0 0 363 751 238 5 2 93<表示結果>
procs : r
実行待ちのプロセス数(sar -qのrunq-szと同等)
page : sr
ページデーモンによって走査されたn秒(*)あたりのページ数(sar -gのpgscan/sと同等)
(*) コマンド実行時に指定する計測間隔。
cpu : us
ユーザ空間(プロセスの実行に費やされた時間)で使用されたCPUの時間の割合(sar -uの%usr、mpstatのusrと同等)
cpu : sy
カーネル空間(システムコールなどの処理時間)で使用されたCPUの時間の割合(sar -uの%sys、mpstatのsysと同等)
cpu : id
待ち状態にあるCPUの時間の割合(sar -uの%idle、mpstatの%idleと同等)
<監視ポイント>us + sy > 90、かつus < syの状態が継続する場合
メモリ不足がシステム性能を悪化させている可能性がある。
プロセスがシステムコールを多発してCPUに負荷がかかり、システム性能を悪化させている可能性がある。
us + sy > 90、かつus > syの状態が継続する場合
ユーザプロセスの異常動作によってCPUに負荷がかかり、システム性能を悪化させている可能性がある。
r / CPU数 > 2の状態が継続する場合
CPUが原因でシステム性能が悪化している可能性がある。
sr > 0の状態が 継続する場合
メモリ不足が問題でシステム性能が悪化している可能性がある。
mpstatコマンド
マルチプロセッサシステムの場合sarコマンドを使用すると全てのCPUの平均値が表示されるので、各CPUの使用状況を確認する場合にはmpstatを使用する。
シングルプロセッサシステムでは一つのプロセッサに関する情報を表示する。
<実行例>% mpstat 5 1 CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 1 132 3 387 232 186 425 57 33 15 0 500 16 13 9 63 3 133 2 448 772 547 392 52 33 15 0 504 16 12 9 63<表示結果>
CPU
プロセッサID
smtx
mutex(相互排他ロック)の取得に失敗した回数/秒
usr
ユーザ空間(プロセスの実行に費やされた時間)で使用されたCPUの時間の割合(sar -uの%usr、vmstatのvsと同等)
sys
カーネル空間(システムコールなどの処理時間)で使用されたCPUの時間の割合(sar -uの%sys、vmstatのsyと同等)
wt
I/O処理によってCPU処理が待ち状態にあった時間の割合(sar -uの%wioと同等)
idl
待ち状態にあるCPUの時間の割合(sar -uの%idle、vmstatのidと同等)
<監視ポイント>usr + sys > 90、かつ usr < sysの状態が継続する場合
メモリ不足がシステム性能を悪化させている可能性がある。
プロセスがシステムコールを多発してCPUに負荷がかかり、システム性能を悪化させている可能性がある。
usr + sys > 90、かつ usr > sysの状態が継続する場合
ユーザプロセスの異常動作によってCPUに負荷がかかり、システム性能を悪化させている可能性がある。
wt > 10の状態が継続する場合
ハードディスクなどのI/O装置の性能が不足しているためI/O処理がシステム性能を悪化させている可能性がある。
smtx > 500、かつsys > 20の状態が継続する場合
システムコールの発行回数が多くmutex(相互排他ロック)の衝突がカーネルで発生しているためCPUが浪費されている可能性がある。
iostatコマンド
ディスクの使用状態を確認する。
<実行例>% iostat -xtc 5 1 extended device statistics tty cpu device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id dad0 2.4 1.2 28.7 19.1 0.2 0.0 54.3 0 2 0 10 5 2 2 92 fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0<表示結果>
r/s
1秒あたりの読み込み回数
w/s
1秒あたりの書き込み回数
%w
サービス待ちの処理が存在していた時間の割合
%b
ディスクビジー率(転送要求サービスに費した時間の割合) (sar -dの%busyと同等)
<監視ポイント>%w > 5の状態が続く場合
SCSIバス負荷が高い可能性がある。
%b > 60の状態が続く場合
ハードディスクなどのI/O装置の性能が不足しているためI/O処理でシステム性能が悪化している可能性がある。
システムの稼働効率に影響を与えるカーネルパラメータについて
カーネルパラメータとは
カーネルパラメータはOSが動作をするにあたってカーネルが実メモリの実装などにより自動的に割り当てられる値を使用する環境(アプリケーションの起動等)にあわせて明示的に変更をさせることができる項目である。
中でもsarコマンドの結果から設定の見直しが必要だと確認できるカーネルパラメータについて紹介する。
カーネルパラメータの変更は容易に行うことができるが設定値の見積もりが正しく行われない場合は逆にシステムの性能の悪化を招く恐れがあるので十分注意した上で行うこと。
主なカーネルパラメータ
bufhwm ... システムバッファのサイズを調整する
sar -bコマンドで「%rcache < 90」かつ「%wcache < 65」の状態が継続して続くような場合はシステムバッファが不足している可能性がある。
この場合bufhwmパラメータの値を大きくし、システムの再起動をすることで性能が改善される可能性がある。
bufhwmのデフォルト値は物理メモリの2%で最大値は物理メモリの20%である。
ufs_ninode ... UFSファイルシステムのi-nodeキャッシュサイズを調整する
sar -gコマンドで「%ufs_ipf > 0」の状態が継続して続くような場合はカーネル上で管理できるinode数が足りなくなりディスクから毎回inodeを読み込む必要があることを示している。
この場合ufs_ninodeパラメータの値を大きくし、システムの再起動をすることで性能が改善される可能性がある。
ufs_ninodeのデフォルト値は「4 x (v.v_proc(*1) + maxusers(*2)) + 320」で、最大値は4G(1,024 x 1,024 x 1,024 x 4 - 1 = 4,294,967,295bytes)である。
(*1) v.v_procの値はsysdefコマンドで確認する。
# sysdef |grep v.v_proc 30000 maximum number of processes (v.v_proc)
(*2) maxusersの値の確認方法は後述する。
ncsize ... ディレクトリ読みとり用キャッシュサイズを調整する
sar -aコマンドの「namei/s > 50」かつ、vmstat -sコマンドの「DNLCヒット率 < 90」の状態が続く場合はディレクトリ名ルックアップキャッシュ(DNLC)が不足しており大量のinodeを読み込む必要があることを示している。
この場合ncsizeパラメータを大きくしシステムの再起動をすることで性能が改善される可能性がある。
ncsizeのデフォルト値は「4 x (v.v_proc + maxusers) + 320」で、最大値は4G(4,294,967,295bytes)である。
max_nprocs ... ユーザが起動できるプロセスの最大数を調整する
sar -vコマンドの「proc-sz」の項目で、システムで起動できるプロセス数と現在起動しているプロセス数を確認することができる。
起動しているプロセス数が上限に達してしまい終了できるプロセスも存在しない場合などは起動できるプロセス数の上限を増やす必要がある。
max_nprocsのデフォルト値は「10 + (16 x maxusers)」で、最大値は30000である。
尚、pidmaxパラメータを指定することにより最大値を999999まで上げることができる。
カーネルパラメータ変更方法
カーネルパラメータを変更する場合/etc/systemファイルに以下の記法で各パラメータを記述しシステムのリブートを行う。
set パラメータ = 値
デフォルト値のままの場合は/etc/systemファイルには記述されていない。
設定値の確認方法
設定値はsysdefコマンドにより確認する。
例)
# sysdef | grep bufhwm 146284544 maximum memory allowed in buffer cache (bufhwm)
その他のパラメータはmdbコマンドで確認する。
例)
# mdb -k > ufs_ninode/D ufs_ninode: ufs_ninode: 128512 > ncsize/D ncsize: ncsize: 128512 > max_nprocs/D max_nprocs: max_nprocs: 30000 > maxusers/D maxusers: maxusers: 2048 > $q
システムで発生した性能問題の調査から解決までの流れ
ここまではシステムの稼働状況を確認するためのコマンドやカーネルパラメータについて見てきたが、ここからはこれらコマンドを使用してシステムで発生した性能問題をどのように調査し解決していくのかについて説明する。
システムのスループットの低下やレスポンスの低下が一時的な現象であったり、トラブル原因への対策がカーネルパラメータの変更やプログラム実行スケジュールの変更などで改善できるのであればハードウェアの増強は必ずしも必要ない。
しかし、メモリの追加やCPUの増強といったハードウェアの性能向上が必要な場合もある。
その際システムの稼働効率を効果的に改善するためにはどのコンポーネント(パーツ)の増強が適切かという判断が重要である。
ここではシステムで発生した性能問題の調査から解決までのおおよその流れを説明する。
まずsarコマンドを使用してシステムの負荷状況を確認する。
# sar -u 1 5 02:35:52 %usr %sys %wio %idle 02:35:53 49 5 0 47 02:35:54 47 2 0 51 02:35:55 50 1 0 50 02:35:56 48 1 0 51 02:35:57 49 2 0 50 Average 49 2 0 49
CPU性能が不十分な場合
プロセスには実行状態、実行可能状態、待ち状態の3つの状態がある。
待ち状態は入出力の要求が行われ動作が完了すると実行可能状態となり、CPUの割り当てを待つ。
そしてCPU割り当てが行われると実行状態となりCPUを使用してプロセスが動作する。
このようにCPUはプロセスを動作する上で大変重要な役割を果たす。
1台のマシンでいくつものプロセスを実行した際、処理が遅いと感じることがある。
その原因としてCPUの搭載量と比べて実行プロセスの数が多すぎたり、1つのプロセスがCPUを占有して他のプロセスの実行を妨げたりしていることなどが考えられる。
sar -uの結果、「%usr + %sys > 90%」かつ「%usr > %sys」の場合はCPUの使用率が高くユーザプロセスが原因の可能性がある。 ユーザプロセスを確認するためにsar -qコマンドで原因を調査する。
# sar -q 1 5 02:34:43 runq-sz %runocc swpq-sz %swpocc 02:34:44 0.0 0 0.0 0 02:34:45 0.0 0 0.0 0 02:34:46 0.0 0 0.0 0 02:34:47 0.0 0 0.0 0 02:34:48 0.0 0 0.0 0 Average 0.0 0 0.0 0
「%runocc > 90」かつ「runq-sz / CPU数 > 2」、あるいは「runq-sz > 10」の場合は複数のプロセスが原因でCPU異常を起こしている可能性がある。
逆に「%runocc > 90」かつ「runq-sz < 1」の場合は1つのプロセスが原因でCPU異常を起こしている可能性がある。
双方ともpsコマンドにより問題となっているプロセスを特定する必要があるが、後者の場合は他のプロセスへの影響がなければそのままの状態でも問題ない。また、前者の場合はpriocntlコマンド(*)を使用してバッチ処理の優先度を変更するなどの検討を行う必要があるが、これらの対処を行っても改善が見られない場合は他の改善策としてCPUの増設を検討する。
「%usr + %sys > 90%」かつ「%usr < %sys」の場合はCPU負荷、もしくはメモリ不足の可能性がある。
vmstatコマンドでI/Oの割り込み頻度を調べる。
# vmstat 1 5 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr m0 m1 m1 m1 in sy cs us sy id 0 0 0 270096 75248 9 35 0 0 0 0 0 0 0 0 0 130 216 119 1 1 98 0 0 0 218880 41216 0 6 0 0 0 0 0 0 0 0 0 128 37 112 0 0 99 0 0 0 218880 41216 0 0 0 0 0 0 0 0 0 0 0 131 392 115 0 0 99 0 0 0 218880 41216 0 0 0 0 0 0 0 0 0 0 0 130 354 125 0 3 97 0 0 0 218880 41216 0 0 0 0 0 0 0 0 0 0 0 124 32 120 0 0 99
「in > 200」の場合はハードウェアの問題が発生している可能性があるためI/Oコネクタの接続状態を確認する。
「in < 200」の場合はシステムコールの発行回数が多発している可能性があるため更にsar -cコマンドでシステムコールの発行回数を確認する。
# sar -c 1 5 02:53:20 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s 02:53:21 291 27 29 0.00 0.00 6201 6331 02:53:22 633 25 26 0.00 0.00 6130 6241 02:53:23 259 25 26 0.00 0.00 6069 6179 02:53:24 264 25 26 0.00 0.00 6130 6241 02:53:25 262 25 26 0.00 0.00 6130 6241 Average 342 25 26 0.00 0.00 6132 6247
また、メモリ不足が原因でpageoutデーモンのカーネル空間での頻繁な動作が起こりCPU使用率を上げてしまう可能性があるため、sar -gコマンドでメモリ不足になっていないか確認する必要もある。
# sar -g 1 5 02:54:57 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf 02:54:58 0.00 0.00 0.00 0.00 0.00 02:54:59 0.00 0.00 0.00 0.00 0.00 02:55:00 0.00 0.00 0.00 0.00 0.00 02:55:01 0.00 0.00 0.00 0.00 0.00 02:55:02 0.00 0.00 0.00 0.00 0.00 Average 0.00 0.00 0.00 0.00 0.00
これらの確認に加え、発生したシステム異常が一時的なものであるか慢性的なものであるかについても確認する必要がある。
一時的なものであればそのままシステムの監視を続けるが、慢性的なものであればユーザプロセスの確認や実行プロセス数に合わせたCPUの追加を検討する必要がある。
一般的にはsar -qコマンドのrunq-szをCPU数で割った結果が2以下になるようにCPUを追加すればよいと言われている。
(*) priocntlコマンドは指定したプロセスのスケジューリングを行う。プロセスがどのようなスケジューリングをされて動作しているかはps -elcコマンドのCLS(クラス)とPRI(優先順位)の項目を確認する。
以下の場合はsampleプロセスはIA(インタラクティブクラス)、優先度20で動作している。
# ps -elc | grep sample F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD 8 S 1679 20859 26567 IA 20 ? 3310 ? ?? 4958:05 sample
これをIAよりも優先度の低いTS(タイムシェアリングクラス)に変更する方法は以下になる。
# priocntl -s -c TS -i pid 20859
メモリ容量が不十分な場合
プロセスのメモリ要求が使用できる物理メモリ量を超えるとシステムはメモリ不足の状態に陥りpageoutデーモンの動作が始まる。
pageoutデーモンの動作が始まるのはsar -rコマンドのfreememがlotsfree(*)値を下回った時である。
# sar -r 1 5 03:01:39 freemem freeswap 03:01:40 754845 26433952 03:01:41 747353 26172230 03:01:42 754803 26433952 03:01:43 754779 26433952 03:01:44 754761 26433952 Average 753296 26381188
lotsfree値を下回るとpageoutデーモンは物理メモリをスキャンして最近使用されていないページを探し出し、そのページをスワップデバイスにページアウトさせて物理メモリを解放する(ページング)。
pageoutデーモンによって行われるスキャンの速度は利用可能なページ量の減少に従い頻繁に動作するようになる。
そのためCPU使用率が上昇しシステム性能は著しく低下する。このスキャン状態はsar -gで確認する。
# sar -g 1 5 03:02:37 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf 03:02:38 0.00 0.00 0.00 0.00 0.00 03:02:39 0.00 0.00 0.00 0.00 0.00 03:02:40 0.00 0.00 0.00 0.00 0.00 03:02:41 0.00 0.00 0.00 0.00 0.00 03:02:42 0.00 0.00 0.00 0.00 0.00 Average 0.00 0.00 0.00 0.00 0.00
「pgscan/s > 0」の場合はシステムがメモリ不足であると判断することができる。
また、システムの仮想メモリが足りなければプロセスの生成ができなくなるほか、アプリケーションがメモリを確保することができないために異常動作(異常終了)を起こす可能性がある。
psコマンドを定期的に実行し、多くのメモリを使用しているプロセスが存在していないか、またはswapファイルと他のファイルとのI/O競合が発生していないかなどを確認する。
仮想メモリの使用量についてはswap -sコマンド、sar -rコマンドで確認ができる。
# swap -s total: 30200k bytes allocated + 17856k reserved = 48056k used, 13216920k available # sar -r 1 5 03:04:34 freemem freeswap 03:04:35 754857 26433152 03:04:36 754857 26433152 03:04:37 754857 26433152 03:04:38 754857 26433152 03:04:39 747383 26171438 Average 753350 26380390
swap -sコマンドについてはavailableの項目が、sar -rについてはfreeswapの項目が仮想メモリの空き容量になる。
仮想メモリが足りない場合はswapデバイスを追加して容量を増やすことになるが、実際に増やさなければならない容量は実行プロセス数やプログラミングの方法などに依存するため、日々の運用の中で決定する必要がある。
swapデバイスの追加についてはパーティションを切り直すほかにswap -aコマンドで他の空いているデバイスをswapデバイスとして追加することができる。
(*) lotsfreeはページング処理を開始するためのトリガーである。ページ数がlotsfreeのしきい値を下回るとpageoutデーモンがメモリスキャンを開始する。lotsfreeの値はmdbコマンドで確認できる。
# mdb -k > lotsfree/E lotsfree: lotsfree: 13775 > $q
ディスク装置の性能が不十分な場合
ディスクはCPUやメモリに比べるとアクセス性能が遅いため、レスポンスの悪化を起こしやすい資源である。
# sar -u 1 5 02:35:52 %usr %sys %wio %idle 02:35:53 49 5 0 47 02:35:54 47 2 0 51 02:35:55 50 1 0 50 02:35:56 48 1 0 51 02:35:57 49 2 0 50 Average 49 2 0 49
sar -uコマンドの結果、「%wio > 10」の場合はハードディスクなどのI/O装置の性能が不足している可能性がある。
ディスク資源にはディスク装置、ディスク資源をコントロールするコントローラと2つの要素がある。
通常1つのディスクコントローラの下には複数のディスク装置やその他の入出力装置が接続されている。
接続される装置の台数が多くなると個々の装置の負荷はそれほど高くなくてもディスクコントローラのデータ転送が悪化する場合がある。
ディスク資源に問題がある場合、複数のプロセスによる同一ディスクの競合が原因となっている可能性がある。
ディスクの性能に悪影響を及ぼさない使用率はsar -dコマンドの%busyが60%以下だと言われており、60%を越えるとディスクアクセス時間は通常時の2〜3倍以上に低下してしまう。
もし複数のプロセスが同一ディスクに対してアクセスしている場合は資源の分散をするなどしてアクセス負荷についても分散させるのが良いだろう。
# sar -d 1 5 03:14:58 device %busy avque r+w/s blks/s avwait avserv 03:14:59 md0 95 4.9 220 46643 5.0 17.2 md1 0 0.0 0 0 0.0 0.0 md10 88 2.9 217 45874 0.0 13.1 md11 0 0.0 0 0 0.0 0.0 md20 92 3.0 220 46884 0.0 13.6 md21 0 0.0 0 0 0.0 0.0 nfs1 0 0.0 0 0 0.0 0.0 sd0 93 3.4 228 45885 0.0 15.0 sd0,a 88 2.8 217 45874 0.0 13.1 sd0,b 0 0.0 0 0 0.0 0.0 sd0,c 0 0.0 0 0 0.0 0.0 sd0,h 58 0.6 11 11 0.0 52.5 sd1 99 3.8 233 46898 0.0 16.5 sd1,a 92 3.0 220 46886 0.0 13.6 sd1,b 0 0.0 0 0 0.0 0.0 sd1,c 0 0.0 0 0 0.0 0.0 sd1,h 85 0.8 12 12 0.0 70.4 sd30 0 0.0 0 0 0.0 0.0 : Average md0 98 5.3 204 44219 5.2 20.6 md1 0 0.0 0 0 0.0 0.0 md10 89 3.1 203 43963 0.0 15.5 md11 0 0.0 0 0 0.0 0.0 md20 89 3.0 205 44390 0.0 14.4 md21 0 0.0 0 0 0.0 0.0 nfs1 0 0.0 0 0 0.0 0.0 sd0 97 3.9 218 43977 0.0 18.0 sd0,a 89 3.1 204 43963 0.0 15.4 sd0,b 0 0.0 0 0 0.0 0.0 sd0,c 0 0.0 0 0 0.0 0.0 sd0,h 77 0.8 14 14 0.0 55.2 sd1 99 3.8 219 44405 0.0 17.2 sd1,a 89 3.0 205 44391 0.0 14.4 sd1,b 0 0.0 0 0 0.0 0.0 sd1,c 0 0.0 0 0 0.0 0.0 sd1,h 80 0.8 14 14 0.0 57.4 sd30 0 0.0 0 0 0.0 0.0
blks/sが使用しているコントローラの1秒あたりの転送量(*)の3/4〜4/5に近い場合、コントローラが問題となっている可能性がある。
コントローラの増設やコントローラの再配置(コントローラが複数あると負荷が不均等になっている場合があるため)を行う。
(*) コントローラの1秒あたりの転送量はblks/s(1blks:0.5KB)の合計になる。
また、sar -bコマンドの結果「%rcache < 90」または「%wcache < 65」の場合はシステムバッファが不足しているのでカーネルパラメータであるbufhwmを拡張することによりアクセス性能の改善を行うことができる可能性がある。
# sar -b 1 5 03:19:35 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s 03:19:36 0 56 100 0 36 100 2 0 03:19:37 0 76 100 0 48 100 0 0 03:19:38 0 57 100 0 36 100 0 0 03:19:39 0 74 100 0 48 100 0 0 03:19:40 0 76 100 0 48 100 0 0 Average 0 68 100 0 43 100 0 0
具体的な解析例
では実際にシステム性能になんらかの問題が起こった場合の解析の流れをコマンドの実行結果もふまえながら具体的に紹介していく(スクリプト等はSolaris8のものを使用)。
システム性能はいつ悪化するかわからない。
そのような場合に備えてsarコマンドをcronのジョブとして定期的に実行させることで毎日の性能データが/var/adm/saディレクトリ配下に作成される。
cronで採取されたデータをsarコマンドで調査する場合、「計測間隔」と「計測回数」を指定する必要はなく、自動的に採取されたデータの値が表示される。
尚、本章での解析例は5分毎にデータが採取されていることを前提としている。
sarコマンドをcronジョブとして実行させる方法
/etc/rc2.d/S21perfファイルの該当部分のコメントを外し、システム起動時に性能情報の採取を開始するように設定する。
20 # if [ -z "$_INIT_RUN_LEVEL" ]; then 21 # set -- `/usr/bin/who -r` 22 # _INIT_RUN_LEVEL="$7" 23 # _INIT_RUN_NPREV="$8" 24 # _INIT_PREV_LEVEL="$9" 25 # fi 26 # 27 # if [ $_INIT_RUN_LEVEL -ge 2 -a $_INIT_RUN_LEVEL -le 4 -a \ 28 # $_INIT_RUN_NPREV -eq 0 -a \( $_INIT_PREV_LEVEL = 1 -o \ 29 # $_INIT_PREV_LEVEL = S \) ]; then 30 # 31 # /usr/bin/su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`" 32 # fi
sysユーザのcron設定の該当部分のコメントを外し、定期的に性能データを収集するように設定する。
# crontab -e sys 0 * * * 0-6 /usr/lib/sa/sa1 20,40 8-17 * * 1-5 /usr/lib/sa/sa1 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A
1行目 : 1時間おきに性能データを収集
2行目 : 月〜金曜日の8:00〜17:00は20分と40分に性能データを収集
3行目 : 月〜金曜日の18:05に8:00〜18:01までのシステム状況をレポート
解析例1
解析
システムの動作状態をsar -uコマンドで確認する。
% sar -u -s 14:25 -e 14:50 14:25:00 %usr %sys %wio %idle 14:30:00 2 5 71 22 14:35:00 5 6 88 0 14:40:00 2 4 91 2 14:45:00 1 4 95 0 14:50:00 3 6 91 0
→ %wioの値が高いためI/O処理の多発によりディスクに負荷がかかっている可能性がある。
sar -dコマンドでディスクアクセスの確認を行う。
% sar -d -s 14:25 -e 14:50 14:25:00 device %busy avque r+w/s blks/s avwait avserv 14:30:00 dad0 72 0.7 113 617 0.0 6.5 dad0,a 0 0.0 0 0 0.0 0.0 dad0,b 0 0.0 0 3 0.0 13.4 dad0,c 0 0.0 0 0 0.0 0.0 dad0,d 0 0.0 1 11 0.0 3.2 dad0,e 72 0.7 112 602 0.0 6.5 dad0,h 0 0.0 0 0 0.0 0.0 : 14:50:00 dad0 89 0.9 129 1121 0.0 7.2 dad0,a 0 0.0 0 3 0.0 18.3 dad0,b 0 0.0 0 3 0.0 14.6 dad0,c 0 0.0 0 0 0.0 0.0 dad0,d 0 0.0 0 0 0.0 0.0 dad0,e 89 0.9 129 1114 0.0 7.2 dad0,h 0 0.0 0 0 0.0 0.0
→ dad0,eの%busyが60を越えているためdad0,eデバイスの負荷が高いことが確認できる。
iostatコマンドでディスクアクセスの確認を行う。
% iostat -xtc 5 30 device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id dad0 150.2 0.2 259.4 1.6 0.0 0.9 6.3 0 72 0 181 5 6 88 0 fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
→ 負荷が高いdad0デバイスに注目する。ビジー率は高いが%wの値が5以下のためSCSIバスの負荷はない。
負荷がかかっているdad0,eデバイスとディスクの対応付けを行う。
(/dev/dskからdad0,eに該当するディスクを確認する)
% ls -l /dev/dsk lrwxrwxrwx 1 root root 38 9月 20日 2001年 c0t0d0s1 -> ../../devices/pci@1f,0/ide@d/dad@0,0:c lrwxrwxrwx 1 root root 29 9月 20日 2001年 c0t0d0s2 -> ../../devices/pci@1f,0/ide@d/dad@0,0:d lrwxrwxrwx 1 root root 38 9月 20日 2001年 c0t0d0s3 -> ../../devices/pci@1f,0/ide@d/dad@0,0:e
→ 上記からdad0,eはc0t0d0s3であることがわかる。
(c0t0d0s3をdf -kコマンドの結果から判断する)
% df -k ファイルシステム kbytes 使用済み 使用可能 capacity マウント先 /dev/dsk/c0t0d0s0 1760958 350133 1357997 21% / /dev/dsk/c0t0d0s3 4127894 1139940 2946676 28% /export /proc 0 0 0 0% /proc
→ 上記の結果からc0t0d0s3は/exportだということがわかる。
I/Oが高いためキャッシュヒット率の確認を行う。
% sar -b -s 14:25 -e 14:50 14:25:00 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s 14:30:00 25 171 86 1 2 50 0 0 14:35:00 23 169 80 1 2 48 0 0 14:40:00 21 180 83 1 2 60 0 0 14:45:00 21 183 85 1 2 62 0 0 14:50:00 23 165 78 1 2 48 0 0
→ %rcache < 90、かつ%wcache < 65のためシステムバッファが不足していることがわかる。
原因
%wioの値が高いのは/exportに対してのI/O処理が多発しておりディスクに負荷がかかっているためと判断できる。
またsar -bコマンドの結果から、システムバッファが不足していることがわかる。
対策
まず、高負荷の状態にあった時間/exportに対して頻繁にI/O処理を行っていたプロセスの処理を確認する。
/export以外にI/O処理が分散可能な場合はプロセスの見直しを行うことでディスクアクセスの負荷分散が可能である。
しかし/exportのみのアクセスになる場合はシステムバッファが不足しているため/etc/systemファイルに「set bufhwm = 値」を記述してシステムバッファを増やしI/O処理で使用するバッファを増やす。
結果
プロセスのI/O処理を分散させる対策をとった場合はsar -dコマンドの%busyを確認し、他のディスクにアクセスが行われディスクアクセスの負荷分散がされているか、%busyの値が60%以下になっているかを確認する。
以下はディスクアクセスの負荷分散を行った後にdad0,eの値を確認した結果である。
% sar -d -s 15:25 -e 16:00 15:25:00 device %busy avque r+w/s blks/s avwait avserv 15:30:00 dad0 53 3.5 41 9483 61.1 24.9 dad0,a 1 0.0 0 1 0.0 22.4 dad0,b 1 0.0 0 5 0.0 21.2 dad0,c 0 0.0 0 0 0.0 0.0 dad0,d 0 0.0 0 5 0.0 2.6 dad0,e 53 3.5 41 9472 61.1 24.9 dad0,h 0 0.0 0 0 0.0 0.0 : 16:00:00 dad0 55 3.6 43 9966 59.5 22.3 dad0,a 0 0.0 0 0 0.0 0.0 dad0,b 1 0.1 0 5 0.0 31.7 dad0,c 0 0.0 0 0 0.0 0.0 dad0,d 0 0.0 0 0 0.0 0.0 dad0,e 55 3.5 43 9961 59.5 22.3 dad0,h 0 0.0 0 0 0.0 0.0
また以下はbufhwmを設定しシステムバッファを増やした際、処理時間を比較した結果である。
bufhwmの設定前と設定後で処理時間が早くなっていることが確認できる。
(設定前)
# time sample real 1:24.7 user 0.4 sys 4.5
(設定後)
# time sample real 56.4 user 0.5 sys 4.3
解析例2
解析
システムの動作状態をsar -uコマンドで確認する。
% sar -u -s 15:05 -e 15:30 15:05:00 %usr %sys %wio %idle 15:10:00 96 4 0 0 15:15:00 96 4 0 0 15:20:00 96 4 0 0 15:25:00 95 5 0 0 15:30:00 94 6 0 0
→ %usrがCPU使用率の大部分を占めており、ユーザプロセスが原因となっている可能性がある。
システムコールの発行状況を確認する。
% sar -q -s 15:05 -e 15:30 15:05:00 runq-sz %runocc swpq-sz %swpocc 15:10:00 0.6 91 15:15:00 0.7 96 15:20:00 0.7 97 15:25:00 0.7 96 15:30:00 0.7 96
→ runq-sz < 1、かつ %runocc > 90 の状態が続いているため1つのプロセスがCPUを占有していることがわかる。
原因となるプロセスが何かを見つける。
% prstat PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 20859 user2 26M 20M run 59 0 46:49.23 99% sample/1 3359 user1 2536K 1504K cpu0 58 0 0:00.00 0.2% test-comm/1
→ sampleプロセスが99%のCPUを使用している。
原因
CPU使用率が高かったのはsampleプロセスが原因であると判断できる。
対策
プログラムの作りによる異常動作ではない場合で、あるプロセスが原因となり他のプロセスの動作に影響を与えているようであれば、プロセスの優先度を下げたり先に実行させたいプロセスの優先度を上げることで対処が可能である。
以下はsampleプロセスの優先度を下げる方法である。
% ps -elc | grep sample F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD 8 S 1679 20859 26567 RT 100 ? 3310 ? ?? 24958:05 sample
現在sampleプロセスの優先度はRT(リアルタイムクラス)で動作している。
これを優先度の低いTS(タイムシェアリングクラス)に変更する。
# priocntl -s -c TS -i pid 20859 % ps -elc |grep sample F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD 8 S 1679 20859 26567 TS 59 ? 3310 ? ?? 24958:05 sample
sampleプロセスの優先度を下げることでsampleプロセスよりも優先度が高いプロセスの実行が優先して行われるようになる。
また、sampleプロセスが99%ものCPUを使用しておりシステムパフォーマンスに影響を与えているようであればプロセスをkillすべきである。
ただし、killで対処する場合は対象プロセスがCPUの大部分を占めプログラムの動作上異常と判断した場合のみ実行するなど、実行の際は十分注意すること。
結果
対策としてプロセスの優先順位を下げた場合は先に処理させたいプロセスの実行が行われる。
またsampleプロセス自体の問題と判断しkillした場合はCPU使用率は正常値に戻る。
% sar -u -s 16:05 -e 16:30 16:05:00 %usr %sys %wio %idle 16:10:00 93 2 0 5 16:15:00 18 1 0 81 16:20:00 9 2 0 89 16:25:00 0 0 0 100 16:30:00 0 0 0 100
また同時にCPU実行待ちのプロセスがなくなる。
% sar -q -s 16:05 -e 16:30 16:05:00 runq-sz %runocc swpq-sz %swpocc 16:10:00 0.7 96 16:15:00 16:20:00 16:25:00 16:30:00
CPU使用率が高くても特にCPUを圧迫しているプロセスが存在しない場合はpriocntlコマンドにより優先させて実行したいプロセスの優先順位を上げる。
解析例3
解析
システムの動作状態をsar -uコマンドで確認する。
% sar -u -s 18:20 -e 18:45 18:20:00 %usr %sys %wio %idle 18:25:00 31 69 0 0 18:30:00 37 63 0 0 18:35:00 55 45 0 0 18:40:00 35 65 0 0 18:45:00 32 62 0 6
→ %sysの値が極端に高いことがわかる。CPU負荷の他にメモリ不足に陥っている可能性がある。
sar -qにてスワップアウトされたプロセス数を確認する。
% sar -q -s 18:20 -e 18:45 18:20:00 runq-sz %runocc swpq-sz %swpocc 18:25:00 1.2 100 48.0 100 18:30:00 1.0 100 48.0 100 18:35:00 1.2 100 48.0 100 18:40:00 1.0 100 48.0 100 18:45:00 1.0 100 48.0 100
→ runq-szの値からCPU待ちのプロセスがあること、swpq-szの値からスワップアウトしてしまったプロセスが多発していることがわかる。プロセスがスワップアウトする場合、仮想メモリ不足が考えられる。
(参考) ページングとスワッピング
新たにプロセスが起動する際、システムの仮想メモリに空きがなければ仮想メモリを使用している必要がないと判断されたプロセス(一度だけ実行されて後はスリープ状態にあるなど)が仮想メモリに空きを作るためにページ単位でスワップデバイスに追い出され、その部分に当該プロセス用のメモリ領域が割り当てられる。
これをページングという。
さらに、ページ単位での追い出しでも仮想メモリの空き容量が足りない場合はプロセス単位でスワップデバイスに追い出され、ページングと同様にその部分に当該プロセス用のメモリ領域が割り当てられる。
これをスワッピングという。
sar -gにてページスキャンの状態を確認する。
% sar -g -s 18:20 -e 18:45 18:20:00 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf 18:25:00 0.00 0.00 0.00 0.00 0.00 18:30:00 0.25 0.25 0.25 0.00 0.00 18:35:00 91.11 760.74 1055.80 7568.64 0.00 18:40:00 185.95 905.58 1070.91 7647.93 0.00 18:45:00 141.53 798.40 812.88 6346.71 0.00
→ pgscan/sの結果から18:35:00から18:45:00までページスキャンが頻繁に走り、空きメモリを探している状態であり一定の時刻だけメモリ不足になっていたことがわかる。また、ページスキャンが頻繁に走る時はpageoutデーモン(*)のCPU使用率が上がっていく。
(*) pageoutデーモンはカーネル空間で動作する。メモリの内容をディスクに書き込み、開放できるメモリを探す。また、空きメモリの量が少なくなると頻繁に動作するようになるのでCPU使用率が高くなる。同時にページング、スワッピングも多発するのでディスクへの負荷も高くなる。
sar -rにて空きメモリの量を確認する。
% sar -r -s 18:20 -e 18:45 18:20:00 freemem freeswap 18:25:00 6100 874104 18:30:00 6180 875292 18:35:00 57 206538 18:40:00 59 205894 18:45:00 196 210687
→ freememの結果で18:35:00から多くのメモリが消費されていることがわかる。
どのプロセスがメモリを多く使用しているか確認する。
% prstat PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 522 user1 411M 85M sleep 44 0 0:00.03 2.6% sample/1 478 user1 2424K 960K sleep 58 0 0:00.00 0.1% test.sh/1 67 root 2328K 1320K sleep 31 0 0:00.00 0.0% picld/8
→ SIZEの結果から、sampleプロセスが仮想記憶領域を411MB使用していることが確認できる。
プロセス情報の確認方法
解析ではプロセスの確認をおこなうためにps/prstatコマンドを実行しているが、この場合は現在起動中のプロセス情報が表示されるため後でどのプロセスがメモリやCPUを消費していたのかを確認することができない。
そのため後からプロセスを特定するには事前にアカウンティングの設定が必要になる。
アカウンティングの設定を行うと、いつ、誰が、どのプロセスを起動し、そのプロセスがどれだけメモリやCPUを使用したかを確認することができる。
原因
sampleプロセスが多くのメモリを使用していた。
sar -qコマンドのswpq-szの値からスワップアウトされたプロセスも多数あり、sar -gマンドのpgscan/sの値からメモリ不足に陥っている。
このことからsar -uコマンドの%sysの値が高いのは他にCPUを多く使用しているプロセスが存在するのではなく、メモリ不足が原因でCPUが多く使われていることがわかる。
対策
メモリが一番使われている時間では他のプロセスが使用できるメモリの残りは僅かである。
この時間帯に他のプロセスを動作させる必要がある場合はswapデバイスを足して使用できるメモリを増やす。
しかし、swapデバイスを追加してもsampleプロセスが多くのメモリを消費するのでシステムの仮想メモリは不足する。
そのためpageoutデーモンによるスキャンが頻繁に行われるためpageoutデーモンのCPU使用率は変わらずシステムのCPU使用率も高いまま変わらない。
pageoutデーモンのスキャン動作を押さえる場合はメモリの増設を検討する必要がある。
結果
swapデバイスを追加した場合は使用できるメモリが増える。
sampleプロセスが多くのメモリを消費しても追加した分のメモリが残っているため他のプロセスもメモリを使用することができる。
また、システムにメモリを増設した場合はpageoutデーモンのスキャン頻度が減りシステムのCPU使用率も低くなる。
おわりに
システムの性能を向上させるためには一部のデータから判断するのではなく、システム全体のパフォーマンス状態を把握し問題となる部分を見つけだす必要がある。
sar、iostat、prstatコマンド等のコマンドを駆使し、より効率的にパフォーマンスに関する問題を解決していきたい。
2008/4/8更新
対応バージョン: 10
voldではCD-ROM、フロッピーディスク、USBストレージといったリムーバブルメディアを管理しているが、/etc/vold.confを編集することによって特定のメディアタイプをvold制御下から外すことができる。
例えばUSBストレージをvold制御下から外す場合は以下のようにする。
vold停止
# svcadm disable volfs
/etc/vold.conf修正
以下の行をコメントアウト
use rmdisk drive /dev/rdsk/c*s2 dev_rmdisk.so rmdisk%d
vold開始
# svcadm enable volfs
2008/4/8更新
対応バージョン: 10
リムーバブルメディアサービスの有効にするには以下のようにする。
# svcadm enable volfs
これによりvoldデーモンが開始する。
また、リムーバブルメディアサービスの無効にするには以下のようにする。
# svcadm disable volfs
これによりvoldデーモンが停止する。
2009/3/18更新
対応バージョン: 10
Solaris 10 5/08以降のリリースにはデフォルトでVNCサーバの機能が組み込まれているので以下の手順で設定する。
/etc/services編集
以下のエントリを追加する。
vnc-server 5900/tcp # VNC Server
リモートログイン有効化
# vi /etc/X11/gdm/gdm.conf : [xdmcp] : Enable=false ← trueに変更 : # svcadm enable gdm2-login
サービス有効化
# svcadm enable xvnc-inetd
これによりTCPの5900番ポートが開き、同ポートにアクセスするとinetd経由でVNCサーバが起動する。
関連資料・記事
2007/7/29更新
対応バージョン: 8
/etc/groupの一行の長さが512バイトを越えているとuseraddは失敗するのでエディタで直接/etc/groupを編集して当該アカウントを必要なグループに追加する。
尚、グループ追加以外の処理は成功しているので、改めてuseraddを実行する必要はない。
2008/9/8更新
対応バージョン: 10
useraddで使用される各種設定のデフォルト値は/usr/sadm/defadduserに格納されている。
このファイルはOSインストール時点では存在せず、初めてuseraddを実行すると作成される。
ファイルの内容は以下のようになっているが、「useradd -D」でも参照できる。
# cat /usr/sadm/defadduser defgroup=1 defgname=other defparent=/home defskel=/etc/skel defshell=/bin/sh definact=0 defexpire= defauthorization= defrole= defprofile= defproj=3 defprojname=default deflimitpriv= defdefaultpriv= deflock_after_retries= # useradd -D group=other,1 project=default,3 basedir=/home skel=/etc/skel shell=/bin/sh inactive=0 expire= auths= profiles= roles= limitpriv= defaultpriv= lock_after_retries=
それぞれのパラメータの意味(*)と、useraddやusermod実行時にデフォルトの設定を上書きする際のオプションを以下に示す。
また「useradd -D <オプション>」によりdefadduserそのものを上書きすることができる。
(*) 最後の3パラメータは不明。
defgroup=<グループID>
-g
defgname=<グループ名>
-g
defparent=<ホームディレクトリトップ>
-b
例)
# useradd -D -b /Users group=other,1 project=default,3 basedir=/Users skel=/etc/skel shell=/bin/sh inactive=0 expire= auths= profiles= roles= limitpriv= defaultpriv= lock_after_retries=
defskel=<スケルトンディレクトリ>
-k
シェル環境設定ファイルのスケルトン(雛形)が格納されているディレクトリ
defshell=<ログインシェル>
-s
definact=<アカウントロック対象未使用日数>
-f
ここで指定した期間アカウントが使用されないとそのアカウントがロックされる。
0でロック日数をカウントしない(無期限使用可能)。
defexpire=<アカウント失効日時>
-e
アカウントが失効する日時を指定する。フォーマットは/etc/datemskで定義されているものが利用できる。
nullで無期限使用可能。
例)
# usermod -e "12/31/2008" foo
defauthorization=<認証方式,認証方式,...>
-A
認証方式をカンマで区切って複数指定できる。
認証方式の一覧は/etc/security/auth_attrに定義されている。
設定された情報は/etc/user_attrに書き込まれる。
例)
# usermod -A solaris.smf.value.postgres foo # cat /etc/user_attr : foo::::type=normal;auths=solaris.smf.value.postgres
defrole=<ロール,ロール,...>
-R
ロールをカンマで区切って複数指定できる。
ロールの一覧は/etc/user_attrの「type=role」エントリで確認できる。
# grep "type=role" /etc/user_attr postgres::::type=role;profiles=Postgres Administration,All
設定された情報は同じく/etc/user_attrに書き込まれる。
例)
# usermod -R postgres foo # cat /etc/user_attr : foo::::type=normal;roles=postgres
defprofile=<プロファイル>
-P
プロファイルをカンマで区切って複数指定できる。
プロファイルの一覧は/etc/security/prof_attrに定義されている。
設定された情報は/etc/user_attrに書き込まれる。またprofilesコマンドでも確認できる。
例)
# usermod -P "Crypto Management" foo # cat /etc/user_attr : foo::::type=normal;profiles=Crypto Management # profiles foo Crypto Management :
defproj=<プロジェクト番号>
-p
アカウントが所属するプロジェクトの番号を指定する。
プロジェクトは/etc/projectに定義されている。
例)
# usermod -p 2 foo
defprojname=<プロジェクト名>
上記defprojと同様。
deflimitpriv=
不明
defdefaultpriv=
不明
deflock_after_retries=
不明
関連資料・記事
2008/3/13更新
対応バージョン: 8,9,10
新規ユーザ作成の手順は、まずgroupaddコマンドによりグループを作成し、useraddコマンドを使用してユーザを作成する。
ここでは例として以下のようなユーザを作成する。他にも様々なパラメータがあるが割愛する。
アカウント (UID)
foo (100)
グループ
user (100)
ホームディレクトリ
/Users/foo
ログインシェル
/bin/bash
グループ作成
# groupadd -g 100 user
ユーザ作成
# mkdir /Users # useradd -u 100 -g user -d /Users/foo -s /bin/bash -m foo # passwd foo New Password: ***** Re-enter new Password: ***** passwd: password successfully changed for foo
ホームディレクトリに/etc/skel配下のスケルトンファイルがコピーされる。
local.cshrc
local.login
local.profile
不要であれば削除してよい。
関連資料・記事
2008/2/15更新
対応バージョン: 8
Solaris付属のtarコマンドには以下の制約があり、全てを満たさないとエラーになる。
ファイル名の長さは100文字まで
(ファイル名を含む)パス全体の長さは255文字まで
パス名の接頭辞は155文字まで
ファイルサイズは8GBまで
この制約を解除するには-Eオプションを付けてtarを実行する。
% tar cvfE foo.tar big long wide
ただしこのオプションにより拡張ヘッダ付でtarファイルが作成されるので、他OS等の同オプションをサポートしないtarでは展開できない。
2008/1/16更新
対応バージョン: 8
テープデバイスを操作しようとすると/var/adm/messagesに以下のエラーが出力される。
scsi: WARNING: /pci@1f,4000/scsi@4/st@1,0 (st29): Error for Command: rezero/rewind Error Level: Fatal scsi: Requested Block: 0 Error Block: 0 scsi: Vendor: QUANTUM Serial Number: ; scsi: Sense Key: Hardware Error scsi: ASC: 0x15 (<vendor unique code 0x15>), ASCQ: 0x1, FRU: 0x0
エラーとしては、巻き戻しなどのテープ操作ができない状態になっている。
このような場合は以下の原因が考えられる。
メディアの問題
メディア不良
テープが最終位置まで到達していてこれ以上テープ送りができない
メディアの問題の場合、別のメディアに交換すれば解決する。
デバイスの問題
ドライブ不良
スロット不良(ロボットタイプの場合)
ロボットアーム不良(ロボットタイプの場合)
デバイスの問題の場合、対象となるコンポーネントあるいは筐体そのものを交換する必要がある。
2007/7/29更新
対応バージョン: 8
テープデバイスのモードには記録密度/制御方法などによって以下のような種類がある。
記録密度
l ... low density (低密度)
m ... medium density(中密度)
h ... high density (高密度)
u ... ultra density (超高密度)
制御
c ... compressed(圧縮)
n ... 巻戻しなし
互換モード
b ... BSD互換
密度指定(l,m,h,u)と圧縮指定(c)の違いは、それを使うデバイスドライバによって動作が異なる。
例えば1/2"リールテープデバイスの場合、モードによる動作の違いは以下のようになる。
l ... 800 BPI
m ... 1600 BPI
h ... 6250 BPI
c ... 圧縮
また、DAT、DLTの場合はそれぞれ以下のようになる。
DAT
l ... 標準
m,h,c ... 圧縮
u ... 使用しない
DLT
TypeIII(356m)
l ... 標準(10GB)
m ... 圧縮(20GB)
h ... 標準(10GB)
u ... 圧縮(20GB)
c ... 圧縮(20GB)
TypeIIIxt(541m)
l ... 標準(15GB)
m ... 圧縮(30GB)
h ... 標準(15GB)
u ... 圧縮(30GB)
c ... 圧縮(30GB)
TypeIV - DLT4000(541m)
l ... 標準(20GB)
m ... 圧縮(40GB)
h ... 標準(20GB)
u ... 圧縮(40GB)
c ... 圧縮(40GB)
TypeIV - DLT7000(541m)
l ... 標準(20GB)
m ... 圧縮(40GB)
h ... 標準(35GB)
u ... 圧縮(70GB)
c ... 圧縮(70GB)
TypeIV - DLT8000(541m)
l ... 標準(35GB)
m ... 圧縮(70GB)
h ... 標準(40GB)
u ... 圧縮(80GB)
c ... 圧縮(80GB)
2007/7/29更新
対応バージョン: 8
ssaadmコマンドを使用する。
例) Sun DLT8000の場合
# /usr/sbin/ssaadm inq /dev/rmt/1 /dev/rmt/1: inquiry Removable media: yes Device type: 1 ISO version: 0 ECMA version: 0 ANSI version: 2 Async event notification: no Terminate i/o process msg: no Response data format: 2 Additional length: 51 Relative addressing: no 32 bit transfers: no 16 bit transfers: yes Synchronous transfers: yes Linked commands: yes Command queueing: no Soft reset option: no Vendor: QUANTUM Product: DLT8000 Revision: 023B
2008/2/29更新
対応バージョン: 8
通常syslogは特別なイベントが発生しない限りログを出力しないが、-mオプション付でsyslogdを起動することによって一定期間毎にログを出力することができる。
これはsyslog.confが正常に動作しているか調べるのに役立つ。
設定はまず/etc/syslog.confに以下の設定を追加する。
mark.debug /var/adm/messages
次に/etc/init.d/syslogを以下のように変更し、syslogdを再起動する。
(変更前)
/usr/sbin/syslogd >/dev/msglog 2>&1 &
(変更後)
/usr/sbin/syslogd -m 60 >/dev/msglog 2>&1 & ← -mオプションとログ出力間隔(分)を指定
上記の設定の場合、messagesには以下のようなメッセージが60分おきに出力される。
Feb 29 02:25:30 host1 -- MARK --
2008/3/10更新
対応バージョン: 8,9,10
Solaris8以降の/var/adm/messagesには今までのバージョンに対して[ID 142 auth.crit]といった情報が付加される。
この情報は「message ID」と呼ばれるが、これを出力させないようにするには/kernel/drv/log.confに以下の設定を追加してマシンをリブートする。
name="log" parent="pseudo" instance=0; msgid=0; ← 追加(最後にセミコロンを忘れないこと)
2007/7/29更新
対応バージョン: 8
/tmpがいっぱいになった。
/tmpは仮想メモリ領域を使用しているため、ファイルシステムの容量ではなく同領域の容量までしかファイルを作成できない。
/tmp配下に大量のファイルを作成する必要がある場合、仮想メモリ領域を増やして対応する。
関連資料・記事
2007/7/29更新
対応バージョン: 8
メッセージ中の括弧内のコマンド(この場合はmyprog)を実行中に仮想メモリ(swap)領域を使い果たした。
メモリを不必要に大量消費するバグがあればそれを修正すればよいが、適切な量のメモリを使用している場合は以下のいずれか(あるいは両方)の対応が必要となる。
仮想メモリ領域の追加
物理メモリの追加
関連資料・記事
2007/7/29更新
対応バージョン: 8
拡張/縮小それぞれ以下の手順で作業する。
swap領域を拡張する
現状把握
例) DiskSuiteを用いてd0をファイルシステム、d1をswap領域に使用している場合
# df -k Filesystem kbytes used avail capacity Mounted on /dev/md/dsk/d0 69529978 7486248 61348431 11% / : swap 2589272 32 2589240 1% /var/run swap 2594096 4856 2589240 1% /tmp # swap -l swapfile dev swaplo blocks free /dev/md/dsk/d1 85,1 16 2106416 2106416 # swap -s total: 31592k bytes allocated + 12208k reserved = 43800k used, 2591264k available
mkfileコマンドにてswapデバイスを作成
例) 2GBのswapデバイスを作成する場合
# mkfile 2048M /var/swap1
swapデバイスを有効化
# swap -a /var/swap1 # swap -l swapfile dev swaplo blocks free /dev/md/dsk/d1 85,1 16 2106416 2106416 /var/swap1 - 16 4194288 4194288 ← 追加された # swap -s total: 31488k bytes allocated + 12312k reserved = 43800k used, 4688088k available
OSブート時に有効化する場合の設定
# vi /etc/vfstab (swapエントリの前行に以下の設定を追加する) /var/swap1 - - swap - no -
swap領域を縮小する
swapデバイスを切り離す
# swap -d /var/swap1 # rm /var/swap1
/etc/vfstabからswapデバイスのエントリを削除
# vi /etc/vfstab :
2008/1/16更新
対応バージョン: 8
指定したファイル中に現在使用しているLANG以外の文字コードが含まれている。
例えばUTF-8環境においてSJISの文字コードを含むファイルをsortしようとするとこのエラーが出る。
% locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_ALL=ja_JP.UTF-8 % sort foo sort: missing NEWLINE added at end of input file foo sort: foo を読み取れません。: バイトシーケンスが正しくありません。
対処としては以下の2通りの方法がある。
1. LANGを対象ファイルと同じ文字コードにする
例) 対象ファイルがSJISの場合
% setenv LANG ja_JP.PCK % setenv LC_ALL ja_JP.PCK % locale LANG=ja_JP.PCK LC_CTYPE="ja_JP.PCK" LC_NUMERIC="ja_JP.PCK" LC_TIME="ja_JP.PCK" LC_COLLATE="ja_JP.PCK" LC_MONETARY="ja_JP.PCK" LC_MESSAGES="ja_JP.PCK" LC_ALL=ja_JP.PCK % sort foo > bar
2. 対象ファイルをLANGと同じ文字コードにする
例) LANGがUTF-8の場合
% mv foo foo.org % iconv -f SJIS -t UTF-8 foo.org > foo % sort foo > bar
関連資料・記事
2009/2/28更新
対応バージョン: 10
snoopコマンドの-iオプションで入力ファイルを指定し、-pオプションで対象パケット番号を指定し、-oオプションで出力ファイルを指定する。
例えば2139パケット分が記録されているsnoopファイルを1000パケット毎に分割するには以下のようにする。
% snoop -i snoop.out -p 1,1000 -o snoop1.out 1000 % snoop -i snoop.out -p 1001,2000 -o snoop2.out 1000 % snoop -i snoop.out -p 2001,9999 -o snoop3.out 139
分割後のファイルを使って例えばUDPパケットだけ取り出すには以下のようにする。
% snoop -i snoop1.out -o snoop1.udp udp 3 % snoop -i snoop1.udp 1 0.00000 192.168.1.3 -> 192.168.1.255 NBT Datagram Service Type=17 Source=HASHIDUMEA02[20] 2 35.31072 client1 -> server1 NTP client [st=9] (2009-02-28 02:00:03.43362) 3 0.00033 server1 -> client1 NTP server [st=8] (2009-02-28 02:00:03.40429)
関連資料・記事
2007/7/29更新
対応バージョン: 9
Solaris 9標準のSNMPエージェントであるsnmpdxがサポートするSNMPのバージョンは1なので、それ以外のバージョン(2c,3)のうちバージョン2cのコマンドを受けると上記のメッセージを出力してそのリクエストが失敗する。
バージョン3のコマンドはメッセージは出力しないもののやはりリクエストは失敗する。
2010/2/12更新
対応バージョン: 10
rshでコマンドを指定した場合と省略した場合でリモートホスト側で必要なサービスが異なる。
コマンド指定
/network/shell:default
コマンド省略
/network/login:rlogin (リモートログイン)
したがって/network/login:rloginサービスを起動すればよい。
# svcadm enable -r /network/login:rlogin
(*) -rオプション付で依存関係にあるサービスも起動
関連資料・記事
2008/9/18更新
対応バージョン: 10
Solaris10ではサービス管理の機構としてSMF(Service Management Facility)が採用されている。
個々のサービスの起動/停止スクリプトは従来の/etc/rc*.d配下ではなく/lib/svc/method配下に置かれ、svc.startd(マスターリスタータデーモン)によって制御される。
サービスの型や依存関係などを記したXML形式のマニフェストは/var/svc/manifest配下のグループ別ディレクトリに置かれ、svc.configd(リポジトリデーモン)によって参照/変更される。
ログは/var/svc/log配下にサービス毎に出力される。
管理コマンド
SMFの管理コマンドにはサービス全体の管理を行うsvcsと個々のサービスの制御を行うsvcadmがある。以下、それぞれ説明する。
svcs
サービスの一覧表示
# svcs -a STATE STIME FMRI legacy_run 8月_07 lrc:/etc/rcS_d/S50sk98sol legacy_run 8月_07 lrc:/etc/rc2_d/S10lu : disabled 8月_07 svc:/system/metainit:default disabled 8月_07 svc:/network/iscsi_initiator:default : online 8月_07 svc:/system/svc/restarter:default online 8月_07 svc:/network/pfil:default :
実行されていないサービスの一覧
# svcs -x svc:/application/print/server:default (LP print server) State: disabled since Fri Aug 8 00:34:11 2008 Reason: Disabled by an administrator. See: http://sun.com/msg/SMF-8000-05 See: lpsched(1M) Impact: 2 dependent services are not running. (Use -v for list.)
他のサービスに依存するサービスの一覧
# svcs -l <サービス>
例) nfs.serverの依存関係
# svcs -l network/nfs/server fmri svc:/network/nfs/server:default name NFS server 有効 true (temporary) 状態 online next_state none state_time 2008年11月14日 21時31分33秒 logfile /var/svc/log/network-nfs-server:default.log リスタータ svc:/system/svc/restarter:default contract_id 92 dependency require_any/error svc:/milestone/network (online) dependency require_all/error svc:/network/nfs/nlockmgr (online) dependency optional_all/error svc:/network/nfs/mapid (online) dependency require_all/restart svc:/network/rpc/bind (online) dependency optional_all/none svc:/network/rpc/keyserv (disabled) dependency optional_all/none svc:/network/rpc/gss (online) dependency require_all/error svc:/system/filesystem/local (online)
ランレベルに依存するサービスの一覧
# svcs -D <サービス>
例) sshdの依存関係
# svcs -D network/ssh:default STATE STIME FMRI online 8月_07 svc:/milestone/multi-user-server:default
上記の例では当該サービスはマルチユーザになっていなければならないことが分かる。
svcadm
サービス起動
# svcadm enable [-rst] <サービス>
オプションの意味は以下のとおり。
・オプションなし(デフォルト)
OSリブート後もこの設定を有効にする。
・-r
指定したサービスに依存するサービスを再帰的に有効にする。
・-s
指定したサービスを有効にし、状態がonlineかdegradedになるまで待つ。
・-t
指定したサービスを一時的に有効にするが、OSリブートにて元の設定に戻る。
サービス停止
# svcadm disable [-st] <サービス>
例)
# svcs network/smtp:sendmail STATE STIME FMRI online 17:09:19 svc:/network/smtp:sendmail # svcadm disable -t network/smtp:sendmail # svcs network/smtp:sendmail STATE STIME FMRI disabled 17:09:19 svc:/network/smtp:sendmail
サービス再起動
# svcadm restart <サービス>
サービス状態更新
# svcadm refresh <サービス>
サービス状態変更
# svcadm mark [-It] <状態> <サービス>
-Iオプションは即時(immediate)指定である。
<状態>は以下のどちらかを指定する。・maintenance
サービスを停止し、メンテナンスモードにする。
・degraded
サービスを信頼性低下モードにする。
例)
# svcadm mark -It maintenance network/smtp:sendmail # svcs network/smtp:sendmail STATE STIME FMRI maintenance 17:34:27 svc:/network/smtp:sendmail
サービス状態クリア
# svcadm clear <サービス>
maintenance状態のサービスに対しては、サービスが修復されたことをリスタータデーモンに通知する。
degraded状態のサービスに対しては、サービスをonlineにするようリスタータデーモンに通知する。
サービスが上記以外の状態の場合、このコマンドは無視される。
2007/11/20更新
対応バージョン: 8
以下のような原因が考えられる。
物理的な接続
端末同士がRS-232Cのストレートケーブルで接続されている。
DTE(端末)とDTEの接続には両者をリバース(クロス)ケーブルで接続する必要がある。
OS上の設定
使用するポートがポートモニタの制御から切り離されていない。
接続先端末とシリアルポートの設定(ボーレート等)が合っていない。
関連資料・記事
2008/5/29更新
対応バージョン: 10
Solarisマシン(SPARC/x86)のシリアルポートはttymonポートモニタの制御下にある。この制御を行うにはsacadmコマンドを使用する。
以下、主な使用方法について説明する。
状態表示
例)
# sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 ENABLED /usr/lib/saf/ttymon #TTY Ports a & b
各項目の意味は以下のとおり。
PMTAG
ポートモニタ名
PMTYPE
ポートモニタのタイプ
FLGS
d : 新しいポートモニタを有効にする
x : 新しいポートモニタを起動しない
- : フラグ未設定
RCNT
戻りカウント値
0の戻りカウントはポートモニタが失敗した場合でも再起動しないことを示す
STATUS
ポートモニタの現在の状態
COMMAND
ポートモニタを起動するコマンド
その他
#に続いて当該ポートモニタの説明文(コメント)を記述
ポートモニタ停止/起動
停止
# sacadm -k -p zsmon # sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 NOTRUNNING /usr/lib/saf/ttymon #TTY Ports a & b
起動
# sacadm -s -p zsmon # sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 STARTING /usr/lib/saf/ttymon #TTY Ports a & b
(*) しばらく待っているとSTATUSがENABLEDになる。
ポートモニタ無効化/有効化
無効化
# sacadm -d -p zsmon # sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 DISABLED /usr/lib/saf/ttymon #TTY Ports a & b
有効化
# sacadm -e -p zsmon # sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 ENABLED /usr/lib/saf/ttymon #TTY Ports a & b
ポートモニタ削除/追加
削除
# sacadm -r -p zsmon # sacadm -l No port monitors defined
追加
# sacadm -a -p zsmon -t ttymon -c /usr/lib/saf/ttymon -v `ttyadm -V` -y "TTY Ports a & b" # sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 STARTING /usr/lib/saf/ttymon #TTY Ports a & b
(*) しばらく待っているとSTATUSがENABLEDになる。
関連資料・記事
2007/11/20更新
対応バージョン: 8
シリアルポートの制御をポートモニタから切り離す
Sunのマシンのシリアルポートは通常A/Bの2ポートがあるが、両ポートともttymonポートモニタの制御下にあるので、まずpmadmコマンドを用いて使用したいポートをこの制御から切り離す。
現状のポートモニタの状態を表示するとttya(Aポート)とttyb(Bポート)がポートモニタの制御下にある。
# pmadm -l PMTAG PMTYPE SVCTAG FLGS ID <PMSPECIFIC> zsmon ttymon ttya u root /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat ttya login: - tvi925 y # zsmon ttymon ttyb u root /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login: - tvi925 y #
この状態からここではttybをポートモニタから切り離す。
# pmadm -r -p zsmon -s ttyb # pmadm -l PMTAG PMTYPE SVCTAG FLGS ID <PMSPECIFIC> zsmon ttymon ttya u root /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat ttya login: - tvi925 y #
この作業により、/etc/saf/zsmon/_pmtabからttybのエントリが削除される。
シリアルポートの設定
次に/etc/remoteを編集して接続先端末と設定を合わせた接続用エントリを作成する。
最低限ボーレートのみ設定すればよいので、ここではBポートを9600bpsの設定にする。
# vi /etc/remote : cuab:dv=/dev/cua/b:br#9600 :
接続
最後に実際にシリアルポート経由で別端末に接続する。
# tip cuab Connect ← 接続
接続を解除するには[~]+[.]を入力する。
関連資料・記事
2008/3/26更新
対応バージョン: 10
上記以外に「sendmail: My unqualified host name (xxxxx) unknown; sleeping for retry」というエラーが出る場合もある。
両者ともsendmailが自身のホスト名としてFQDNを検索したがそれが得られなかったことが原因である。
/etc/inet/hosts(*)にFQDNを記述することでエラーは出なくなるが、ホストがドメインに属しているかどうかで記述方法が異なる。
ドメインに属している場合
通常のFQDNを記述する。
例) ホスト名がhost1、ドメイン名がbar.com
192.168.0.1 host1 host1.bar.com
ドメインに属していない場合
FQDNの代わりにホスト名に「.local」を付加する。
例) ホスト名がhost1
192.168.0.1 host1 host1.local
(*) ホスト情報を記述したファイルとして/etc/inet/hostsの他に同ファイルにシンボリックリンクを張った/etc/inet/ipnodesも存在するが、OSのリビジョンによってはipnodesがhostsにシンボリックリンクされていない場合があり、その場合はipnodesも同様に修正する。
関連資料・記事
2007/7/29更新
対応バージョン: 9
標準のsed(/bin/sed)ではなく/usr/xpg4/bin/sedを使用すれば、エラーは出るものの処理は行われる。
% /usr/xpg4/bin/sed <変換パターン> <対象ファイル> sed: <対象ファイル> ファイルの終わりに復帰改行がありません。
2007/11/27更新
対応バージョン: 8
SAFは以下の順番で動作し、対象となるポートを監視する。
1. initプロセスが/etc/inittabの記述に従ってSAFのマスタプロセスであるsac(service access controler)を起動する。
sc:234:respawn:/usr/lib/saf/sac -t 300
2. sacが/etc/saf/_sactabの記述に従ってポートモニタを起動する。
# VERSION=1 zsmon:ttymon::0:/usr/lib/saf/ttymon #
ポートモニタは監視するポートの種類毎に1つ起動される。
ポートにはシリアルポート(ttymonが管理)とネットワークポート(listenが管理)があるが、後者は通常inetdが管理するため上記の_sactabのように事実上ttymonのみが動作する。
# ps -ef|grep saf root 336 1 ... /usr/lib/saf/sac -t 300 root 8771 336 ... /usr/lib/saf/ttymon # sacadm -l PMTAG PMTYPE FLGS RCNT STATUS COMMAND zsmon ttymon - 0 ENABLED /usr/lib/saf/ttymon #
3. ttymonが/etc/saf/<ポートモニタタグ>/_pmtabの記述に従って必要なポートを監視する。
# VERSION=1 ttya:u:root:reserved:reserved:reserved:/dev/term/a:I::/usr/bin/login::9600:ldterm,ttcompat:ttya login\: ::tvi925:y:# ttyb:u:root:reserved:reserved:reserved:/dev/term/b:I::/usr/bin/login::9600:ldterm,ttcompat:ttyb login\: ::tvi925:y:#
SunのマシンにはRS-232Cポートが通常2個備わっているので以下のように2つのポートが監視対象となる。
# pmadm -l PMTAG PMTYPE SVCTAG FLGS ID <PMSPECIFIC> zsmon ttymon ttya u root /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat ttya login: - tvi925 y # zsmon ttymon ttyb u root /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login: - tvi925 y #
4. /etc/inittabの記述に従ってinitプロセスがコンソール監視用プロセスとしてttymonを起動する。
co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " \ -T sun -d /dev/console -l console -m ldterm,ttcompat
5. 4.によりコンソールからのログインサービスが、inetdによりネットワークからのログインサービスがそれぞれ開始される。
関連資料・記事
2007/7/29更新
対応バージョン: 10
psrinfo、uptimeコマンドを使用する。
# psrinfo 0 on-line since 05/18/2007 17:48:34 1 on-line since 05/18/2007 17:48:34 # uptime 6:00pm up 7:30, 2 users, load average: 0.02, 0.02, 0.02
2007/7/29更新
対応バージョン: 8,9
デフォルトルートは/etc/defaultrouterに設定すればよいが、スタティックルートは設定ファイルが存在しないのでinitスクリプト等でrouteコマンドを記述する必要がある。
通常は/etc/rc2.d/S69inetに記述する。
例) 172.20.61.0/24宛のゲートウェイを192.168.253.1に設定する場合
initスクリプト修正
# cd /etc/rc2.d # cp -p S69inet _S69inet.org # vi S69inet
再終行に以下の内容を追加
/usr/sbin/route add net 172.20.61.0/24 192.168.253.1
マシンリブート
確認
# netstat -nrv IRE Table: IPv4 Destination Mask Gateway Device Mxfrg Rtt Ref Flg Out In/Fwd ----------- ------------- ------------- ------ ----- --- --- --- --- ------ : 172.20.61.0 255.255.255.0 192.168.253.1 bge0 1500* 0 1 U 104 0 :
関連資料・記事
2007/7/29更新
対応バージョン: 8,9,10
以下の手順で設定する。
# echo "XXX.XXX.XXX.XXX" > /etc/defaultrouter # route add default `cat /etc/defaultrouter` add net default: gateway XXX.XXX.XXX.XXX # netstat -nr Routing Table: IPv4 Destination Gateway Flags Ref Use Interface ----------- --------------- ----- --- --- --------- : default XXX.XXX.XXX.XXX UG 1 0
関連資料・記事
2007/7/29更新
対応バージョン: 8
リモートホスト側の.bashrcや.cshrc等でsttyを実行している部分を変更する。
(変更前)
stty erase '^H'
(変更後)
tty -s && stty erase '^H'
2008/5/9更新
対応バージョン: 10
sudoはOS標準では使用できないが、RBAC(Role-Based Access Control)を用いることによって同様の制御が可能になる。
例えば一般ユーザfooにroot権限でpfilesコマンドの実行を許可する場合には以下のような手順でRBACを設定する。
権利プロファイル作成
pfilesに対して任意の名前(権利プロファイル)を付ける。
# cd /etc/security # cp -p prof_attr prof_attr.org (必要に応じてバックアップ) # vi prof_attr : Pfiles::::
権利設定
上記で作成した権利プロファイルに対して具体的な権利(pfiles実行)を設定する。
# cp -p exec_attr exec_attr.org (必要に応じてバックアップ) # vi exec_attr : Pfiles:suser:cmd:::/usr/bin/pfiles:privs=All
ロールユーザ作成
上記で設定した権利を割り当てるロールユーザを作成する。ここではpuserというロールユーザを作成する。
# roleadd -d /export/home/puser -m -P "Pfiles",All puser 64 ブロック # passwd puser 新しいパスワード: ***** 新しいパスワードを再入力してください: ***** passwd: puser のパスワードが変更されました
-dオプションや-mオプションなどは通常のuseraddコマンドと同じ。
-Pオプションにより権利プロファイル名を指定する。
roleaddで作成したユーザ情報は通常の/etc/passwd,/etc/shadowの他に以下の書式で/etc/user_attrに追加される。
puser::::type=role;profiles=Pfiles,All
ロールユーザの実ユーザ割当
作成したロールユーザを実ユーザと結びつける。これにより実ユーザはそのロールユーザが持つ権利を行使できるようになる。
# usermod -R puser foo
/etc/user_attrファイルには以下の内容が追加される。
foo::::type=normal;roles=puser;defaultpriv=basic,net_rawaccess
動作確認
まず通常の使用方法では権限がないのでエラーになる。
% pfiles 493 pfiles: permission denied: 493
ここでロールユーザにスイッチして同様のコマンドを実行すると今度はエラーにならない。
% su - puser % pfiles 493 493: /usr/lib/ssh/sshd Current rlimit: 256 file descriptors 0: S_IFCHR mode:0666 dev:274,0 ino:6815752 uid:0 gid:3 rdev:13,2 O_RDWR|O_LARGEFILE /devices/pseudo/mm@0:null 1: S_IFCHR mode:0666 dev:274,0 ino:6815752 uid:0 gid:3 rdev:13,2 O_RDWR|O_LARGEFILE /devices/pseudo/mm@0:null 2: S_IFCHR mode:0666 dev:274,0 ino:6815752 uid:0 gid:3 rdev:13,2 O_RDWR|O_LARGEFILE /devices/pseudo/mm@0:null 3: S_IFSOCK mode:0666 dev:280,0 ino:62950 uid:0 gid:0 size:0 O_RDWR|O_NONBLOCK SOCK_STREAM SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.192.0.0) sockname: AF_INET6 :: port: 22 7: S_IFREG mode:0666 dev:275,1 ino:65539 uid:0 gid:0 size:0 O_RDWR|O_LARGEFILE /system/contract/process/template
2009/1/27更新
対応バージョン: 10
動作中のプロセスを一時停止/再開する場合、通常のUNIX環境では対象のプロセスにシグナルSIGSTOP/SIGCONTを送るが、Solarisの場合はそれに加えてpstop/prunコマンドを使用することもできる。
一時停止
例) PIDが123と456のプロセスを一時停止
% pstop 123 456
再開
例) PIDが123と456のプロセスを再開
% prun 123 456
終了待ち
また、pwaitコマンドを使ってプロセスの終了を待つこともできる。
例) PIDが123と456のプロセスが両方終了するまで待つ
% pwait 123 456
2008/7/5更新
対応バージョン: 8,10
Solarisマシンのシステム情報を調べる場合、必要とする情報によって方法が異なるので以下に列挙する。
CPUやメモリ容量、スロット使用状況など
prtdiagを使用する。
(SPARC機での一例)
% /usr/platform/sun4u/sbin/prtdiag -v System Configuration: Sun Microsystems sun4u Sun Fire V210 System clock frequency: 167 MHZ Memory size: 7GB ========================= IO Devices ========================= Bus Freq Brd Type MHz Slot Name Model --- ---- ---- ---- ---------------------------- -------------- 0 pci 66 MB pci108e,1648 (network) 0 pci 66 MB pci108e,1648 (network) 0 pci 33 MB isa/su (serial) 0 pci 33 MB isa/su (serial) 0 pci 33 MB pci10b9,5229 (ide) 0 pci 66 MB scsi-pci1000,21 (scsi-2) 0 pci 66 MB scsi-pci1000,21 (scsi-2) 0 pci 66 MB pci108e,1648 (network) 0 pci 66 MB pci108e,1648 (network) 0 pci 33 7 isa/rmc-comm-rmc_comm (seria+ ==================== Memory Configuration ==================== Segment Table: ------------------------------------------------------------ Base Address Size Interleave Factor Contains ------------------------------------------------------------ 0x0 1GB 1 BankIDs 0 0x200020000 2GB 2 BankIDs 1,2 0x1000000000 2GB 2 BankIDs 16,17 0x1200000000 2GB 2 BankIDs 18,19 Bank Table: ------------------------------------------------------- Physical Location ID ControllerID GroupID Size Interleave Way --------------------------------------------------- 0 0 0 1GB 0 1 0 1 1GB 0,1 2 0 1 1GB 16 1 0 1GB 0,1 17 1 0 1GB 18 1 1 1GB 0,1 19 1 1 1GB Memory Module Groups: -------------------------------------------------- ControllerID GroupID Labels -------------------------------------------------- 0 0 MB/P0/B0/D0,MB/P0/B0/D1 0 1 MB/P0/B1/D0,MB/P0/B1/D1 Memory Module Groups: -------------------------------------------------- ControllerID GroupID Labels -------------------------------------------------- 1 0 MB/P1/B0/D0,MB/P1/B0/D1 1 1 MB/P1/B1/D0,MB/P1/B1/D1 ==================== Environmental Status ==================== Fan Speeds: ----------------------------------------- Location Sensor Status Speed ----------------------------------------- MB/P0/F0 RS okay 16463 rpm MB/P0/F1 RS okay 17307 rpm MB/P1/F0 RS okay 16071 rpm MB/P1/F1 RS okay 17307 rpm F0 RS okay 12980 rpm F1 RS okay 12980 rpm F2 RS okay 13500 rpm PS0 FF_FAN okay F3 RS okay 12500 rpm -------------------------------------------------- Led State: -------------------------------------------------- Location Led State Color -------------------------------------------------- MB ACT on green MB SERVICE off amber MB LOCATE off white PS0 ACT on green PS0 SERVICE off amber PS0 OK2RM off blue HDD0 SERVICE off amber HDD0 OK2RM off blue HDD1 SERVICE off amber HDD1 OK2RM off blue -------------------------------------------------------------- Temperature sensors: -------------------------------------------------------------- Location Sensor Temperature Lo LoWarn HiWarn Hi Status -------------------------------------------------------------- MB T_ENC 25C -3C 5C 40C 48C okay MB/P0 T_CORE 60C - - 88C 93C okay MB/P1 T_CORE 51C - - 88C 93C okay PS0 FF_OT - - - - - okay -------------------------------------------------------------- Voltage sensors: -------------------------------------------------------------- Location Sensor Voltage Lo LoWarn HiWarn Hi Status -------------------------------------------------------------- MB V_VTT 1.24V - 1.17V 1.43V - okay MB V_GBE_+2V5 2.51V - 2.25V 2.75V - okay MB V_GBE_CORE 1.21V - 1.08V 1.32V - okay MB V_VCCTM 2.53V - 2.25V 2.75V - okay MB V_+2V5 2.49V - 2.34V 2.86V - okay MB V_+1V5 1.51V - 1.35V 1.65V - okay MB/BAT V_BAT 2.98V - 2.70V - - okay MB/P0 V_CORE 1.48V - 1.26V 1.54V - okay MB/P1 V_CORE 1.47V - 1.26V 1.54V - okay PS0 FF_UV - - - - - okay PS0 FF_OV - - - - - okay PS0 P_PWR - - - - - okay -------------------------------------------------------------- Current sensors: -------------------------------------------------------------- Location Sensor Current Lo LoWarn HiWarn Hi Status -------------------------------------------------------------- MB FF_SCSI - - - - - okay PS0 FF_OC - - - - - okay ======== FRU Status ========= ------------------------- Fru Operational Status: ------------------------- Location Status ------------------------- MB/SC okay PS0 okay HDD0 present HDD1 present ======================== HW Revisions ======================== ASIC Revisions: --------------- pci: Rev 4 pci: Rev 4 pci: Rev 4 pci: Rev 4 System PROM revisions: ---------------------- OBP 4.16.2 2004/10/04 18:22 Sun Fire V210/V240,Netra 240 OBDIAG 4.16.2 2004/10/04 18:23
(Intel機での一例)
% /usr/platform/i86pc/sbin/prtdiag -v System Configuration: Compaq Evo D310 ST BIOS Configuration: Compaq 686O2 v2.18 09/24/2002 ==== Processor Sockets ==================================== Version Location Tag -------------------------------- -------------------------- Pentium(R) 4 processor 1800 MHz XU1 PROCESSOR ==== Memory Device Sockets ================================ Type Status Set Device Locator Bank Locator ------- ------ --- ------------------- -------------------- SDRAM in use 0 DIMM1 SDRAM in use 0 DIMM2 FLASH in use 0 SYSTEM ROM ==== On-Board Devices ===================================== ==== Upgradeable Slots ==================================== ID Status Type Description --- --------- ---------------- ---------------------------- 0 available AGP 4X AGP 1 available PCI PCI Slot 1 2 available PCI PCI Slot 2 3 available PCI PCI Slot 3
マシンのシリアル番号
一部の機種(Sun Enterprise等)ではprtconf,eepromコマンドによりマシンのシリアル番号を調べることができる。
例)
% /usr/sbin/prtconf -vp | grep system-board-serial system-board-serial#: '009M2005' % /usr/sbin/eeprom | grep system-board-serial system-board-serial#=009M2005
マシンに搭載されているフレームバッファ
prtconfコマンドの-Fオプションを実行すると現在使用されているデバイスドライバが確認できる。
例えば「m64」の場合は以下のようになる。
% prtconf -F /pci@1f,0/pci@1,1/SUNW,m64B@2:m640
デバイスファイルは/dev/fbからシンボリックリンクが張られている。
% ls -l /dev/fb lrwxrwxrwx ... /dev/fb -> /devices/pci@1f,0/pci@1,1/SUNW,m64B@2:m640
また複数のカードが搭載されているような場合は/dev/fbs配下を見ればすべてのフレームバッファの情報が確認できる。
例)
% ls -l /dev/fbs lrwxrwxrwx ... pfb0 -> ../../devices/pci@1e,600000/SUNW,XVR-100@2:pfb0 lrwxrwxrwx ... pfb0a -> ../../devices/pci@1e,600000/SUNW,XVR-100@2:pfb0a lrwxrwxrwx ... pfb0b -> ../../devices/pci@1e,600000/SUNW,XVR-100@2:pfb0b lrwxrwxrwx ... pfb1 -> ../../devices/pci@1d,700000/SUNW,XVR-100@1:pfb1 lrwxrwxrwx ... pfb1a -> ../../devices/pci@1d,700000/SUNW,XVR-100@1:pfb1a lrwxrwxrwx ... pfb1b -> ../../devices/pci@1d,700000/SUNW,XVR-100@1:pfb1b
その他、代表的なフレームバッファのデバイスドライバを示す。
kfb
XVR-2500
jfb
XVR-1200、XVR-600
gfb
XVR-1000
ifb
XVR-500、Expert3D
nfb
XVR-300
pfb
XVR-100
m64
PGX, PGX64
gfxp
PGX32
ffb
Creator、Creator3D
afb
Elite3D
cgfourteen
SX
leo
ZX
tcx
TCX
cgsix
GX、GXplus、TurboGX
ハードディスクの詳細
prtvtocコマンドを使用する。
例)
# prtvtoc /dev/dsk/c1t0d0s0 * /dev/dsk/c1t0d0s0 partition map * * Dimensions: * 512 bytes/sector ← (1) 1セクタあたりのバイト数 * 424 sectors/track * 24 tracks/cylinder * 10176 sectors/cylinder * 14089 cylinders * 14087 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 0 2 00 0 139146624 139146623 / 1 3 01 139146624 4202688 143349311 2 5 00 0 143349312 143349311 | (2) セクタ数
総ディスク容量(Kbyte)は以下の計算式で求めることができる。
(2)セクタ数 x (1)1セクタあたりのバイト数 / 1024(byte)
上記の例の場合、/(ルート)の容量は「139146624セクタ x 512バイト(/セクタ) / 1024 = 約69.6Gbytes」となる。
2007/12/28更新
対応バージョン: 8,9,10
オープン中のファイルを誤って削除してしまった場合、その処理を終了させていなければ復元できる。
例えばtail -fでファイルを監視していてそのファイルを削除してしまった場合、tailを終了させていなければ以下の方法で復元することができる。
tailのPIDを確認する
% ps -ef | grep tail foo 6572 6498 0 22:52:20 pts/1 0:00 tail -f sample
/proc//fdディレクトリに移動する
% cd /proc/6572/fd
プロセスが使用しているファイルディスクリプタの数だけ数字のファイルがあるのでfileコマンドなどでテキストファイルを探す
% ls -l -r--r--r-- 0 foo user 6 12月 28日 22:42 0 c--------- 1 foo tty 24, 1 12月 28日 22:52 1 c--------- 1 foo tty 24, 1 12月 28日 22:52 2 % file * 0: ASCII テキスト 1: 文字型デバイス 特殊ファイル (24/1) 2: 文字型デバイス 特殊ファイル (24/1)
この場合は0のみがテキストファイルなので目的のファイルと断定することができる。複数ある場合はcatやmoreなどで中身を確認して判断する
当該ファイルを任意の場所にコピーする
% cp 0 /var/tmp/foo
2008/4/1更新
対応バージョン: 10
Solaris10で提供されている最小特権モデル(Least Privilege Model)という機構を用いて、通常管理者にしか実行できないsnoopコマンドを一般ユーザに実行させることができる。
まず通常の状態ではsnoopコマンドは失敗する。
% snoop snoop: /dev/iprb0: Permission denied
これに対して以下のように一般ユーザのデフォルトの特権であるbasic(*)にnet_rawaccess(ネットワーク層への直接アクセスを許可する)を加えることによりsnoopが実行できるようになる。
# usermod -K defaultpriv=basic,net_rawaccess foo
% snoop Using device /dev/iprb0 (promiscuous mode) :
ユーザの特権設定は/etc/user_attrファイルに格納される。
foo::::type=normal;defaultpriv=basic,net_rawaccess
尚、すでに該当のユーザがログインしている場合は以下のメッセージが出て次回のログインから設定が有効になる。
UX: usermod: foo is currently logged in, some changes may not take effect until next login.
(*) basic特権は以下の特権の集合を表す。
file_link_any
プロセスの実効ユーザIDと異なるユーザIDによって所有されているファイルへのハードリンクを作成できるようにする。
proc_info
シグナルを送信できるプロセス以外のプロセスの状態を調査できるようにする。調査できないプロセスは/procに表示されないため存在していないように見える。
proc_session
プロセスのセッション外でシグナルを送信したりプロセスをtraceしたりできるようにする。
proc_fork
fork1(),forkall(),vfork()をコールできるようにする。
proc_exec
execve()をコールできるようにする。
全ての特権については以下のコマンドで参照できる。
% ppriv -lv
2007/12/28更新
対応バージョン: 8,9,10
pkillコマンドを使用すると同一ユーザが実行しているプロセスを一括して終了させることができる。
% pkill -u <UID>
またpkillは任意のシグナルを送信できるので、例えば同一ユーザのプロセスをいっせいに一時停止させることもできる。
% pkill -STOP -u <UID> ... 一時停止 % pkill -CONT -u <UID> ... 再開
2007/7/29更新
対応バージョン: 8
実行例)
# pkgadd -d /tmp SUNWmmgr (sparc) 3.4,REV=2000.06.23.16.09 Copyright 1993 - 2000 VERITAS Software Corporation, All Rights Reserved /tmp/SUNWmmgr/install/request: /tmp/SUNWmmgr/install/request: cannot open pkgadd: ERROR: 要求スクリプトが異常終了しました。
上記のrequestスクリプトを実行すべきinstallアカウントが存在しないため代わりにnobodyアカウントでスクリプトを実行しようとして実行権がないためにエラーが出る。
以下のようなアカウントを作成して再度pkgaddを実行する。
install:x:0:1:install:/:/bin/true
参考までに、pkgaddを実行すると実際には以下の処理が実行される。
/usr/sadm/install/bin/pkginstall -N pkgadd /tmp SUNWmmgr
2007/11/27更新
対応バージョン: 8
pfilesを使用するとプロセスが使用しているファイルやソケットなどのリソースを調べることができる。
例)
# ps -ef|grep sshd root 320 1 0 Apr 14 ? 0:11 /usr/local/sbin/sshd # pfiles 320 320: /usr/local/sbin/sshd Current rlimit: 256 file descriptors 0: S_IFCHR mode:0666 dev:85,0 ino:4415767 uid:0 gid:3 rdev:13,2 O_RDWR|O_LARGEFILE 1: S_IFCHR mode:0666 dev:85,0 ino:4415767 uid:0 gid:3 rdev:13,2 O_RDWR|O_LARGEFILE 2: S_IFCHR mode:0666 dev:85,0 ino:4415767 uid:0 gid:3 rdev:13,2 O_RDWR|O_LARGEFILE 3: S_IFDOOR mode:0444 dev:307,0 ino:63395 uid:0 gid:0 size:0 O_RDONLY|O_LARGEFILE FD_CLOEXEC door to nscd[202] 4: S_IFSOCK mode:0666 dev:302,0 ino:5578 uid:0 gid:0 size:0 O_RDWR|O_NONBLOCK sockname: AF_INET6 :: port: 22 5: S_IFSOCK mode:0666 dev:302,0 ino:5577 uid:0 gid:0 size:0 O_RDWR|O_NONBLOCK sockname: AF_INET 0.0.0.0 port: 22
この例では3個のファイルをオープンし(0〜3)、2個のソケットをオープンしている(4〜5)ことが確認できる。
これを応用し、例えばすべてのプロセスがオープンしているポートを調べるには以下のようなスクリプトを実行すればよい。
for pid in `ps -aeo pid | grep -v "PID" | sort -n` do pfiles ${pid} | egrep "^${pid}:|port:" done
実行結果)
0: sched 1: /etc/init - 2: pageout 3: fsflush 59: /usr/lib/sysevent/syseventd 65: /usr/lib/picl/picld 116: /usr/sbin/rpcbind 151: /usr/sbin/inetd -s sockname: AF_INET6 :: port: 21 sockname: AF_INET6 :: port: 23 sockname: AF_INET 0.0.0.0 port: 42 sockname: AF_INET 0.0.0.0 port: 514 :
2007/12/28更新
対応バージョン: 8,9,10
以下のような2ファイルがあり、これを一行ずつマージしたい。
ファイル1
a b c
ファイル2
1 2 3
マージ後
a 1 b 2 c 3
これを簡単に実現するにはpasteコマンドを使用すればよい。
% paste <ファイル1> <ファイル2> a 1 b 2 c 3
結合された文字列の区切り文字はタブだが、-dオプションを付けることで任意の文字に変更可能である。
% paste -d, <ファイル1> <ファイル2> a,1 b,2 c,3 % paste -d" " <ファイル1> <ファイル2> a 1 b 2 c 3
2007/7/29更新
対応バージョン: 8
メッセージ例)
SUNW,UltraSPARC-II: WARNING: [AFT1] EDP event on CPU2 Data access at TL=0, errID 0x001cff8d.afb05759 AFSR 0x00000000.80401000<PRIV,EDP> AFAR 0x00000000.7696d560 AFSR.PSYND 0x1000(Score 95) AFSR.ETS 0x00 Fault_PC 0x7812aeb4 UDBH 0x0000 UDBH.ESYND 0x00 UDBL 0x0000 UDBL.ESYND 0x00 SUNW,UltraSPARC-II: [AFT2] errID 0x001cff8d.afb05759 PA=0x00000000.7696d560 E$tag 0x00000000.1ac00ed2 E$State: Exclusive E$parity 0x0d SUNW,UltraSPARC-II: [AFT2] E$Data (0x00): 0x00000000.00000000 SUNW,UltraSPARC-II: [AFT2] E$Data (0x10): 0x00000000.00000000 *Bad* PSYND=0x1000 SUNW,UltraSPARC-II: [AFT2] errID 0x001cff8d.afb05759 AFAR was derived from E$Tag panic[cpu2]/thread=2a10006bd20:
EDP eventはEcache Data SRAMよりデータを読み出し中にパリティエラーが検出されたことを示している。
この動作は一つのCPUモジュール内で完結する動作であるため、EDP eventが発生しているCPUモジュールの問題である。
同イベントが発生する要因として
ソフトエラー(宇宙線などの外的要因によってbit反転が発生しEDP eventが発生する)
ハードエラー(CPUのハード障害)
の2つが考えられるが、どちらが原因なのかを判断することは難しい。
Ecacheエラーが多発している場合にはまずCPUを交換し、さらに以下の手順にてEcacheのscrub周期の変更を行なうことでソフトエラーの発生頻度を下げることができる。
root権限にてecache_scan_rateの現在設定値を確認する。
# echo 'ecache_scan_rate/D' | adb -k
表示される値が100である場合、現在ecache_scan_rateには100が設定されているのでこの値を1000に設定する。
# echo 'ecache_scan_rate/W 0t1000' | adb -kw
再度以下を実行し、設定が反映されていることを確認する。
# echo 'ecache_scan_rate/D' | adb -k
システムの再起動後もこの設定が有効になるように/etc/systemに設定を行う。/etc/systemにまだ以下のパラメータがセットされていない場合にはこれら全てを設定する。既に設定されている場合には値を変更する。
set ecache_scrub_enable=1 set ecache_scan_rate=1000 set ecache_calls_a_sec=100
2007/7/29更新
対応バージョン: 10
Solaris10はデフォルトでxntpdが起動しない設定になっているので、svcadmで起動を有効化する。
# svcadm -v enable ntp svc:/network/ntp:default が有効になりました
関連資料・記事
2008/9/3更新
対応バージョン: 10
NTPで時刻合わせを行う方法としてStepモード(即時同期)とSlewモード(緩やかに同期)の2つがある。
xntpdはデフォルトではStepモードになっているのでSlewモードにするには/etc/inet/ntp.confに「slewalways yes」オプションを追加してxntpdを再起動する。
例)
server ntp1.bar.com prefer server ntp2.bar.com driftfile /var/ntp/ntp.drift slewalways yes
# svcadm restart ntp
関連資料・記事
確認方法の詳細については以下の資料を参照のこと。
関連資料・記事
2008/7/29更新
対応バージョン: 8,10
/etc/inet/ntp.confに以下の設定を追加してxntpdを起動(すでに起動していれば再起動)する。
server 172.20.61.101 prefer ← 優先サーバ server 172.20.61.100 ← 予備サーバ(任意) driftfile /var/ntp/ntp.drift ← 同期微調整用ファイル
xntpd起動/再起動
Solaris8
(起動)
# /etc/rc2.d/S74xntpd start
(再起動)
# /etc/rc2.d/S74xntpd stop # /etc/rc2.d/S74xntpd start
Solaris10
(起動)
# svcadm enable ntp
(再起動)
# svcadm restart ntp
確認方法
% ntpq -p remote refid st t when poll reach delay offset disp ====================================================================== *172.20.61.101 10.65.48.12 2 u 15 64 377 3.45 1.784 0.15 +172.20.61.100 10.65.48.12 2 u 14 64 377 2.87 1.422 0.09
確認方法の詳細については以下の資料を参照のこと。
関連資料・記事
2008/8/7更新
対応バージョン: 10 x86
Intel機の場合、OSインストール時にNICが認識されない場合がある。
例えばCompaq Evo内蔵のNICを使用するには以下の手順でiprbドライバを組み込む。
ベンダID、デバイスIDの確認
# prtconf -pv : model: 'Ethernet controller' : vendor-id: 00008086 device-id: 0000103b :
ドライバの確認
# grep 8086 /boot/solaris/devicedb/master pci8086,1039 pci8086,1039 net pci iprb.bef "Intel 82801DB Ethernet 82562ET/EZ PHY" pci8086,103d pci8086,103d net pci iprb.bef "Intel 82801DB PRO/100 VE Ethernet"
上記より、ベンダID「8086」(Intel)はiprbドライバを使用することがわかる。
ドライバエイリアスの追加
不足しているデバイスIDを追加する。
# vi /etc/driver_aliases : iprb "pci8086,1039" iprb "pci8086,103b" ← 追加 iprb "pci8086,103d" :
デバイス再構築指示
# touch /reconfigure
リブート
これでドライバの組み込みが完了するのでifconfig等でホスト情報を設定する。
2010/7/10更新
対応バージョン: 10
これはバグ6682528で、以下のいずれかの方法で回避できる。
nfsmapidを停止(無効化)する
nfsmapidはNFSv4環境下におけるサーバ/クライアント間のユーザマッピングデーモンなので、NFSv4を使用していない環境であれば停止してもよい。
以下に設定手順を示す。
# svcadm disable svc:/network/nfs/mapid
NFSMAPID_DOMAINを有効化することでnfsmapidを停止させずにメモリリークを防ぐ
デフォルトでコメントアウトされているnfsmapidのドメイン設定を有効化する。
以下に設定手順を示す。
# vi /etc/default/nfs (変更前) #NFSMAPID_DOMAIN=domain (変更後) NFSMAPID_DOMAIN=domain (*) ドメインを使用しないのであればドメイン名は任意のものでよい
設定ファイルを変更したらnfsmapidを再起動する。
# svcadm disable svc:/network/nfs/mapid # svcadm enable svc:/network/nfs/mapid # svcs -a | grep mapid online 6:48:29 svc:/network/nfs/mapid:default # svcs -lp svc:/network/nfs/mapid fmri svc:/network/nfs/mapid:default name NFS ID mapper enabled true state online next_state none state_time Sat Jan 17 06:48:29 2009 logfile /var/svc/log/network-nfs-mapid:default.log restarter svc:/system/svc/restarter:default contract_id 163 dependency require_any/error svc:/milestone/network (online) dependency require_all/restart svc:/network/rpc/bind (online) dependency require_all/refresh svc:/milestone/name-services (online) dependency require_all/error svc:/system/filesystem/minimal (online) process 3430 /usr/lib/nfs/nfsmapid
2009/3/1更新
対応バージョン: 10
NFSサーバ上でNFSクライアントからのアクセス履歴を取るには以下の手順で行う。
/etc/default/nfslogdを編集し、ログ出力デーモンnfslogdの動作を設定
設定パラメータを以下に示す。
MAX_LOGS_PRESERVE=
保存するログファイルの最大数。
デフォルトは10。
MIN_PROCESSING_SIZE=
バッファファイルのデータをログファイルに書き込む際の最小サイズ(バイト)。
デフォルトは524288(byte)。
IDLE_TIME=
バッファファイル内にデータが残っているかどうかを確認するためのスリープ時間(秒)。
デフォルトは300(秒)。
CYCLE_FREQUENCY=
ログファイルの更新間隔(時間)。
デフォルトは24(時間)。
UMASK=
ログファイルのマスク値。
デフォルトは0137。
/etc/nfs/nfslog.confを編集し、ログファイルの格納ディレクトリや出力フォーマットなどを設定
ログファイルの属性は一連の設定にタグを付けて管理する。
タグに続けて設定するパラメータを以下に示す。
defaultdir=
ログファイル、及び関連ファイルの格納ディレクトリ。
デフォルトは/var/nfs。
log=
ログファイルのファイル名。
デフォルトはnfslog。
fhtable=
ファイルハンドルからファイルやディレクトリのパス名をマップするためのテーブルファイル名
デフォルトはfhtable。
buffer=
バッファファイルのファイル名。
デフォルトはnfslog_workbuffer。
logformat=
ログファイルの出力フォーマット。
basicかextendedが指定できる。
デフォルトはbasic。
例) 2つのタグを定義(最初のglobalはデフォルトタグ)
global defaultdir=/var/nfs \ log=nfslog fhtable=fhtable buffer=nfslog_workbuffer test log=test_nfslog fhtable=test_fhtable buffer=test_nfslog_workbuffer \ logformat=extended
ここでログファイルの出力フォーマット毎の出力例を示す。
例えばNFSサーバ上の/export/home/testファイル(10Kb)をローカルにコピーした場合は以下のようになる。
・basic
Tue Mar 3 01:23:07 2009 0 jaguar 10240 /export/home/test b _ o r 60001 nfs 0 *
・extended
Tue Mar 3 01:25:42 2009 0 jaguar 10240 /export/home/test b _ read r 60001 nfs3-tcp 0 *
ログファイル中のフィールドの意味は以下のとおり。
Tue Mar 3 01:23:07 2009
アクセス時刻
0
read/writeにかかった時間(秒)
jaguar
クライアントホスト名
10240
入出力データサイズ(byte)
/export/home/test
アクセスされたファイルのパス
b
データタイプ(b:バイナリ)
_
特別なアクションが行われたかどうかを示すフラグ
o (basicの場合) read (extendedの場合)
basicの場合、転送の方向(o:out, i:in)
extendedの場合、使用システムコール(read, write, setattr, create, remove, rename, mkdir, symlink, mknod, rmdir, link)
r
アクセスモード(NFSの場合は常にr)
60001
ユーザID
nfs (basicの場合) nfs3-tcp (extendedの場合)
サービス名(extendedの場合はNFSのバージョンとプロトコルも出力)
0
認証メソッド(0は認証なし)
*
認証メソッドにより返されるユーザID(*は認証なし)
/etc/dfs/dfstabを編集し、ログを取得したいエントリにlogオプションを付加
logオプションの引数はnfslog.confで定義したタグを指定する。
例)
share -F nfs -o rw,log=global /export/home
NFSサーバ再起動
# svcadm restart network/nfs/server
通常のサーバ群に加え、nfslogdも起動する。
share確認
# share - /export/home rw,log=global ""
関連資料・記事
2009/1/25更新
対応バージョン: 10
Solaris10でNFSサーバを設定するには以下のようにする。
/etc/dfs/dfstabを記述
例)
# vi /etc/dfs/dfstab share -F nfs -o rw=192.168.0.11 -d "Solaris home" /export/home
SMF管理下のnetwork/nfs/serverを有効化
# svcadm enable -r network/nfs/server # svcs network/nfs/server STATE STIME FMRI online 11:47:23 svc:/network/nfs/server:default
関連資料・記事
share確認
# share - /export/home rw=192.168.0.11 "Solaris home"
2007/11/9更新
対応バージョン: 8
/etc/init.d/nfs.serverを編集し、nfsdの起動オプションを変更する。
(変更前)
66 /usr/lib/nfs/nfsd -a 16
(変更後)
66 /usr/lib/nfs/nfsd -p tcp 16
2008/8/8更新
対応バージョン: 10 x86
OSインストール時に設定するリモートサービスのON/OFFはインストール後にnetservicesコマンドで切り替えることができる。
リモートサービスON
設定コマンド
# netservices open
リモートホストに対して起動するサービス
in.ftpd (*1)
(21/tcp)
sshd
(22/tcp)
in.telnetd (*1)
(23/tcp)
sendmail
(25/tcp)
(587/tcp)
in.fingerd (*1)
(79/tcp)
rpcbind
(111/tcp)
in.rlogind (*1)
(513/tcp)
in.rshd (*1)
(514/tcp)
smcboot
(898/tcp) 他
nlockmgr
(4045/tcp)
Xorg
(6000/tcp)
dtspcd (*1)
(6112/tcp)
in.stlisten (*1)
(6481/tcp)
xfs (*1)
(7100/tcp)
status (*2)
(32809/tcp)
metad (*2)
(32814/tcp)
metamedd (*2)
(32815/tcp)
metamhd (*2)
(32816/tcp)
rusersd (*2)
(32817/tcp)
dtlogin
(32820/tcp)
(*1) xinetd管理下
(*2) portmapper管理下
リモートサービスOFF
設定コマンド
# netservices limited
リモートホストに対して起動するサービス
sshd
(22/tcp)
rpcbind
(111/tcp)
2007/7/29更新
対応バージョン: 9
nddコマンドを使用する方法と/etc/systemに記述する方法がある。
nddコマンドで設定した場合は永続的な設定ではないため、OSブート時に設定したい場合は/etc/rc2.d/S99qfe等を作成してこの中でnddを実行するようにする。
また/etc/systemに記述する場合はrcスクリプトを作成しなくてもよいが、qfe0〜3それぞれのNIC毎に個別の設定をすることができないので必要に応じて使い分けるとよいだろう。
例) nddコマンドを使用してqfe1を100Mbps/全二重に固定する方法
# ndd -set /dev/qfe instance 1 # ndd -set /dev/qfe adv_100fdx_cap 1 ... 100Mbps/全二重 # ndd -set /dev/qfe adv_100hdx_cap 0 ... 100Mbps/半二重 # ndd -set /dev/qfe adv_10fdx_cap 0 ... 10Mbps/全二重 # ndd -set /dev/qfe adv_10hdx_cap 0 ... 10Mbps/半二重 # ndd -set /dev/qfe adv_autoneg_cap 0 ... オートネゴシエーションの有効/無効
例) /etc/systemを使用してqfe0〜3全てを100Mbps/全二重に固定する方法
set qfe:qfe_adv_100fdx_cap=1 set qfe:qfe_adv_100hdx_cap=0 set qfe:qfe_adv_10fdx_cap=0 set qfe:qfe_adv_10hdx_cap=0 set qfe:qfe_adv_autoneg_cap=0
例) qfe1が100Mbps/全二重になっているかどうかを確認する方法
# ndd -set /dev/qfe instance 1 # ndd -get /dev/qfe link_status 1 # ndd -get /dev/qfe link_speed 1 # ndd -get /dev/qfe link_mode 1
上記パラメータはそれぞれ以下の値を持つ。
link_status
0 : Link down
1 : Link up
link_speed
0 : 10 Mbps
1 : 100 Mbps
link_mode
0 : Half Duplex(半二重)
1 : Full Duplex(全二重)
参考までに、Sunのマシンで一般的に使われるhmeを100Mbps/全二重に固定する方法を以下に示す。
/etc/systemで設定する場合
set hme:hme_adv_100fdx_cap=1 set hme:hme_adv_100hdx_cap=0 set hme:hme_adv_10fdx_cap=0 set hme:hme_adv_10hdx_cap=0 set hme:hme_adv_autoneg_cap=0
nddコマンドで設定する場合
# ndd -set /dev/hme adv_100fdx_cap 1 # ndd -set /dev/hme adv_100hdx_cap 0 # ndd -set /dev/hme adv_10fdx_cap 0 # ndd -set /dev/hme adv_10hdx_cap 0 # ndd -set /dev/hme adv_autoneg_cap 0
2008/2/8更新
対応バージョン: 8
任意のサイズのファイルを新規に作成するにはmkfileを使用する。
以下の単位とともにサイズを指定する。
b(Byte)
k(KB)
m(MB)
g(GB)
例)
% mkfile 1k test % ls -l test -rw------- 1 foo staff 1024 2 8 01:16 test
また従来からあるddコマンドを使用してもよい。
% dd if=/dev/random of=file bs=1024 count=1
関連資料・記事
2007/9/18更新
対応バージョン: 8
メモリモジュール「U0404」で起きているエラーである。以下の判断基準にしたがってメモリ交換の要否を判断する。
Intermittent
パリティエラーの通知を調べ、存在しなければ無視してよい。
(*) パリティエラー通知の機能がない機器の場合も無視してよい。
Persistent
同じメモリモジュール上で24時間以内に3回以上発生する場合は当該モジュールを交換する必要がある。
Sticky
最初の発生で交換する必要がある。
以下、メッセージの一例を示す。
例1) Intermittentのみのエラーなので交換不要
unix: [AFT0] Multiple Softerrors: unix: 256 Intermittent, 0 Persistent, and 0 Sticky Softerrors accumulated unix: from Memory Module U0404
例2) Persistentレベルのエラーが出ているので、これが複数回発生するようなら交換が必要
unix: Multiple Softerrors: unix: Seen 5 Intermittent and 251 Corrected Softerrors unix: from SIMM 1901 unix: CONSIDER REPLACING THE SIMM. unix: Softerror: Persistent ECC Memory Error unix: Corrected SIMM 1901 unix: ECC Data Bit 60 was corrected unix: WARNING: correctable error from pci4 (upa mid 6) during dvma read transaction. unix: AFSR=409e0000.46800000 AFAR=00000000.8379d400, unix: double word offset=2, SIMM 1901 id 6. unix: syndrome bits 9e
2008/2/15更新
対応バージョン: 8
manのキーワード検索にはwindexデータベースが使用される。
同データベースは最初は作成されていないので以下のようにして作成する。
# catman -w
これにより同データベースが以下の場所に格納される。MANPATH環境変数が設定されていればそのパスに格納される。
/usr/share/man/windex /usr/share/man/<LANG>/windex (LANG環境変数が設定されている場合のみ)
キーワード検索には以下のいずれかの方法が利用可能である。
man -k <キーワード> man -f <ファイル名> apropos <キーワード> (man -kと同じ) whatis <キーワード> (man -fと同じ)
例)
% man -k pwd pwd pwd (1) - 作業中のディレクトリの出力 lckpwdf lckpwdf (3c) - manipulate shadow password database lock file pwd pwd (1) - return working directory name pwdx proc (1) - proc tools ulckpwdf lckpwdf (3c) - manipulate shadow password database lock file % man -f chdir chdir cd (1) - 現在の作業用ディレクトリの変更 chdir cd (1) - change working directory chdir chdir (2) - change working directory
2007/7/29更新
対応バージョン: 8,9
アカウント毎に設定する場合は$HOME/.solregis/disableというファイルを作成する(ファイルは空でよい)。
システムワイドで設定する場合は/etc/default/solregisというファイルを作成し、ファイル中に「DISABLE=1」と記述する。
2007/7/29更新
対応バージョン: 8
セキュリティ上、通常rootによるログインはコンソール以外からはできないようになっている。
この設定を行っているのは/etc/default/login、および/etc/default/suの以下の行である。
CONSOLE=
この行の右側にルートとしてログインを許可するデバイス(端末)名を表記することで特定の端末からログイン可能になる。
例えば、
CONSOLE=/dev/ttya
とすれば、ttyaからのみルートでログインできる。
どこからでもルートとしてログインできるようにするには、このCONSOLE行を削除(またはコメントアウト)すればよい。
ただし、ルートのパスワードが盗まれてしまったらどこからでもログインできてしまうので注意が必要である。
2008/7/14更新
対応バージョン: 10
Solaris10では従来から提供されている/usr/lib/newsyslogというログローテート用スクリプトに変えてlogadmというツールを使用する。
このツールをオプションなしで実行すれば設定ファイルである/etc/logadm.confを読み込んでログのローテートを行い、オプション付で実行すれば同設定ファイルに対してローテートの設定が行われる。
まずオプションなしの場合は任意の時点で手動実行可能であり、rootのcronでは毎日3:10に実行されるように設定されている。
# crontab -l : 10 3 * * * /usr/sbin/logadm :
次にオプション付の場合はログローテートの細かい指定とともに実行し、設定が/etc/logadm.confに書き込まれる。
例えば/var/log/foo.logというログファイルを100KBに達する毎にローテートし、履歴を5世代分保存するには以下のようにする。ローテート後にsyslogデーモンにHUPシグナルを送らないと新しいログファイルが使用されないので注意が必要である。
# logadm -w /var/log/foo.log -s 100k -C 5 -a 'kill -HUP `cat /var/run/syslog.pid`'
履歴ファイルにはfoo.log.0, foo.log.1, ...という形で後ろに数字が付加されていく。
-rオプションとともにファイル名を指定するとそのファイルに対する設定が/etc/logadm.confから削除される。
# logadm -r /var/log/foo.log
主なオプションは以下のとおり。
-w <ファイル>
ローテート対象ファイル
-s <サイズ>
ローテート対象となるファイルサイズ(b,k,m,g等の単位で指定)
-p <期間>
ローテートするタイミング(h,d,w,m,y等の単位で指定)
例)
-p 1h (1時間毎) -p 1d (1日毎) -p 1w (1週間毎) -p 1m (1ヶ月毎) -p 1y (1年毎)
-C <保有履歴>
履歴管理する世代数
-a <処理>
ローテート後に実行する処理
例) syslogデーモンにHUPシグナルを送る
-a 'kill -HUP `cat /var/run/syslog.pid`'
-b <処理>
ローテート前に実行する処理
-R <処理>
履歴ファイルに対する処理
-E <処理>
履歴対象から外れ、削除対象となったファイルに対する処理
例) 対象ファイルを圧縮して別ディレクトリに移動する
-E 'gzip $file ; mv $file.gz /var/log/old'
(*) $fileには対象ファイル名が入る
関連資料・記事
2007/7/29更新
対応バージョン: 8
/var/adm/messagesと/var/log/syslogの2ファイルについては/usr/lib/newsyslogというローテート用スクリプトが提供されており、rootのcronで毎日3:10に実行されている。
それ以外のファイルについては上記スクリプトを参考に自作するか、syslog-ngなどのツールを導入して対応する。
関連資料・記事
2008/11/7更新
対応バージョン: 10
既存のファイルシステム上に別のファイルシステムを作成するにはlofiadmを使用して通常のファイルをブロックデバイスとして割り当てる。
ここでは256MBのファイルをUFSとして使用する手順を示す。
作成手順
まず通常のファイルを作成する。
# mkfile 256m /var/tmp/test
このファイルをブロックデバイスとして割り当てる。
# lofiadm -a /var/tmp/test /dev/lofi/1 ← 割り当てられたデバイス # lofiadm Block Device File /dev/lofi/1 /var/tmp/test
割り当てられたブロックデバイスに対してファイルシステムを作成する。ローデバイスを指定するのでデバイス名の先頭にはrを付ける。
# newfs /dev/rlofi/1
ファイルシステムが作成されたら通常のmountコマンドでマウントする。
# mount /dev/lofi/1 /mnt # df -k /mnt ファイルシステム kbytes 使用済み 使用可能 容量 マウント先 /dev/lofi/1 245603 1041 220002 1% /mnt
削除手順
ファイルシステムを削除するにはまずアンマウントし、lofiadmを-dオプション付で実行してブロックデバイスの割り当てを解除してからファイルを削除する。
# umount /mnt # lofiadm -d /dev/lofi/1 # rm /var/tmp/test
関連資料・記事
2008/10/20更新
対応バージョン: 10
ISOイメージをマウントして中身を参照するにはlofiadmを使用する。
マウント手順
まずISOファイルをブロックデバイスとして割り当てる。
# lofiadm -a /tmp/foo.iso /dev/lofi/1 ← 割り当てられたデバイス # lofiadm Block Device File /dev/lofi/1 /tmp/foo.iso
このデバイスを通常のmountコマンドでマウントする。
# mount -F hsfs -o ro /dev/lofi/1 /mnt # df -k /mnt ファイルシステム kbytes 使用済み 使用可能 容量 マウント先 /dev/lofi/1 350 350 0 100% /mnt
アンマウント手順
マウントを解除するにはまずアンマウントし、lofiadmを-dオプション付で実行してブロックデバイスの割り当てを解除する。
# umount /mnt # lofiadm -d /dev/lofi/1
関連資料・記事
2007/7/29更新
対応バージョン: 9
SolarisをLDAPクライアントとして使用するには以下の設定を行う。
ネームサービスの設定
/etc/nsswitch.confを編集し、LDAPクライアントとして利用したいサービスに「ldap」を追加する。
例えばユーザ認証だけにLDAPを使用したい場合は以下のようにする。
(変更前)
passwd: files group: files
(変更後)
passwd: files ldap group: files ldap
PAMの設定
/etc/pam.confを編集し、LDAPクライアントとして利用したいサービスにpam_ldapモジュールを追加する。
例えばtelnetサービスに対してまず通常のUNIX認証を行い、うまくいった場合はそこで認証終了、失敗した場合はLDAPによる認証を行うという設定は以下のようにする。
(変更前)
telnet auth required /usr/lib/security/$ISA/pam_unix.so.1
(変更後)
telnet auth sufficient /usr/lib/security/$ISA/pam_unix.so.1 telnet auth required /usr/lib/security/$ISA/pam_ldap.so.1 use_first_pass
LDAPサーバとの仲立ちをするキャッシュサーバの設定
まず、LDAPサーバにアクセスする際のBaseDNのデフォルト定義を/etc/defaultdomainに設定する。
例えばBaseDNが「o=foo.bar.com」なら以下のように設定する。
foo.bar.com
次にキャッシュサーバの設定ファイルを/var/ldap配下に用意する。
・ldap_client_file
LDAPサーバのホスト、ポート、BaseDN、その他オプション等を指定する。
例えば以下のように設定する。
NS_LDAP_FILE_VERSION= 1.0 NS_LDAP_SERVERS= 172.20.61.142:389 NS_LDAP_SEARCH_BASEDN= o=foo.bar.com NS_LDAP_AUTH= NS_LDAP_AUTH_NONE NS_LDAP_TRANSPORT_SEC= NS_LDAP_SEC_NONE NS_LDAP_SEARCH_REF= NS_LDAP_FOLLOWREF NS_LDAP_DOMAIN= NS_LDAP_EXP= 1034822380 NS_LDAP_SEARCH_SCOPE= NS_LDAP_SCOPE_ONELEVEL NS_LDAP_SEARCH_TIME= 30 NS_LDAP_BIND_TIME= 30
・ldap_client_cred
ldap_client_fileファイルのNS_LDAP_AUTHをNS_LDAP_AUTH_SIMPLEにした場合に限り必要になるファイルで、LDAPサーバにバインドするためのユーザとパスワードを指定する。
例えば以下のように設定する。
NS_LDAP_BINDDN= cn=admin,o=foo.bar.com NS_LDAP_BINDPASSWD= {NS1}EnCrYpTeDPaSsWoRdHeRe
LDAPキャッシュサーバ起動
以下のinitスクリプトを実行してLDAPキャッシュサーバを起動する。
# /etc/rc2.d/S71ldap.client start
→ ldap_cachemgrというデーモンが起動する。
ログは/var/ldap/cachemgr.logに出力される。
2007/7/29更新
対応バージョン: 9
既存のJ2SDKパッケージを削除し、別のバージョンのJ2SDKをインストールする。
例) J2SDK-1.4.0_00をJ2SDK-1.4.2_03に置き換える場合
用意するもの
j2sdk-1_4_2_03-solaris-sparc.tar.Z (32bit) ... 必須
j2sdk-1_4_2_03-solaris-sparcv9.tar.Z (64bit) ... 任意 (OSを64bitモードで使用する場合に必要)
手順
既存のJ2SDKを削除
# java -version Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_00-b05) Java HotSpot(TM) Client VM (build 1.4.0_00-b05, mixed mode) # pkginfo | grep J2SDK system SUNWj3dev J2SDK 1.4 development tools system SUNWj3dmo J2SDK 1.4 demo programs system SUNWj3jmp J2SDK 1.4 Japanese man pages system SUNWj3man J2SDK 1.4 man pages system SUNWj3rt J2SDK 1.4 runtime environment # pkgrm SUNWj3dev SUNWj3dmo SUNWj3jmp SUNWj3man SUNWj3rt
別バージョンのJ2SDKをインストール
# gtar zxvf j2sdk-1_4_2_03-solaris-sparc.tar.Z # pkgadd -d . 次のパッケージを利用できます: 1 SUNWj3cfg SUNWj3rt post configuration (sparc) 1.4.2,REV=2003.11.18.15.36 2 SUNWj3dev J2SDK 1.4 development tools (sparc) 1.4.2,REV=2003.11.18.15.36 3 SUNWj3dmo J2SDK 1.4 demo programs (sparc) 1.4.2,REV=2003.11.18.15.36 4 SUNWj3jmp J2SDK 1.4 Japanese man pages (sparc) 1.4.2,REV=2003.11.18.15.36 5 SUNWj3man J2SDK 1.4 man pages (sparc) 1.4.2,REV=2003.11.18.15.36 6 SUNWj3rt J2SDK 1.4 runtime environment (sparc) 1.4.2,REV=2003.11.18.15.36 パッケージ (複数可) を選択してください (すべてのパッケージを 処理するには 'all' を入力してください)。 (default: all) [?,??,q]: ■ ← リターン # gtar zxvf j2sdk-1_4_2_03-solaris-sparcv9.tar.Z # pkgadd -d . 次のパッケージを利用できます: 1 SUNWj3dmx J2SDK 1.4 demo programs (64-bit) (sparc) 1.4.2,REV=2003.11.18.14.31 2 SUNWj3dvx J2SDK 1.4 development tools (64-bit) (sparc) 1.4.2,REV=2003.11.18.14.31 3 SUNWj3rtx J2SDK 1.4 runtime environment (64-bit) (sparc) 1.4.2,REV=2003.11.18.14.31 パッケージ (複数可) を選択してください (すべてのパッケージを 処理するには 'all' を入力してください)。 (default: all) [?,??,q]: ■ ← リターン
確認
# java -version java version "1.4.2_03" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02) Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode) # pkginfo | grep J2SDK system SUNWj3dev J2SDK 1.4 development tools system SUNWj3dmo J2SDK 1.4 demo programs system SUNWj3dmx J2SDK 1.4 demo programs (64-bit) system SUNWj3dvx J2SDK 1.4 development tools (64-bit) system SUNWj3jmp J2SDK 1.4 Japanese man pages system SUNWj3man J2SDK 1.4 man pages system SUNWj3rt J2SDK 1.4 runtime environment system SUNWj3rtx J2SDK 1.4 runtime environment (64-bit)
2007/7/29更新
対応バージョン: 9
IPエイリアスの設定を行うにはifconfigでネットワークインタフェースに:1、:2、:3...を指定する。
例) qfe1にIPエイリアスを定義し、インタフェースはqfe1:1とする。
# ifconfig qfe1:1 plumb # ifconfig qfe1:1 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx up
IPエイリアスを削除する場合は該当のインタフェースにunplumbを指定する。
# ifconfig qfe1:1 unplumb
例) IPエイリアスの永続設定(ブート時に自動設定)
# echo "xxx.xxx.xxx.xxx <hostname>" >> /etc/hosts # cat <hostname> > /etc/hostname.qfe1:1
関連資料・記事
2007/7/29更新
対応バージョン: 8
iconvを使用する。
% iconv -f <変換元文字コード> -t <変換後文字コード> <対象ファイル>
代表的な文字コードを以下に示す。それ以外にサポートされている文字コードは「man -s 5 iconv_ja」で確認できる。
UTF-8
UTF-8
eucJP
日本語EUC
SJIS
Shift-JIS
ISO-2022-JP
ISO-2022-JP(JIS)
例) UTF-8のデータをSJISに変換する
% iconv -f UTF-8 -t SJIS u8.txt > sj.txt
2008/6/27更新
対応バージョン: 10
RFC952で定義されRFC1123で修正されたホスト名の標準命名規則に従い、以下の文字で構成する。
英字(a〜z,A〜Z)
数字(0〜9)
ハイフン(-)
ピリオド(.)
(*) ただしドメイン名の区切りでのみ使用可
その他、以下の制約がある。
24文字以内
大文字/小文字は区別されない
最初の文字は英字または(RFC1123での修正に従い)数字のみ使用可
最後の文字はハイフン(-)/ピリオド(.)以外の必要がある
数字のみで構成されたホスト名は使用不可
2008/4/4更新
対応バージョン: 10
以下の修正を行いリブートする。
ホスト情報
ファイル中のホスト名を変更する。
/etc/inet/hosts /etc/inet/ipnodes (*) /etc/nodename /etc/hostname.<interface>
(*) OSのリビジョンによってはhostsへのシンボリックリンクになっている場合があり、その場合は修正不要。
Solaris8では以下のファイルも修正対象であるが、Solaris10では修正不要(ファイル自体は存在する)。
/etc/net/ticlts/hosts /etc/net/ticots/hosts /etc/net/ticotsord/hosts
クラッシュダンプ保存ディレクトリ
ディレクトリ名を変更し、dumpadmコマンドで出力先の設定を変更する。
# mv /var/crash/<変更前ホスト名> /var/crash/<変更後ホスト名> # dumpadm -s /var/crash/<変更後ホスト名> ダンプの内容: カーネル ページ ダンプデバイス: /dev/dsk/c0d0s1 (swap) セーブコアディレクトリ: /var/crash/<変更後ホスト名> 有効なセーブコア: はい
関連資料・記事
2008/4/4更新
対応バージョン: 8
以下の修正を行いリブートする。
ホスト情報
ファイル中のホスト名を変更する。
/etc/inet/hosts /etc/nodename /etc/hostname.<interface> /etc/net/ticlts/hosts /etc/net/ticots/hosts /etc/net/ticotsord/hosts
クラッシュダンプ保存ディレクトリ
ディレクトリ名を変更し、dumpadmコマンドで出力先の設定を変更する。
# mv /var/crash/<変更前ホスト名> /var/crash/<変更後ホスト名> # dumpadm -s /var/crash/<変更後ホスト名> Dump content: kernel pages Dump device: /dev/dsk/c0t0d0s1 (dedicated) Savecore directory: /var/crash/<変更後ホスト名> Savecore enabled: yes
関連資料・記事
2008/4/8更新
対応バージョン: 10 x86
formatコマンドはデフォルトでは内蔵HDDしか表示しないので、-e(エキスパートモード)オプション付でformatを実行する。
例) 内蔵HDD x 2、及びUSBストレージ x 1の場合
# format -e AVAILABLE DISK SELECTIONS: 0. c0d0 <DEFAULT cyl 4862 alt 2 hd 255 sec 63> /pci@0,0/pci-ide@1f,1/ide@0/cmdk@0,0 1. c1d0 <DEFAULT cyl 2431 alt 2 hd 255 sec 63> /pci@0,0/pci-ide@1f,1/ide@1/cmdk@0,0 2. c3t0d0 <DEFAULT cyl 4862 alt 2 hd 255 sec 63> /pci@0,0/pcie11,b8@1d,7/storage@2/disk@0,0
2008/4/8更新
対応バージョン: 10 x86
fdiskでUSBハードディスクを設定しようとするとエラーが出る。
# fdisk /dev/rdsk/c3t0d0p0 fdisk: Cannot open device /dev/rdsk/c3t0d0p0.
この場合、当該デバイスがvold制御下にある可能性があるので以下のいずれかの方法でデバイスを設定する。
voldのデバイス名を使用する
voldのデバイス名を使用する場合、まずrmformatにてリムーバブルメディアの状態を調べる。
# rmformat デバイスを探しています... 1. Volmgt Node: /vol/dev/aliases/rmdisk0 Logical Node: /dev/rdsk/c3t0d0p0 Physical Node: /pci@0,0/pcie11,b8@1d,7/storage@2/disk@0,0 Connected Device: ST340016 A Device Type: Removable
この中の/vol〜がvoldで使用するデバイス名なのでこれをfdiskで指定する。
# fdisk /vol/dev/aliases/rmdisk0
voldを停止する
関連資料・記事
vold制御下からUSBデバイスを外す
関連資料・記事
2007/7/29更新
対応バージョン: 8
messagesには以下のようなログが出ているが、Error LevelがRetryable(リトライして成功)であり、継続してエラーが出なければしばらく様子を見て問題ない。
Error for Command: read Error Level: Retryable scsi: Requested Block: 1040601 Error Block: 1040603 scsi: Vendor: FUJITSU Serial Number: 0204X18518 scsi: Sense Key: Media Error scsi: ASC: 0x11 (<vendor unique code 0x11>), ASCQ: 0x1, FRU: 0x0
2008/9/28更新
対応バージョン: 8
2台の内蔵HDDの片方のHDDで運用している環境において、未使用のHDDでOSを起動できるようにするには以下の作業を行う。
未使用HDDのスライスを使用中のものと同一にする
# format :
現用HDDの内容を未使用HDDにコピーする
必要なスライス分、以下を実施する。
# mount /dev/rdsk/c0t1d0s0 /mnt ← コピー先スライスをマウント # cd /mnt # ufsdump af - /dev/rdsk/c0t0d0s0 | ufsrestore rf - # umount /mnt
未使用HDDのスライス0にブートブロックをインストールする
# cd /usr/platform/sun4u/lib/fs/ufs # installboot ./bootblk /dev/rdsk/c0t1d0s0
2008/3/15更新
対応バージョン: 10 x86
Solaris10 x86にディスクを増設するには以下の手順で行う。
デバイス認識
まずデバイスをOSから認識させるために、/にreconfigureという空ファイルを作成してリブートする。
# touch /reconfigure
これにより、次回起動時にデバイスノードが再構成される。
/reconfigureは自動的に削除される。
パーティション設定
次にfdiskコマンドにてパーティションの設定を行う。
ここでは以前FreeBSD用に使用していた20GBのディスク「c1d0」を使用するものとし、以下の内容で設定する。
パーティションは1つ(全ディスクを使用)
スライスは1つ
# fdisk /dev/rdsk/c1d0p0 Total disk size is 2434 cylinders Cylinder size is 16065 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Active BSD OS 0 2434 2435 100 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 3 ← まず既存のパーティションを削除 Specify the partition number to delete (or enter 0 to exit): ← 1 programs in this partition inaccessible (type "y" or "n"). ← y : SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 1 ← パーティション作成 1=SOLARIS2 2=UNIX 3=PCIXOS 4=Other 5=DOS12 6=DOS16 7=DOSEXT 8=DOSBIG 9=DOS16LBA A=x86 Boot B=Diagnostic C=FAT32 D=FAT32LBA E=DOSEXTLBA F=EFI 0=Exit? 1 ← Solarisパーティション Specify the percentage of disk to use for this partition (or type "c" to specify the size in cylinders). 100 ← ディスク全体を使用(100%) Should this become the active partition? If yes, it will be activated each time the computer is reset or turned on. Please type "y" or "n". ← y : Total disk size is 2434 cylinders Cylinder size is 16065 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Active Solaris2 1 2433 2433 100 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 5 ← 変更を書き込んで終了
関連資料・記事
スライス設定
パーティションが作成できたらformatコマンドにてスライスを作成する。
# format AVAILABLE DISK SELECTIONS: 0. c0d0 <DEFAULT cyl 4862 alt 2 hd 255 sec 63> /pci@0,0/pci-ide@1f,1/ide@0/cmdk@0,0 1. c1d0 <DEFAULT cyl 2431 alt 2 hd 255 sec 63> /pci@0,0/pci-ide@1f,1/ide@1/cmdk@0,0 Specify disk (enter its number): 1 ← 増設ディスク FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk fdisk - run the fdisk program repair - repair a defective sector show - translate a disk address label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format> p ← パーティションテーブル設定 PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk !<cmd> - execute <cmd>, then return quit partition> p ← 現在設定を表示 Current partition table (original): Total disk cylinders available: 2431 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 0 (0/0/0) 0 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 2430 18.62GB (2431/0/0) 39054015 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 alternates wm 1 - 2 15.69MB (2/0/0) 32130 partition> 0 ← パーティション0の設定 Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 0 (0/0/0) 0 Enter partition id tag[unassigned]: ← リターン(タグ不要) Enter partition permission flags[wm]: ← リターン(フラグはデフォルトでよい) Enter new starting cyl[0]: 3← 開始シリンダ(0〜2はシステムで使用) Enter partition size[0b, 0c, 3e, 0.00mb, 0.00gb]: 2428c ← 最初の3シリンダを除いたディスク全体 partition> p ← 設定結果を表示 Current partition table (unnamed): Total disk cylinders available: 2431 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 unassigned wm 3 - 2430 18.60GB (2428/0/0) 39005820 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 2430 18.62GB (2431/0/0) 39054015 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 alternates wm 1 - 2 15.69MB (2/0/0) 32130 partition> name ← ディスクに名前を付与 Enter table name (remember quotes): ext1 ← 任意の名前 partition> label ← ラベリング Ready to label disk, continue? ← y partition> q format> q
ファイルシステム作成
パーティション/スライス設定が終ったらファイルシステムを作成する。
# newfs /dev/rdsk/c1d0s0 newfs: 新しいファイルシステム /dev/rdsk/c1d0s0 を作成しますか: (y/n)? ← y :
マウント
最後に実際にマウントしてみる。
# mkdir /ext1 # mount /dev/dsk/c1d0s0 /ext1 # df -k /ext1 ファイルシステム kbytes 使用済み 使用可能 容量 マウント先 /dev/dsk/c1d0s0 19207519 19065 18996379 1% /ext1
ブート時にマウントされるようにするには/etc/vfstabに以下のように記述しておく。
/dev/dsk/c1d0s0 /dev/rdsk/c1d0s0 /ext1 ufs 2 yes -
2008/2/8更新
対応バージョン: 8
2GBを越えるファイル、いわゆる「largefile」をgzipで圧縮しようとした。
Solaris8付属のgzipはバージョン1.2.4だが、gzipはバージョン1.3以降でこのlargefileに対応している。
パッチ112668-02以降を適用することでgzipのバージョンを上げることができる(2008/2/8時点の最新パッチは112668-04)。
2007/7/29更新
対応バージョン: 9
configureスクリプトによってMakefileを作成している場合、想定するコンパイラがgccではなくてSun純正のコンパイラになるのでgccでは使用できないオプションが付く。
従ってMakefileから-KPICオプションを外せばよい。
同様の理由でコンパイル時に「language depend not recognized」というエラーが出る場合はMakefileから-xO3 -xdependオプションを外せばよい。
2008/10/14更新
対応バージョン: 10
ファイルを使用しているプロセスを特定するにはfuserコマンドを使用する。
例えばcronジョブを実行すると/tmpにcroutXXXXXXXXXという一時ファイルが作成されるが、このファイルを使用しているプロセスを特定するには以下のようにする。
# ls -l /tmp/crout* -rw------- 1 foo user 0 10月 14日 14:39 croutPBAtqaWBa # fuser /tmp/croutPBAtqaWBa /tmp/croutPBAtqaWBa: 12025o 12024o -> PID=12025,12024が使用している # ps -ef | egrep '(12025|12024)' foo 12024 222 0 15:01:00 ? 0:00 sh -c /tmp/foo.sh foo 12025 12024 0 15:01:00 ? 0:00 /bin/sh /tmp/foo.sh
2008/7/16更新
対応バージョン: 8
一般ユーザでdos2unixを実行すると以下のようなエラーが出る。変換そのものは行われている。
% dos2unix foo > foo.out could not open /dev/kbd to get keyboard type US keyboard assumed could not get keyboard type US keyboard assumed
これは/dev/kbdの権限が一般ユーザに付与されていないために起こる。
% ls -l /dev/kbd lrwxrwxrwx 1 root root ... /dev/kbd -> ../devices/pseudo/conskbd@0:kbd % ls -l /devices/pseudo/conskbd@0:kbd crw------- 1 root other ... /devices/pseudo/conskbd@0:kbd
エラーは出るものの変換そのものには影響ないが、気になるようならキーボード種別を明示的に指定すればよい。
キーボード種別は-437(US)や-850(複数言語)を指定する。
% dos2unix -437 foo > foo.out
% dos2unix -850 foo > foo.out
2008/7/31更新
対応バージョン: 10
デバイスドライバの一覧は/etc/name_to_majorにデバイスファイルのメジャー番号とともに格納されている。
% more /etc/name_to_major cn 0 rootnex 1 pseudo 2 :
/dev配下のデバイスファイルがどのドライバを使用しているかは各デバイスファイルのメジャー番号とこのname_to_majorファイルを付き合わせればよい。
例えば内臓HDDのc0d0s0のデバイスファイルはメジャー番号が102なのでcmdkドライバ(common disk driver)を使用していることが分かる。
% ls -lL /dev/dsk/c0d0s0 brw-r----- 1 root sys 102, 0 6月 9日 20:44 /dev/dsk/c0d0s0 % grep 102 /etc/name_to_major cmdk 102
参考)
/dev/kmem
メジャー番号13(mm) : physical or virtual memory
/dev/ptyp0
メジャー番号25(ptc) : pseudo-terminal driver
/dev/diskette0
メジャー番号36(fd) : drivers for floppy disks and floppy disk controllers
/dev/random
メジャー番号149(random) : Strong random number generator device
/dev/crypto
メジャー番号153(crypto) : kernel-level cryptographic mechanisms
/dev/dtrace
メジャー番号155(dtrace) : DTrace dynamic tracing facility
2007/7/29更新
対応バージョン: 8
cron設定は
crontab -r <ユーザ名>
で削除する必要がある。
もしこの作業をせずにcron設定ファイルを削除してしまった場合は、いったん
crontab -e <ユーザ名>
にてダミーの設定を行ってから再度「crontab -r」にて定義を削除する。
2008/5/24更新
対応バージョン: 8
psradmを使用して特定のCPU、あるいはすべてのCPUを切り離したり(offline)有効にしたり(online)することが可能である。
ただしこの設定はリブート後には無効になり、全てのCPUがonlineになる。
例) 2CPUのシステムで2番目のCPUをofflineにする場合
# psrinfo 0 on-line since 04/14/07 14:16:18 1 on-line since 04/14/07 14:16:16 # psradm -f 1 # psrinfo 0 on-line since 04/14/07 14:16:18 1 off-line since 05/24/08 00:03:27 ← offlineになる
例) 上記のCPUをonlineにする場合 (*)
# psradm -n 1 # psrinfo 0 on-line since 04/14/07 14:16:18 1 on-line since 05/24/08 00:04:25 ← onlineになる
(*) 「psradm -n -a」とすれば全てのCPUがonlineになるのでそれでもよい。
2008/4/14更新
対応バージョン: 10
プロセスが異常終了した時のcoreファイルはデフォルトではカレントディレクトリに「core」というファイル名で作成される。
この設定はcoreadmコマンドを引数なしで実行すると確認できる。
# coreadm グローバルコアのファイルパターン: グローバルコアファイルの内容: default init コアのファイルパターン: core ← coreファイルのファイル名 init コアファイルの内容: default グローバルコアダンプ: disabled プロセス単位コアダンプ: enabled グローバル setid コアダンプ: disabled プロセス単位 setid コアダンプ: disabled グローバルコアダンプのロギング: disabled
この設定ではcoreファイルが何度も作られると古いファイルが上書きされたりどのプロセスのcoreファイルが残っているのか分かりにくくなるので、以下のようにしてファイル名が一意のなるようにすることができる。
例) ファイル名を「core.<プログラム名>.
# coreadm -i core.%f.%p # coreadm : init コアのファイルパターン: core.%f.%p :
また、coreファイルの作成を抑止するには以下のようにする。
# coreadm -d process # coreadm グローバルコアのファイルパターン: グローバルコアファイルの内容: default init コアのファイルパターン: core init コアファイルの内容: default グローバルコアダンプ: disabled プロセス単位コアダンプ: disabled ← coreファイルの作成抑止 グローバル setid コアダンプ: disabled プロセス単位 setid コアダンプ: disabled グローバルコアダンプのロギング: disabled
2007/7/29更新
対応バージョン: 8
セキュリティ向上のため標準ではrootがオーナーのスクリプトはsetuid状態で実行できない。
ただし以下のようにスクリプトの最初にオプションを付けることによってこの制限を外すことができる。
Bourneシェルの場合
#!/bin/sh -p
Cシェルの場合
#!/bin/csh -b
2007/7/29更新
対応バージョン: 8,10
/etc/default/initファイル中で設定する。
TZ=Japan CMASK=022 LANG=ja_JP.UTF-8
LANGの値を目的のロケール(ja, ja_JP.PCK, ja_JP.UTF-8等)に変更してリブートする。
2007/7/29更新
対応バージョン: 9
automounterが動作しているのが原因。
automounterはNFSサイト用に設計されており、マウントが必要なファイルシステムのリストの保守が容易になる。
automounterはデフォルト/homeを管理し、その事実上のNFSサーバとして動作するため、automounterが動作している状態では/homeへのアクセスはできなくなる。
そのため通常のディレクトリのようには扱えない。
これは通常どのマシンでも全員のホームディレクトリが/home/
automounterを使い続けたい場合には、/etc/auto_masterを編集して/homeで始まる行をコメントアウトし、automountdにマップをリロードさせるautomountコマンドを起動する。
スタンドアローン、あるいは小規模なネットワークであるということでこの機能をオフにするには/etc/init.d/autofsstopを起動して、automountdをストップさせることができる。
また、ファイル/etc/rc2.d/SXXautofsの名称を/etc/rc2.d/_SXXautofs等(先頭がSでない)ファイル名に変更することでブート時にautomountdがスタートしてしまうのを避けることができる。
もしまたautomounterを使いたくなった場合にはただファイル名を元に戻すだけでよい。
関連資料・記事
2007/7/29更新
対応バージョン: 9
以下の作業により利用可能になる。
/etc/auto_masterに以下の行を追加
/- auto_direct
/etc/auto_directに各マウントポイントを設定
/foo1/bar1 <オプション> nfs://<ホスト>/foo1/bar1 ← NFS URLを使用した指定方法 /foo2/bar2 <オプション> <ホスト>:/foo2/bar2 ← 従来の指定方法
automountdを再起動
# /etc/init.d/autofs stop # /etc/init.d/autofs start
2007/7/29更新
対応バージョン: 9
Solaris標準機能であるオートマウントを使用する。
まず/etc/auto_masterに
/home /etc/auto_home -rw,secure
と記述されていた場合(デフォルト)は/etc/auto_homeに以下の記述を追加してautomountdにHUPシグナルを送って設定を有効にする。
#+auto_home ← コメントアウト * -rw localhost:/export/home/& ← 追加
尚、「*」と「&」はそれぞれ以下の意味である。
*
任意のディレクトリ名に置き換えられる。
&
自行の第一オクテットで指定された文字列に置き換えられる。
つまり、/export/home/fooと/export/home/barがあった場合に/etc/auto_homeにこのように記述しておけば、実際には以下のように記述したのと同じ動作をする。
foo -rw localhost:/export/home/foo bar -rw localhost:/export/home/bar
2008/4/26更新
対応バージョン: 10
以下の手順で設定する。
必要なパッケージがインストールされていることを確認
以下のパッケージがインストールされていなければ以降の設定に先立ってインストールする。
# pkginfo : system SUNWaccr System Accounting, (Root) system SUNWaccu System Accounting, (Usr)
initスクリプト配置
# ln /etc/init.d/acct /etc/rc2.d/S22acct # ln /etc/init.d/acct /etc/rc0.d/K22acct
アカウンティング開始
# /etc/rc2.d/S22acct start Starting process accounting
アカウンティング停止
# /etc/rc0.d/K22acct stop Stopping process accounting
アカウンティングを停止しても以下のファイルは削除されないので必要に応じて削除する。
/var/adm/pacct
アカウンティング情報
/var/adm/acct/{fiscal,nite,sum}/*
アカウンティング情報をもとに統計情報などを納めたファイル
また、次回リブート時にアカウンティングを開始させたくなければ/etc/rc?.d配下のinitスクリプトを削除する(/etc/init.d配下のファイルは残しておく)。
# rm /etc/rc2.d/S22acct # rm /etc/rc0.d/K22acct
アカウンティング情報管理
アカウンティングファイルは/var/adm/pacctとして作成される。
このファイルはacctcom、lastcommコマンドを使用して履歴情報として表示できる。
# acctcom COMMAND START END REAL CPU MEAN NAME USER TTYNAME TIME TIME (SECS) (SECS) SIZE(K) #accton root pts/2 22:11:45 22:11:45 0.02 0.01 1540.00 turnacct root pts/2 22:11:44 22:11:44 0.13 0.01 1688.00 sleep root pts/2 22:11:45 22:11:45 0.01 0.01 1212.00 ls root pts/2 22:11:45 22:11:45 0.01 0.01 896.00 mv root pts/2 22:11:45 22:11:45 0.01 0.01 896.00 : # lastcomm acctcom root pts/2 0.00 secs Fri Apr 25 22:21 ls root pts/2 0.00 secs Fri Apr 25 22:19 file root pts/2 0.00 secs Fri Apr 25 22:18 ls root pts/2 0.00 secs Fri Apr 25 22:18 ls root pts/2 0.00 secs Fri Apr 25 22:18 :
関連ツールとして/usr/lib/acctディレクトリ配下に以下のようなものがあるが、これらは必要に応じてcronなどで定期的に実行する。
ckpacct
/var/adm/pacctファイルのローテートを一定のサイズ(デフォルトは500ブロック)毎に行う。
サイズを変更したい場合は「ckpacct 300」などとして引数で指定できる。
runacct
1日で採取されたアカウント情報を集計して/var/adm/acct/niteディレクトリ配下に格納する。
またrunacctによって/usr/lib/acct/prdailyが1日に1回実行され、性能評価などに利用されるテキスト形式の/var/adm/acct/sum/rprtMMDDが作成される。
monacct
runacctで生成された/var/adm/acct/sum/rprtMMDDファイルを月単位で集計する。
集計されたデータは/var/adm/acct/fiscal/fiscrptMMファイルに格納され、/var/adm/acct/sum配下のファイルがクリアされる。
dodisk
各ユーザのディスク使用情報を採取する。
収集されたデータは/var/adm/acct/nite/disktacctファイルに格納され、/var/adm/acct/sum/rprtMMDDファイルの作成に使用される。
関連資料・記事
2007/7/29更新
対応バージョン: 9
以下の手順で設定する。
initスクリプト配置
# cd /etc/rc2.d # ln -s ../init.d/acct S22acct # cd /etc/rc0.d # ln -s ../init.d/acct K22acct
現在年/プライムタイムの設定
# cd /etc/acct # cp -p holidays holidays.YYYYMMDD # vi holidays : * Prime/Nonprime Table for UNIX Accounting System * * Curr Prime Non-Prime * Year Start Start * 2000 0800 1800 ↑ 現在年、プライムタイム/ノンプライムタイムそれぞれの開始時刻を設定する。 現在年は毎年変更する必要がある。 * * only the first column (month/day) is significiant. * * month/day Company * Holiday * 1/1 New Years Day 7/4 Indep. Day 12/25 Christmas ↑ 休日等、終日ノンプライムタイムになる日を指定する。
アカウンティング開始
# /etc/rc2.d/S22acct start
アカウンティング情報の参照方法や各種ツールの使用方法などは以下の資料を参照。
関連資料・記事
2007/7/29更新
対応バージョン: 8
以下のような脆弱なパスワードを指定しようとすると上記のエラーが出てパスワード変更が拒否される。
アカウント名と同じ
アカウント名をずらしただけのもの
尚、この機能はPAMモジュールのpam_authtok_check(5)によって制御されている。
2008/11/28更新
対応バージョン: 10
アカウントのパスワードには文字長や文字種など種々の要件が設定されているが、これを変更するには/etc/default/passwdで要件毎に値を設定する。
以下、主な要件について説明する。
パスワードに含める文字の設定
MINALPHA
パスワードに含める「英字」の最小数。大文字小文字は区別しない。
デフォルトは2。
MINLOWER
パスワードに含める「英小文字」の最小数。
デフォルトは0(チェックしない)。
MINUPPER
パスワードに含める「英大文字」の最小数。
デフォルトは0(チェックしない)。
MINDIGIT
パスワードに含める「数字」の最小数。
デフォルトは0(チェックしない)。
MINNONALPHAを指定した場合は使用できない。
MINSPECIAL
パスワードに含める「特殊文字」(英字・数字以外の文字)の最小数。
デフォルトは0(チェックしない)。
MINNONALPHAを指定した場合は使用できない。
MINNONALPHA
パスワードに含める「英字以外の文字」(数字・特殊文字)の最小数。
デフォルトは1。
MINDIGITかMINSPECIALを指定した場合は使用できない。
WHITESPACE
パスワードに空白文字を使用できるかどうかの指定(YES/NO)。
デフォルトはYES。
MAXREPEATS
同じ文字を続けてもよい回数の最大数。
デフォルトは0(チェックしない)。
パスワード全体に関する設定
PASSLENGTH
パスワードに最低限必要な文字数。
デフォルトは6。
MINDIFF
古いパスワードと新しいパスワードで異なる必要がある文字の最小数。
デフォルトは3。
2008/6/10更新
対応バージョン: 10
アカウントのパスワードを履歴管理し、過去n世代前のパスワードが使用できないようにするには/etc/default/passwdのHISTORYパラメータに管理する世代数を設定する。
設定可能な値は0〜26である(0は履歴管理なし)。
例) 3世代分管理
HISTORY=3
履歴管理が設定された状態でパスワード変更に過去n世代以内のものを使用しようとすると以下のようなメッセージが出る。
% passwd foo 既存のログインパスワードを入力してください: ***** 新しいパスワード: ***** passwd: パスワードは履歴リスト内にあります。 再度実行してください 新しいパスワード:
尚、この設定が適用されるのはローカルのアカウントに限られる。
2008/2/29更新
対応バージョン: 8
アカウントの2次グループは最大16(1次グループ=1、2次グループ=15)であるが、/etc/systemに以下の設定を追加することによりこれを増やすことができる(上限は32)。
set ngroups_max = 32
リブートを行うことで設定が有効になる。
設定が有効になったかどうかは以下のコマンドで確認できる。
# echo ngroups_max/D | adb -k physmem 1f10c ngroups_max: ngroups_max: 32 ←
尚、NFSが利用するRPCの仕様(RFC1057)ではグループ数の上限が16と決められているのでngroups_maxの値を17以上に変更するとNFSが正常に動作しないことがある。
したがってNFSを利用する環境では16以下の設定にすることが推奨される。
2008/3/13更新
対応バージョン: 9,10
一般的なUNIX系OSではchshコマンドを使用するが、Solarisではchshの替わりに「passwd -e」を使用する。
例)
# passwd -e foo Old shell: /bin/sh New shell: /bin/bash passwd: password information changed for foo
関連資料・記事
2007/7/29更新
対応バージョン: 8
以下の通り。
文字種
英数字
文字数
2〜8
注意事項
最初の文字は英字であること。
少なくとも1文字は小文字であること。
1つのユーザが所属できるグループは最大16。
最大UID,GID
2,147,483,647
(*) UID 0-99はシステムアカウント
(*) UID 60001はアクセス権のないユーザ(nobody)
(*) UID 60002はnoaccess (以前のSolaris 2.XとSVR4リリースとの互換性のために提供)
(*) 60003以上のUIDはSolarisの多くの機能と互換性がないので使用しないこと。
2007/7/29更新
対応バージョン: 9
システムにファームウェアリビジョン1007のToshiba SD-M1401 DVD-ROMドライブが含まれているとSolaris 9 DVDからのブートが失敗する。
同事象はファームウェアパッチ111649-03にて修正されているので以下の手順でパッチを適用する。
パッチを任意のディレクトリに解凍
ボリュームマネージャ停止
# /etc/init.d/volmgt stop
パッチ適用
# cd <パッチ格納ディレクトリ> # ./optdload : c1t6d0s2 TOSHIBA DVD-ROM SD-M1401 1007 06/22/00 ↑対象デバイスが表示される Are you sure you want to download firmware to this device (y/n)[n]? ■ ← y
マシンリブート
2007/5/24更新
CD-ROMでブート
ok boot cdrom
→ インストーラが自動的に起動する。
使用言語選択
インストール時に使用する言語を選択する。
ここで選択する言語はあくまでインストール時に(メッセージ表示用に)のみ使用される言語なので、実際にインストールする言語セットとは関係ない。
インストールに使用する端末によっては日本語がうまく処理できない場合もあるので、作業は英語で行うことにする。
The Solaris Installer can be run in English, or any of the following languages: 1) English 6) Japanese 2) German 7) Korean 3) Spanish 8) Swedish 4) French 9) Simplified_Chinese 5) Italian 10) Traditional_Chinese Select the language you want to use to run the installer: ■ ← 1
初期インストールかアップグレードインストールかの選択
ここでは初期インストールを行うことにする。
Do you want to do a Initial Install or Upgrade? 1) Initial Install 2) Upgrade Please Enter 1 or 2 > ■ ← 1
rootディスクのレイアウト
新規インストールの場合はrootディスクをフォーマットしておいたほうが無難である。
The default root disk is /dev/dsk/c0t0d0. The Solaris installer needs to format /dev/dsk/c0t0d0 to install Solaris. Do you want to format /dev/dsk/c0t0d0? [y,n,?,q] ■ ← y
スワップのサイズをMB単位で指定する。
Enter a swap slice size between 382MB and 8632MB, default = 512MB [?] ■
スワップ用スライスをディスクの先頭から作成するかどうかを選択する。ルートファイルシステム用のスライスをディスクの先頭にするような場合はnを選択する。
Can the swap slice start at the beginning of the disk [y,n,?,q] ■
上記質問にnと答えた場合、開始シリンダの入力を求められるので適切なシリンダを指定する。
Enter a starting cylinder between 0 and XXXX, default = 0 [?] ■
ここまでの設定を再確認する。
You have selected the following to be used by the Solaris installer: Disk Slice : /dev/dsk/c0t0d0 Size : XXXX MB Start Cyl. : 0 Is this OK [y,n,?,q] ■ ← この指定でよければy
ここでminirootのインストールが始まり、終了するとリブートがかかる。
リブート後は自動的にWeb Startインストーラが起動するので対話形式でインストールを進めていく。
Web Startによるインストール開始
まず最初にインストールのステップが表示されるのでリターンを押して作業を進める。
Network Name Service Date and Time Root Password Power Management <Press Return to continue> ■ ← リターン
ネットワーク設定
ホストがネットワークに接続されているかどうかを選択する。
Is this machine networked (y/n) [n]? ■ ← ここではyを選択する
ネットワーク設定にDHCPを使用するかどうかを選択する。
Would you like to configure using DHCP [n]? ■ ← ここではnを選択する
ホストの属性を入力する。
Enter host name []: ■ ← ホスト名 Enter this machine's IP Address []: ■ ← IP アドレス Enter the subnet netmask [255.255.255.0]: ■ ← サブネットマスク Enable IPv6 [n]: ■ ← IPv6を使用する場合はy。ここではnを選択する
使用するネームサービスを選択する。
Available name services: 1. NIS+ 2. NIS 3. DNS 4. LDAP 5. None Please enter the number corresponding to the type of name service you would like [5]: ■ ← ここでは5を選択する
デフォルトルートを自動で設定するか手動で設定するかを選択する。
The default route provides a bridge between two physical networks that forwards traffic between the networks. You can let the software try to find one or you can specify one. The software can find a default route only if the system is on a network that has a router that broadcasts itself. 1. Find one 2. Specify one Please enter the number corresponding to your router discovery method [1]: ■ ← ここでは2(手動)を選択する
デフォルトルートを設定する。
On this screen you must enter the IP Address of the default route. IP Addresses must contain four sets of numbers separated by periods. Router Address []: ■ ← デフォルトルート(XXX.XXX.XXX.XXX)を設定
タイムゾーン設定
タイムゾーンを選択する。日本を含む特定の地域を選択する場合は1を選択する。
Specify Time Zone by: 1. Geographic region 2. Offset from GMT 3. Time zone file Please enter the number corresponding to how you would like to specify the time zone [1]: ■ ← 1
リージョンを選択する。日本の場合は2。
Available Regions: 1. Africa 2. Asia, Eastern 3. Asia, Western : Please enter the number corresponding to the correct region [1]: ■ ← 2
ゾーンを選択する。日本の場合は4。
Available Zones: 1. People's Republic of China 2. Taiwan 3. Hong Kong 4. Japan 5. Republic of Korea 6. Singapore Please enter the number corresponding to the correct zone [1]: ■ ← 4
デフォルトの日時が表示されるのでこれでよければy、違っていればnを選択して正しい時刻を入力する。
The default date and time is Monday October 20 13:14:31 JST 2003. Do you want to use this date and time (y/n) [y]? ■
rootパスワード設定
Enter the root password []: ■ ← rootのパスワード Enter the root password again []: ■ ← rootのパスワード(再入力)
インストールパラメータ確認
You have entered the following values: Host Name: <ホスト名> IP Address: <IPアドレス> System part of a subnet: Yes Netmask: <ネットマスク> Enable IPv6: No Name Service: None Default Route: Yes Router Address: <デフォルトルート> Time Zone: Japan Enter 'y' to apply these values and proceed to the next stage of the installation, or 'n' to return to the beginning and make changes (y/n): ■ ← この設定でよければy、修正したければnを選択して再度目的の設定を行う。
付属ソフトウェアインストール
Solaris Web Start will assist you in installing software for Solaris. <Press ENTER to continue> ■ ← リターン
インストールメディアを選択する。
Please specify the media from which you will install the Solaris Operating Environment. Media: 1. CD 2. Network File System 3. HTTP (Flash archive only) 4. Local Tape (Flash archive only) Media [1]: ■ ← ここでは1を選択する Please insert the first CD from which you will install the Solaris Operating Environment. To select a different media, enter B to go Back. [] ■ ← 「SOLARIS 8 SOFTWARE 1 OF 2」のCDをCD-ROMに挿入してリターン
インストール種別を選択する。
Types of install available: 1. Default Install 2. Custom Install Select the number corresponding to the type of install you would like [1]: ■ ← デフォルトインストールかカスタムインストールかを選択するが、デフォルトを 選択するとローカライズの設定もデフォルト(北米)になってしまうので2を選択する。
ローカライズの設定を行う。
[ ] 0 Northern Africa : [ ] 11 Asia To edit a region selection, enter the number here. Enter n when finished. [n] ■ ← 地域コードを選択。日本の場合は11。 [ ] 11 Asia [ ] 11.0 Japanese ( ja ) [ ] 11.1 Japanese (Japan,PCK) ( ja_JP.PCK ) [ ] 11.2 Japanese (Japan,UTF-8) ( ja_JP.UTF-8 ) [ ] 11.3 Korean ( ko ) [ ] 11.4 Korean (UTF-8) ( ko.UTF-8 ) [ ] 11.5 Thai (Thailand) ( th_TH ) [ ] 11.6 Chinese ( zh ) [ ] 11.7 Chinese (GBK) ( zh.GBK ) [ ] 11.8 Chinese (UTF-8) ( zh.UTF-8 ) [ ] 11.9 Chinese (Taiwan) ( zh_TW ) [ ] 11.10 Chinese (Taiwan,BIG5) ( zh_TW.BIG5 ) [ ] 11.11 Chinese (Taiwan,UTF-8) ( zh_TW.UTF-8 ) To toggle locales in Asia, enter the number here. Enter n when finished. [n] ■ ← インストールするロケールを選択する(複数選択可能)。 日本の場合は11.0、11.1、11.2を選択する。 上記を全て選択すると以下のような表示になる。 [-] 11 Asia [X] 11.0 Japanese ( ja ) [X] 11.1 Japanese (Japan,PCK) ( ja_JP.PCK ) [X] 11.2 Japanese (Japan,UTF-8) ( ja_JP.UTF-8 ) [ ] 11.3 Korean ( ko ) [ ] 11.4 Korean (UTF-8) ( ko.UTF-8 ) : To toggle locales in Asia, enter the number here. Enter n when finished. [n] ■ ← nを入力して一つ前のメニューに戻る [ ] 0 Northern Africa : [-] 6 North America : [-] 11 Asia To edit a region selection, enter the number here. Enter n when finished. [n] ■ ← nを入力して一つ前のメニューに戻る
デフォルトロケールの変更を行う。
Available regions: 0 North America 1 Asia 2 POSIX Default locale to be used: English (United States,ISO8859-1) ( en_US.ISO8859-1 ). If you wish to change the locale to be used, enter the number next to the desired region to choose the locale to be used after the system has been installed or enter n to use the default. [n] ■ ← 日本の場合は1 Available locales for Asia: 2. Japanese ( ja ) 3. Japanese (Japan,PCK) ( ja_JP.PCK ) 4. Japanese (Japan,UTF-8) ( ja_JP.UTF-8 ) Please enter the number next to the desired locale to be used after the system has been installed, or enter n to choose a new region. [n] ■ ← デフォルトで使用する言語パックを選択
ここからはインストールしたい対象物を選択していく。
各サイトによって必要なものは異なるので手順は省略する。
追加ソフトウェアインストール
標準でインストールされるソフトウェア以外に追加でインストールしたいソフトウェアがあればここで選択する。
例えばDiskSuite(下記メニューの2)などは標準ではインストールされないので必要に応じてインストール指示をする。
Select the CDs and products you would like to install. [X] 0 Solaris 8 Documentation European 204.4 MB [X] 1 Solaris 8 Documentation Asian 122.7 MB [ ] 2 Solaris 8 Software 2 of 2 0.0 MB [-] 3 Multilingual Computer Systems Supplement CD 246.0 MB Select which CD(s) to install with the system. You will then be able to choose individual products on each CD.
さらに、Solaris標準添付のもの以外に追加インストールしたいソフトウェアがあればここでインストールする。
各サイトによって必要なものは異なるので手順は省略する。
Additional Products To scan for additional products, select the location you wish to scan. Products found at the selected location that are in a Web Start Ready install form will be added to the Products list. 1. None 2. Product CD 3. Kiosk Download 4. Local or Network File System Web Start Ready product scan location [1]:
64bitサポート有無選択
従来の32bitモードに加えて64bitモードをサポートするかどうか選択する。
Do you want 64-bit support? 64-bit support is required in order to use this product in 64-bit architecture environments. 1. Software will be installed with 64-bit and 32-bit support (Recommended). 2. Software will be installed with 32-bit support only. Enter the number corresponding to your choice [1] ■ ← (32bitモードに加えて)64bitモードをサポートする場合は1。
ソフトウェアグループ選択
サイトの目的に応じてソフトウェアグループが以下のように分類されているので、必要なソフトウェアグループを選択する。
Available Solaris Software groups: 1. Entire Group Plus OEM 2. Entire Group 3. Developer Group 4. End User Group 5. Core Group Select the number corresponding to the desired Solaris software group [2]: ■