いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.085 / 読者数:959名

こんばんは、うすだです。

のっけから唐突ですが、/.J に、こんな記事が載っていました。

スラッシュドット ジャパン | 「早生まれ」の損得勘定
http://slashdot.jp/askslashdot/06/12/05/0428231.shtml

「早生まれ」は、大人になると羨ましがられたりしますが、 子どものうちは学力や体力の面で不利かもしれない、という内容の記事です。
上記で参照されている産経新聞の記事に、 J1 所属選手の誕生月のグラフが載っているのですが、4月がもっとも多く、 2月と比べると3倍以上の差があるという結果が出ていました。

この記事に注目してしまったのは、ご想像通り、 わたしがかなり早生まれの部類に入るからです。 子どものころから運動がすごく苦手でしたので、 直観的にそうだろうなとは思っていました。このように、 それなりに立証されると、いまさらながら励みになります。

結局、集団をひとくくりにして、せーので教えている限り、 こういう格差はなくならないんでしょうね。
そんなわけで、わたくしとしましては、今後も、運動音痴と引っ込み思案な性格を、 「早生まれ」のせいにしていこうと思う所存です。

それでは、今週も、はりきってまいりましょう!

今週のお題 - ファイルシステムの使用量を制限する

わたしが学生の頃、研究室の先生が、ディスクとメモリはいくらあっても足りない、 という名言をおっしゃっていました。あれから15年くらい経ちましたが、 その状況はあまり変わっていないように思います。
(ちなみに、わたしの中では、ムーアの法則くらい印象に残っています。)

空いているディスクがあっても、いつの間にか誰かがファイルを置くようになり、 あっという間にいっぱいになる、ということがよくあります。
…いやいや、よくあるというより、常にそうなると言っても過言ではないと思います。

そんなことがないよう、あらかじめ各ユーザの使える容量を決めておく、 という方針を立てることは、あまり決断をしたくない選択肢ではあるものの、 けっして間違った選択ではないと思われます。

というわけで、来たるべきその日のために、今週は、 ファイルシステムの使用量を制限する方法について、ご紹介したいと思います。


ファイルシステムの使用量を制限する方法といえば、Quota です。

Quota は太古の昔からあり、設定方法などもあまり変わっていないように思います。 ここは、今のところ使う予定がなくても、記憶の奥底に刻んでおくと、 将来何かの役にたつかもしれないということで、読んでいただけますと幸いです。

さて、細かい話はすっ飛ばしまして、Quota の設定方法は、 以下のようになると思います。

  1. マウント時に Quota が有効になる設定を追加する。
  2. 読み込み専用でマウントする。
  3. 使用状況を集計して、Quota を有効にする。
  4. 各ユーザの制限を設定する。

この順で、設定方法をご紹介していこうと思います。
例では、デバイスファイルが /dev/hda3 で、 マウントポイントが /home のファイルシステムに対して、 Quota の設定を行っています。

また、Quota を使用するためには、Quota を有効にしたカーネルが必要となります。 ですが、大抵のディストリビューションについてくるカーネルは、 Quota が有効になっているはずですので、確認方法などは割愛させていただきます。


ではまず、マウント時に Quota が有効になる設定をしましょう。
具体的には、/etc/fstab の中の該当する箇所に、usrquota オプションを追加します。
たとえば、/dev/hda3 の行が以下のようになっていた場合、

  /dev/hda3    /home    ext3  defaults      1 1

この行の defaults の後に、カンマで区切って usrquota を追加します。

  /dev/hda3    /home    ext3  defaults,usrquota  1 1

次に、対象のファイルシステムを、読み込み専用(read only)でマウントします。 (もしすでにそうなら、次の quotacheck へ進んでください。)

もし、今現在、そのファイルシステムが、 書き込みできる状態でマウントされているなら、以下を試してみてください。

  # mount -o ro,remount /home

これは、今マウント中の /home を、読み込み専用でマウントし直すための実行例です。 うまくいけば、何も言われず成功しますが、誰かが使用中だったりすると、 device is busy などと言われて失敗してしまいます。

そんなときは、さくっと諦めてリブートし、 シングルユーザモードで立ち上げてください。 シングルユーザモードで立ち上げるには、リブート後のブート時のメニューで、 カーネルコマンドラインに single という一言を追加するだけです。

シングルユーザモードで立ち上がったら、 対象となるファイルシステムを読み込み専用でマウントします。

  # mount -o ro /home

さて、ファイルシステムを読み込み専用でマウントしたら、次は、 現在の使用状況などを、quotacheck コマンドで集計します。

  # quotacheck -c /home

これにより、集計が行われ、aquota.user というファイルが作られます。
-c オプションを指定しますと、既存の aquota.user を無視して作り直します。 そもそもなければ関係はありませんが、念のため指定しています。

quotacheck コマンドが終了したら、マルチユーザモードに移行します。
今お使いのシェルを exit などで終了すれば、勝手にそうなります。
その過程で、quotaon というコマンドが自動的に実行され、 Quota が有効な状態になります。

リブートせずに、マルチユーザモードの状態で quotacheck を行った貴兄は、 手動で quotaon コマンドを実行してください。

  # quotaon /home

ここまでで、Quota が有効な状態でマウントされるようになりました。
お次はいよいよ、ユーザに制限をつけてみたいと思います。
そのためのコマンドが、edquota です。

  # edquota ユーザ名

と実行しますと、エディタ(たぶん vi)が起動し、 引数で指定したユーザの制限を設定できます。

  Disk quotas for user ユーザ名 (uid ユーザID):
    Filesystem   blocks     soft     hard   inodes   soft   hard
    /dev/hda3      1692        0        0        9      0      0

