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 コマンドで確認できます。


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