2010年2月25日木曜日

autofsを使ってISOファイルを自動マウントする

Linux の autofs で、設定値を書いたファイルのほかにスクリプトが使えるということに2~3年ぐらい前に気づいたので、「ISOファイルを自動マウントする仕組みを作ってやろう」と思っていました。今頃ながら試しに実装してみましたので、ご紹介します。

/etc/auto.master

#
# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#/misc  /etc/auto.misc --timeout=60
#/smb   /etc/auto.smb
#/misc  /etc/auto.misc
#/net   /etc/auto.net
/export /etc/auto.export
/dvd    /etc/auto.dvd --timeout=60


/etc/auto.dvd (-r-xr-xr-x)

#!/usr/bin/perl

($key) = @ARGV;
$dvd = sprintf('/export/archives/ISO/%s.ISO', $key);

if (-e $dvd) {
        print "         -fstype=auto,ro,loop    :$dvd\n";
}


つかいかた。/dvd/≪ISOイメージのベースネーム≫ に cd すると、勝手にマウントされます。

hasegaw@vm245:~$ mount | grep dvd
automount(pid3743) on /dvd type autofs (rw,fd=4,pgrp=3743,minproto=2,maxproto=4)
hasegaw@vm245:~$ ls -l /dvd/MXXXXXX_FRONTIER_01
total 4
dr-xr-xr-x 2 4294967295 4294967295   40 2008-06-18 22:23 AUDIO_TS
dr-xr-xr-x 2 4294967295 4294967295 1028 2008-06-18 22:23 VIDEO_TS
hasegaw@vm245:~$ mount | grep dvd
automount(pid3743) on /dvd type autofs (rw,fd=4,pgrp=3743,minproto=2,maxproto=4)
/export/archives/ISO/MXXXXXX_FRONTIER_01.ISO on /dvd/MXXXXXX_FRONTIER_01 type udf (ro,loop=/dev/loop0)



用が済んだら --timeout 秒経過後、大体1分後にアンマウントされる。

hasegaw@vm245:~$ mount | grep dvd
automount(pid3743) on /dvd type autofs (rw,fd=4,pgrp=3743,minproto=2,maxproto=4)



この仕組みの利用例。HDD上にため込んだDVDイメージをiPodに変換する際に実際に入力したコマンドです。たくさんの ISO イメージをハシゴするような作業をバッチで仕掛る場合など、イメージのマウント・アンマウントが autofs が勝手に行うので意識する必要がありません。


$ for i in 01 02 03 04 05 06 07 08 09; do echo mkmp4_linux -d /dvd/MACROSS_FRONTIER_$i -p iPod; done

その他の応用としては Linux のインストール DVD をレポジトリにため込み、ディレクトリ移動のみで参照できる環境を提供を想定しています。

懸念事項としては、この仕組みの利用頻度が上がると loop デバイスを使い切ってしまい、自動マウントできなくなるトラブルが考えられます。その場合には /etc/modules.conf 等で loop デバイスの個数を増やすなどの対策が考えられます。