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

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

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

同年代の人と飲みにいくと、この業界に入るきっかけとなったと言っても過言ではない、 「最初のコンピュータ」をネタにして、盛り上がることがあります。

ですが、下記によると、それは「トシヨリ」のすることらしいです。

「初めて」を懐かしむのは歳をとった証拠、あるいはスティーブ・ジョブズが本当にもたらしたもの
http://jp.techcrunch.com/archives/20121007remembering-your-first-computer-is-for-old-people/

たしかに、生まれたときから、 「携帯」や「iPod」「iPhone」「iPad」が間近にあったら、 思い入れを感じたりすることもないだろうなあ…というのは容易に想像できます。

ですが、アラフォーな世代にとっては、「8bitマイコン」や「PC-9800」といった、 うっかりそこに青春をつぎ込んでしまったモノに対し、 無関心を装うことは断じてできません。ええ、できませんとも。

というわけで、飲み会でネタに困ったら、率先してこのネタを使い、 若い人たちから失笑をいただいてみようと、逆に決意を固くした次第です。
(他の「懐かしいモノ」にも応用できますね。ファミコン、駄菓子…。)

ちなみに、わたしは「PASOPIA」という東芝の8bitなパソコンからはじめました。 情報もソフトも仲間も少なくて、いろいろ回り道をしました。
(Wikipediaには「典型的なマイナー機」とまで書かれています。)

…早速失笑を買う発言をしたところで、今回もはりきってまいります。

今回のお題 - FUSE でいろんなファイルシステムをマウントする

世の中もインターネットもLinuxもソフトも何もかも、目まぐるしく変化する中、 われわれ技術者はその荒波に飲み込まれないように、 うまいこと乗りこなしていく必要があるのではないかと思います。

ですが、OSなど中核を担う部分は、 できればあまり頻繁に変わって欲しくないというのが、技術者、 管理者およびユーザの共通の認識だとも思っております。

ファイルシステムに関しては、 従来はファイルシステム毎にカーネル内に処理するコードがあり、 必要なときにドライバをロードしたりカーネルを再構築したりする必要がありました。

ですが、「FUSE」(Filesystem in Userspace)という機能を使いますと、 ファイルシステムにアクセスするための処理を、 ユーザー空間で行わせることができます。
ですので、カーネルはそのままで、 いろいろなファイルシステムを扱えるようになりました。いやー、 便利な世の中になりましたね。

というわけで今回は、FUSE を利用して、 いろいろなファイルシステムをマウントして使ってみたいと思います。

FUSE を使うための準備

FUSE の概要については、 前述の Wikipedia の図(FUSE 本家のページ内の図とほぼ同じです) を見れば一目瞭然ですので、一度ご覧ください。

まず、FUSE を使うには、 「fusermount」コマンドが実行可能である必要があります。
たとえばCentOS6の場合、下記のように、 rootユーザか「fuse」グループに属するひとでないと実行できないようになっています。

  $ ls -l `which fusermount`
  -rwsr-x--- 1 root fuse 29196 12月  8 09:54 2011 /bin/fusermount

ですので、もしfuseグループに属していなければ、

  $ groups
  usu wheel

以下の手順で属するようにして、ログインし直してください。
(そうでない環境でも、fuseグループがあるようでしたら、 念のため属すよう設定しておいた方が無難です。)

  # useradd -aG fuse ユーザ名

sshfs や fusesmb, fusedav を使ってみます

さて、それではいろいろ試していきましょう。

まずは、SSHを使って、 遠くのサーバのファイルシステムをマウントしてみましょう。
そのためには、「sshfs」または「fuse-sshfs」というパッケージが必要です。 下記の要領で入れてください。

  # yum install fuse-sshfs       (RedHat系の場合)
  $ sudo apt-get install sshfs   (Debian系の場合)

