2017年2月16日木曜日

Linux サーバ起動時にFSCKが実行されて、サーバの起動に時間がかかる

Linuxでは、サーバ起動時にディスク(ファイルシステム)のFSCKを実行、その後ディスク(デバイス)をマウントして起動プロセスへ移っていくようになっています。

FSCKの実行時間は、ディスク(デバイス)の容量に依存するため、ディスク(デバイス)容量が大きい(1TB等)場合は留意する必要があります。
サーバ起動時間がFSCKの実行有無で大幅に変わることが想定されます。
そのため、サーバの起動に時間がかかっている場合は、FSCKの実行有無が影響している可能性があります。

FSCKが実行される契機は、以下です。
  1.ディスク(デバイス)のマウント回数
  2.ディスク(デバイス)へFSCKを実行してから経過した時間

設定情報内容は、以下のコマンドで確認できます。
  tune2fs△-l△[デバイス名]
  ※例  tune2fs△-l△/dev/sda1

tune2fs で表示した結果で以下がFSCKに関連があります。

  Mount count: 10  ←ディスク(デバイス)がマウントされた回数
  Maximum mount count: 30  ←Monut countがこの値になるとFSCKが実行される
  Last checked: Sun Jan 01 09:00:00 2017  ←前回FSCKが実行された日時
  Check interval: 15552000 (6 months)  ←前回から次回のFSCKが実行されるまでの間隔(秒)

上記の場合、次回のFSCKが実行されるタイミングは以下になります。
  1.ディスクがあと20回マウントされた場合
    ※Maximum mount count(30) - Mount count(10)

  2.2017年6月30日9時
    ※Last checked(2017年1月1日9時) + Check interval(6ヶ月:15552000秒)
    ※ただし、1のマウント回数によりFSCKが先に実行された場合は、その日時から6ヶ月(15552000秒)後に変更されます。

FSCKの実行設定は、tune2fs で変更できます。
  オプション  -c  …  Maximum mount count を変更 (0 または -1 を設定すると、FSCKが実行されなくなります)
  オプション  -i  …  Check interval を変更 (0 を設定すると、FSCKが実行されなくなります)

複数のディスク(デバイス)をマウントしている場合は、ディスク(デバイス)毎にFSCKが実行されるタイミングを変え、全てのディスクが一斉にFSCKが実行されないようにして、サーバの起動にかかる時間を工夫(コントロール)した方がよいと思います。
マウント回数(Maximum mount count)か間隔(Check interval)のどちらかだけを設定するとコントロールし易いと思います。

ご指摘、ご質問などはコメントへお願いします。

2017年2月13日月曜日

Linux よく使うコマンド

保守や運用の仕事をする上で、知っておくべき(と個人的に思う)コマンドをまとめてみました。
(思いついたら追記します)

・ネットワーク疎通確認、経路確認
    ping
    traceroute

・全プロセス情報を表示
    ps
    オプション auxwwf (ツリーで表示)
    オプション -ef (PID、PPIDを表示)
    ※例  プロセスを探すとき(ヘッダが無いと見辛い)
      ps△-ef | head△-1; ps△-ef | grep△[探したいプロセス名] | grep△-v△grep

 ・時刻を表示
    date
    ※Linux時間で記録されている時間(auditログ等)を表示
      date△--date=@[Linux時間]

・OSの情報をまとめて収集
    sosreport

 ・ファイルやディレクトリをアーカイブ(又は展開)
    tar
    ※アーカイブして圧縮(bz2形式)
      tar△cfj△[アーカイブ後のファイル名].tar.bz2△[アーカイブしたいファイル1]△[アーカイブしたいファイル2]
    ※アーカイブして圧縮(bz2形式)したファイルを展開
tar△xfj△[アーカイブしたファイル名].tar.bz2

  ・稼働情報の確認
    sar

  ・ファイルの参照
    less

  ・プロセスや稼働情報をリアルタイムで確認
    top
    ※オプションでバッチとして実行することも可

ご指摘、ご質問などはコメントへお願いします。

2017年2月6日月曜日

Linux sosreportで情報収集してエラーの原因究明に役立てる