こんな感じのテキストを、編集するように即されます。

block がキロバイト単位での容量の制限を、inode がファイル数の制限を表します。 直下にある数値が、現在の状態です。

そして、それぞれに soft と hard という制限があります。
soft の値を越えると警告が発せられ、grace period という期間(通常は1週間) を過ぎると、それ以上は書き込めなくなります。
かたや hard は、絶対的な制限で、これを越えることはできません。
上記では、いずれも 0 ですので、制限のない状態を表します。
ここを書き換え、保存してエディタを終了すると、その設定が有効になります。

あとは、実際にファイルを作って確認してもよいですし、 quota コマンドで確認することもできます。

  # quota ユーザ名
  Disk quotas for user ユーザ名 (uid ユーザID): 
    Filesystem  blocks  quota  limit  grace  files  quota  limit  grace
    /dev/hda3     1692   2048   4096             9      0      0

以上、Quota の設定方法をご紹介しました。

今週は、とりあえず設定したよ、というところまでしかご紹介できませんでした。 来週は、もうちょっと細かい設定や、日々の管理の仕方などを、 踏み込んでご紹介したいと思います。

ですので、いきなり本番環境で、上記を試すのは、ひかえたほうがいいと思います。 逆に、こわれてもいいお試し環境をお持ちのかたは、いろいろ設定をしてみてください。

宿題の答え

先週の宿題は、

  USBストレージを使えなくしながら、USB機器の挿抜をメールで通知する
  ようにしてください。

でした。

hotplug が登録されていない場合、 hotplug と modprobe の双方に仕込むだけで済んでしまいますね。
たとえば、hotplug の代替品として、以下を用意します。

  #!/bin/sh
  ORG_HOTPLUG="/sbin/hotplug"

  if [ "z$1" = "zusb" -a -n "$TYPE" ]; then
      /usr/bin/printenv | /usr/bin/Mail -s "usb: $ACTION" root
  fi
  [ -x "$ORG_HOTPLUG" ] && $ORG_HOTPLUG $*

そして、modprobe の代替品として、以下を用意します。

  #!/bin/sh
  ORG_MODPROBE=/sbin/modprobe
  DO_MODPROBE=1
  for arg in $*; do
      if [ "z$arg" = "zusb-storage" ]; then
          DO_MODPROBE=0
      fi
  done
  [ -x "$ORG_MODPROBE" -a $DO_MODPROBE -gt 0 ] && $ORG_MODPROBE $*

それぞれを、sysctl などで登録してください。

これらは、以前にご紹介したことのあるスクリプトです。
通知内容をもっと凝ったものにしたいとおっしゃる貴兄は、 過去にご紹介したスクリプト(たとえば前回の宿題の答え)を使ってみてください。

 

hotplug が登録されている場合は、hotplug ですべてをまかないます。
とはいえ、前回ご紹介したスクリプトをもとにして、 メールで通知を行う処理を追加するだけです。 超簡単な代替品の例を、以下に示します。

  #!/bin/sh
  ORG_HOTPLUG="/sbin/hotplug"
  DO_HOTPLUG=1

  if [ "z$1" = "zusb" -a -n "$TYPE" ]; then
      if [ "z$TYPE" = "z0/0/0" ]; then
          CLASS=$INTERFACE
      else
          CLASS=$TYPE
      fi
      CLS=`echo $CLASS | sed "s/\([^\/]*\)\/[^\/]*\/[^\/]*/\1/"`
      if [ "$CLS" = "8" ]; then
          DO_HOTPLUG=0
      fi
      /usr/bin/printenv | /usr/bin/Mail -s "usb: $ACTION" root
  fi
  [ -x "$ORG_HOTPLUG" -a $DO_HOTPLUG -gt 0 ] && $ORG_HOTPLUG $*

最後から3行目で、環境変数一覧を Mail コマンドで送信しています。
こちらも、もっとわかりやすく通知してほしいなーと思われたら、 過去のスクリプトの該当部分を、上記に挿入してください。

わからない箇所などありましたら、以下をもう一度読んでみてください。

Vol.082 - USBポートを監視する
http://www.usupi.org/sysad/082.html
Vol.083 - USBポートをわかりやすく監視する
http://www.usupi.org/sysad/083.html
Vol.084 - USB機器を使えなくする
http://www.usupi.org/sysad/084.html

今週の宿題

今週の宿題は、

  Quota がどのようにして実現されているのか、想像してみましょう。

です。

Quota について検索したり、カーネル・ソースを解読すれば、 実現方法がわかるのではないかと思いますが、それをする前に、 どのようにして実現すればいいか、考えてみてください。

あとがき

正直に申しますと、Linux では Quota を使ったことがありません。
ですので、Sun 全盛期の頃に Quota を使ったときの、 当時のかすかな記憶を思い出しながら、VMware 上で試しつつ書きました。

しかしながら、細かいところに違いはあるものの、基本的には、 ほぼ同じような設定でできてしまったのには、プチ驚きました。
いやいやいや、やっておいて損はないと、ほんとに思います。

そういえば、今は、パーティションを / と /boot くらいにしか分けないですが、 昔は、/ の他に、/home や /usr, /var を別々にしていました。
その理由のひとつに Quota があったのかもしれない、 と今さらながらに思ってしまいました。(気づくの遅すぎ…)

ああ、また長くなってしまいましたので、とくにオチもなく、 昔話だけで終わりにしたいと思います。
来週も Quota でひっぱっちゃいますので、よろしくお願いします!

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−栗の絵を描いています。つかれたときにでも観てください。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本