使い方はいたって簡単で、大雑把な書式は以下の通りです。
(man の表記と同様、省略可能な部分は[]で囲っています。)

  $ sshfs [-p port#] [user@]server:directory  mount_point

たとえば、サーバ「server1」の「/home/usu」を、 ローカルの「~/mnt」にマウントしたい場合は、以下のように実行します。

  $ sshfs server1:/home/usu ~/mnt
  $ df ~/mnt
  Filesystem           1K-blocks  Used   Available Use% Mounted on
  server1:/home/usu  1048576000K    0K 1048576000K   0% /home/usu/mnt
  $ ls ~/mnt
  ...中身...

使い終わりましたら、前述のfusermountコマンドでアンマウントします。
「-u」オプションとマウントポイントを引数に指定して実行します。

  $ fusermount -u ~/mnt

次に、Windowsの共有フォルダをマウントしてみましょう。
それには、「fusesmb」もしくは「fuse-smb」パッケージを入れます。

  # yum install fuse-smb           (Fedoraだけかも…)
  $ sudo apt-get install fusesmb   (Debian系の場合)

そして、「fusesmb」コマンドを使用してマウントします。が、 その前に設定ファイルを書く必要があります。
設定ファイルは「~/.smb/fusesmb.conf」です。他の人に覗き込まれないよう、 ファイルの権限を適切に設定する必要があります。

  $ mkdir ~/.smb
  (~/.smb/fusesmb.conf ファイルを作る)
  $ chmod 600 ~/.smb/fusesmb.conf
  $ cat ~/.smb/fusesmb.conf
  [/winserver/share]
  username=ユーザ名
  password=パスワード

上記は、マシン「winserver1」の共有フォルダ「share」 にアクセスする際のユーザ名とパスワードを設定しています。

設定できたら、引数にマウントポイントを指定して実行します。
下記では、先ほどと同様に、~/mnt にマウントしています。

  $ fusesmb ~/mnt

すると、たとえば、下記のようにアクセスできます。

  $ ls ~/mnt/TAKUAN/WINSERVER1/share/
  ...中身...

使い終わりましたら、先ほどと同様、fusermountコマンドでアンマウントします。

  $ fusermount -u ~/mnt

そしてお次は、WebDAVをマウントして使ってみましょう。
それには、「fusedav」というパッケージを入れます。
…が、RedHat系にはそのようなパッケージがなさそうです。パッケージを探すか、 ソースコードを入手してインストールするか、 指をくわえて見ているなどしてくださいませ。

  $ sudo apt-get install fusedav

マウントするには、「fusedav」コマンドを使用します。
基本的な書式は、以下の通りです。

  $ fusedav [-u user][-p password] URL mount_point

たとえば、「http://server3:8080/repos/software1」を~/mntにマウントするには、 以下のように実行します。

  $ fusedav http://server3:8080/repos/software1 ~/mnt &

問題なければ、フツーにアクセスできます。

  $ ls ~/mnt
  ...中身...

くどいですが、fusermountコマンドでアンマウントします。

  $ fusermount -u ~/mnt

ファイルシステムじゃないものもマウントできます

FUSEの特徴(利点)として、まったくファイルシステムじゃないものを対象にできる、 ということが挙げられます。

ここでは、「archivemount」を使って、 tar+gzipやzipなどのアーカイブをマウントしてアクセスしてみます。
いつものように、同名のパッケージを入れるところから始めます。

  # yum install archivemount           (RedHat系の場合)
  $ sudo apt-get install archivemount  (Debian系の場合)

超基本的な書式は、以下の通りです。

  $ archivemount archive_path mount_point

たとえば、「linux-source-3.2.0.tar.bz2」を~/mntにマウントする場合は、 以下のように実行します。

  $ archivemount linux-source-3.2.0.tar.bz2 ~/mnt
  $ ls ~/mnt/linux-source-3.2.0/
  COPYING     Makefile     drivers/     ipc/      scripts/   virt/
  CREDITS     README       dropped.txt  kernel/   security/
  ...中身...

くどくどですが、fusermountコマンドでアンマウントします。
ちなみに、何か変更した場合は、アンマウント時に反映されます。

  $ fusermount -u ~/mnt

GNOME では GVFS というものを使います

GNOMEデスクトップ環境をお使いでしたら、こんなものがマウントされていると思います。

  $ mount | grep gvfs
  gvfs-fuse-daemon on /home/usu/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=usu)

GNOMEでは、「GVFS」というものを使って、 リモートなファイルシステムのマウント処理などを行います。

たとえば、Nautilusで、 「ファイル」→「サーバへ接続」からSSHやFTPなどの遠くのディレクトリを参照すると、 ~/.gvfs にマウントされます。

試しに、Windowsの共有フォルダをマウントしてみますと、 下記のような場所にマウントされていました。

  $ ls ~/.gvfs/winserver1\ 上の\ share/
  ...中身...

逆に、「gvfs-mount」コマンドを用いて、 コマンドラインからマウントやアンマウントすることもできます。
たとえば、上記と同じくマウントするには、以下のように実行します。

  $ gvfs-mount smb://winserver1/share

アンマウントする場合は、上記に「-u」オプションをつけて実行します。

  $ gvfs-mount -u smb://winserver1/share