Linuxでエラーなどが発生したときに情報収集する場合は、sosreportコマンドが便利です。
何か問題が発生した際は、ひとまずsosreportを実行しておくと、役に立ちます。

sosreportはパッケージの導入が必要なコマンドです。

sosreportコマンドの実行には、root権限が必要です。

sosreportでは、
  ・パッケージの導入状況
  ・/etc配下の設定ファイル
  ・サービス設定(chkconfig)
  ・コマンド実行時の状況(df、ps、netstat、freeコマンド)
  ・/var配下のログ(ファイル)
  ・コマンド実行時のカーネルパラメータ(/proc)
などの情報を集め、アーカイブ(圧縮)としてファイルが作成されます。

sosreportコマンドは通常 対話式ですが、オプション(--batch)を指定することでバッチ(非対話式)に変更出来ます。非対話式にすることで、シェルスクリプトへ組み込めます。

また、ファイルの出力先は、デフォルトで/tmp(または/var/tmp)ですが、オプション(--tmp-dir)を指定することで出力先を変更出来ます。出力先の空き容量が不足すると失敗する(ハングする可能性もあります)ので、注意が必要です。

コマンド例) シェルスクリプトに組み込み、出力先のディレクトリを変更する場合
  sosreport△--batch△--tmp-dir△[出力先のディレクトリ]

sosreportコマンドはシェルスクリプトのため、オプションや動作は直接ファイルの内容を確認することが出来ます。

ご指摘、ご質問などはコメントへお願いします。

2017年2月3日金曜日

Windows Linux 任意のサイズを指定してファイルを作成する

テスト等である程度のサイズのファイルを作成したい際、コマンドでファイルを作成できます。特に大きいサイズのファイルを作成する際は、以下のコマンドが非常に便利です。

Windowsの場合は、コマンドプロンプトからfsutilコマンドを使います。
  fsutil△file△createnew△[ファイル名]△[ファイルサイズ]

例えば、C:¥temp フォルダの中にサイズ 1024byteでファイル名 1k.txtを作成する場合
  fsutil△file△createnew△C:¥temp¥1k.txt△1024

Linux の場合は、ddコマンドを使います。
  dd△if=[ファイルを作るまての元データ]△of=[作成するファイル名]△bs=[bytes]△count=[blocks]

例えば、/tmpディレクトリの下にサイズ 1024byteでファイル名 1k.txtを作成する場合
※ファイルの中身はランダムなデータ(/dev/urandom)
  dd△if=/dev/urandom△of=/tmp/1k.txt△bs=1024△count=1
  ※bs × count のサイズでファイルが作成されます。そのため、上記例の場合は、bs=1、count=1024 としても同じサイズのファイルが作成出来ます。

また、Linux の場合はアンパサンド(&)を付ければ、バックグラウンドで処理することが出来ます。
例えば、/tmpの下に1MBのファイルを3つ(1m1.txt、1m2.txt、1m3txt)を作成する場合は、
  dd△if=/dev/urandom△of=/tmp/1m1.txt△bs=1024△count=1024△&
  dd△if=/dev/urandom△of=/tmp/1m2.txt△bs=1024△count=1024△&
  dd△if=/dev/urandom△of=/tmp/1m3.txt△bs=1024△count=1024△&
を実行することで各コマンド終了を待たずに、他の作業をすることが出来ます。
バックグラウンド処理の終了状況はjobs コマンドで確認できます。


ご指摘、ご質問などはコメントへお願いします。

2017年1月15日日曜日

Windows ネットワークドライブの割り当てをコマンドで実行する

Windowsでネットワークドライブの割り当て方法として、以下の2つの方法があります。
    ・「ネットワークドライブの割り当て」画面から設定
    ・コマンドプロントでnet useコマンドを実行

net useコマンドの場合、デフォルトのオプションが「次回ログオン時に自動で割り当てる」となっていますので、自動で割り当てたくない場合はオプション persistent:no を指定する必要があります。

例えば、異なるドメインの端末で1つのサーバへネットワークドライブを割り当てる際、自動で割り当てるように設定していると端末が設定時のユーザとパスワードを記憶しているため、ユーザのパスワード変更によりアカウントがロックしてしまう可能性が高いです。

上記の運用が想定される場合は、ログオンの都度、ネットワークドライブを割り当てる必要があります。

都度 画面での設定やnet useコマンドの打鍵ではなく、net useコマンド(オプション persistent:noを記載、パスワードは記載しない)のバッチファイルをスタートアップに配置すると楽です。

ご指摘、ご質問などはコメントへお願いします。

2017年1月13日金曜日

Windows Oracle OSが64bitで、32bitのODBCを設定する

Windows OSが64bitの場合、コントロールパネル(管理ツール)のODBCデータソースを起動した場合、64bit版のODBC設定画面になります。

32bit版のODBCデータソース(ODBC設定画面)を設定(起動)したい場合は、以下の実行ファイル(odbcad32.exe)を直接実行する必要があります。

%windir%¥syswow64¥odbcad32.exe

なお、64bit版のODBCデータソース(ODBC設定画面)の実行ファイル(odbcad32.exe)は以下です。

%windir%¥system32¥odbcad32.exe

AccessからODBCデータソースを設定した場合、Officeのbit数によって32bitか64bitのODBCデータソースのどちらかに設定されます。

ODBCデータソース(ODBC設定画面)での表示について、Windowsの仕様により、システムDSNには各bit(32bit/64bit)のODBC設定画面で設定した内容のみが表示されますが、ユーザーDSNには64bitと32bitの両方表示されてしまいます。

例えば、以下のように32bit版と64bit版のDSNを設定した場合、
    64bit版のODBC設定
        システムDSN     DNS名:sysdsn64
        ユーザーDSN    DSN名:usrdsn64

    32bit版のODBC設定
        システムDSN     DNS名:sysdsn32
        ユーザーDSN    DSN名:usrdsn32

以下のように表示されます。
    64bit版のODBC設定
        システムDSN     DNS名:sysdsn64
        ユーザーDSN    DSN名:usrdsn64    DSN名:usrdsn32

    32bit版のODBC設定
        システムDSN     DNS名:sysdsn32
        ユーザーDSN    DSN名:usrdsn64    DSN名:usrdsn32

ご指摘、ご質問などはコメントへお願いします。

2017年1月11日水曜日

Linux ディスク使用量とブロックサイズについて

Linuxのファイルとディレクトリの、サイズやディスク使用量を取得する主なコマンドとして、
    df コマンド
    du コマンド
    ls コマンド(-l オプション)
があります。

ディスク使用量とは、実際にディスクへ割り当てられた大きさを意味しています。

ディスクはブロックサイズ毎に割り当てられるため、ディスク使用量は最低でも必ずブロックサイズと同じになります。
つまり、ブロックサイズが4kの場合、どんなに小さなファイルを作っても、ディスク使用量は必ず4kになります。
また、どのような大きさのファイルを作成しても、必ず4kで割り切れるディスク使用量になります。

各ディスクのブロックサイズは、コマンドで変更が出来ます。

ブロックサイズを大きくした場合、
    メリット…ディスクへの書き込み速度が向上する
      ※ブロックサイズ単位で(ディスク容量が割り当てられて)ディスクへ書き込みが実行されるため
    デメリット…作成できるファイル(ディレクトリも)が少なくなる
      ※ブロックサイズ単位でディスク容量が割り当てられるため

ブロックサイズを小さくした場合、(大きくした場合の逆ですが)
    メリット…作成できるファイル(ディレクトリも)が多くなる
    デメリット…ディスクへの書き込み速度が低下する

あらかじめ、主にサイズが大きいファイルの数が多いことが見込まれる場合は、ブロックサイズを調節すると、パフォーマンスの向上を期待できます。
ただし、本来あまりディスク容量を必要としないファイル(小さなファイルやディレクトリ)を作成した場合もブロックサイズ分のディスク容量が割り当てられてしまうので、留意が必要です。

ディスクへの書き込み速度が影響するのは、ブロックサイズ以上のファイルを作成した場合です。
また、ディスクへ作成できるファイル(ディレクトリ)の数は、i-node数を越えることは出来ません。

ご指摘、ご質問などはコメントへお願いします。