どちらも、Nautilusなどのアプリケーションと同期します。

おわりに

以上、FUSEを利用したいろいろなツールを使って、 ファイルシステムなどをマウントしてみました。

本当は、自分で実装してあれこれしたいところですが、 今回はそんな余力はびた一文ございませんでした。

また機会があれば、あれこれしてみたいと思います。

宿題の答え

前回の宿題は、

  メモリの使用量を制限して実行するスクリプトを書いてみましょう。

でした。

コマンドを使えば、どこでも共通して使えるようになりますよね、 ということで、下記のようなスクリプトを作ってみました。

#!/bin/sh
if [ $# -lt 1 ]; then
	echo "Usage: $0 limit_in_bytes command..."
	exit 1
fi
mem=$1
shift
sudo cgcreate -a `id -un`:`id -gn` -g memory:$$
cgset -r memory.limit_in_bytes=$mem $$
cgexec -g memory:$$ $*
cgget -r memory.failcnt -r memory.max_usage_in_bytes $$
sudo cgdelete memory:$$

最初に引数チェックをした後、変数memに第1引数を放り込み、shiftしています。
後は、cgcreateコマンドでmemoryサブシステムにPIDと同じ名前のcgroupを作成し、 cgsetコマンドでメモリの上限を設定して、 cgexecコマンドで第2引数以降のコマンドを実行しています。
cgexecコマンドが終わったら、cggetコマンドで上限に達した回数などの値を表示して、 cgdeleteコマンドでcgroupを消しています。

たとえばこれを「cgmemlimitexec.sh」などという大それた名前で保存をしましたら、 実行権をつけて実行してみてください。

  $ chmod +x cgmemlimitexec.sh
  $ ./cgmemlimitexec.sh 100M firefox
  [sudo] password for あなた: (パスワードを入力)
  ...

上記の場合、もたもたしたfirefoxをお楽しみいただけます。(^ε^;;

cgroup名がPIDそのままでいいのか、という懸念はありますが、 概ね動作に耐えるものではないかと思います。

今回の宿題

今回の宿題は、

  FUSEでマウント中にネットワークを切断するなどして、その後のエラー
  発生の確認やリカバリの方法を模索してみましょう。

です。

FUSE でマウントして使っている最中に、通信できなくしたり、 サーバの電源をOFFにするなどして、どんなエラーが発生するのか、 リカバリ可能かどうか、可能ならその手順を、確認してみてください。

…はい、例によって見切り発車的な宿題です。

あとがき

いま、本業で、とあるソフトの改良を行っています。

もとは、Java で書かれた GUI なアプリケーションで、 お客様からご要望いただいた改良点を盛り込もうとしています。

Java自体まったく知らないわけではなく、追加する機能も難しいわけではないため、 さほど時間をかけなくてもできるだろうと軽く見ていました。

…ですが、設計を終えて実装に入ると、想定していない部分がわらわらと出てきて、 細部の設計を見直して再見積りする、という負のスパイラルを繰り返してしまっています。

たとえば、ある処理を実装する際に、既存の関数では設定できないため、 その部分を追加で実装しないといけない、 的なことを再帰的に繰り返しているという次第です。(芋づる式に…というやつですね。)

そのため、いまは、足りない機能を発見する度にメモをして、 テスト項目を書いて実装してテストした、という記録をベタに残しています。

ですが、わりと一貫性なくメモしているため、 抜けがあったりするのではないかという不安が、ずっと頭にこびりついています。
(はい、情報を一元管理できていない時点でアウトだと思います。)

こういうときに、チケットを発行して管理すれば、 漏れなくスケジュール管理などもできるのではないか、 ということにようやく気づきました。

というわけで、いままでは、 チケット駆動開発のことがいまいちわかっていなかったのですが、いま、 その重要性を理解…というか実感できたように思います。

チケット駆動開発 - Wikipedia
http://ja.wikipedia.org/wiki/チケット駆動開発

いまから導入するのはもう遅いので諦めますが、次の開発からは、 TracやRedmine などを使ってみたいと思います。

The Trac Project
http://trac.edgewall.org/
Overview - Redmine
http://www.redmine.org/

まあ、今回も次回もその次も、開発者は自分だけだと思いますが…。

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、11月4日(日) の未明にお会いしましょう!

 

「いますぐ実践! 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://usupi.org/k/ (モバイル栗日記)
http://twitter.com/kuriking/ (栗つぶやき)
http://facebook.com/kuriking3 (栗顔本)


[バックナンバーのトップへ] [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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本