Fedoraサーバーで複数のUSBを使用する方法

投稿日: 2009年4月13日 | カテゴリ:『自宅サーバー』>メンテナンス

Fedoraサーバーにおいて、ランレベル5(gnomeなどのGUIインターフェース)でUSBのマウント操作を行う場合には、USBをソケットに差し込むだけで自動認識してくれます。以下では、レベル5でのマウント・プロセスを参考にしながら、ランレベル3(PuTTYなどの端末)でUSBハードディスクとUSBメモリーを操作する方法を紹介いたします。

1. 外付けUSBハードディスクの設置

まず、レベル5のデスクトップにログインして使用するUSBハードディスクをUSBソケットに接続します。しばらくすると、ハードディスクは自動的にマウントされ、そこに含まれているパーテションの数だけウインドウとハードディスク・アイコンが表示されます。「ファイル」-「システム」-「端末」を表示し、dfコマンドを発してマウントされているデバイスとマウンティング・ポイントを確認します。デバイスは通常、/dev/sdb1~sdbn(nはパーテションの数)が使用されます。マウンティング・ポイントは、/media/volum-labelになります。ボリュームラベルのない場合には、/media/disk-1~disk-nにマウントされます。
今回は、セキュリティ上、パーミッションの設定が必要なのでハードディスクをext3にフォーマットして使用することにします。

//dfコマンドでマウントされているハードディスクを確認します。
[root@localhost ~]# df
Filesystem           1K-ブロック    使用    使用可    使用% マウント位置
....
/dev/sdb1              6230140    687428   5226236  12% /media/disk

//USBハードディスクをアンマウントする。
//umountしないとformatの際に次のようなエラーが出ます。
// /dev/sdb1 is mounted; will not make a filesystem here!
[root@localhost ~]# umount /dev/sdb1

//mke2fsは、ハードディスクをフォーマットするコマンド。
//オプション -j を指定するとext3でフォーマットされます。
//オプション -L の次にはボリュームラベルを指定します。ここではbackupを指定しています。
[root@localhost ~]# mke2fs -j -L backup /dev/sdb1
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=backup
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
395920 inodes, 1582394 blocks
79119 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1623195648
49 block groups
32768 blocks per group, 32768 fragments per group
8080 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

一旦、USBハードデスクの電源を切ります。あるいはUSBソケットからUSBを外します。再度電源を入れるかプラグを挿し込むかすると、システムはUSBデスクを自動的に認識し、/media/backupにマウントしてくれます。
次にレベル3で起動時に自動的にマウントできるように設定を行います(Fedora10ではレベル3の自動マウントはデフォルトでoffになっています)。マウンティング・ポイントのディレクトリを作成します。

mkdir /media/backup

rc.localに次のような1行を挿入しておきます。

mount /dev/sdb1 /media/backup

再起動してUSBハードディスクがマウントされていることを確認します。

2. USBメモリー・ステックのマウント

USBハードディスクのときと同じように、レベル5で使用されているデバイスを確認しておきます。メモリー・スティックをUSBソケットに挿入してマウントを確認し、端末を開いてdfコマンドでデバイス名を確認しておきます。複数のUSBを使用する場合には各USB装置ごとに使用するデバイスが異なってきますのでそれぞれ確認してメモしておきます。2つ以上のUSBを同時に使用する場合には、複数のUSBをマウントしたときのデバイス名も確認しておきます。例えばUSB1を挿入し、次にUSB2を挿入した場合、あるいはその逆の場合にそれぞれデバイス名をメモしておきます。

//256MBのUSBメモリーを挿入
[root@localhost ~]# df
Filesystem           1K-ブロック  使用     使用可  使用%   マウント位置
....
/dev/sdc             254984      192    254792   1% /media/disk-1

//256MBのUSBメモリーをアンマウントする
[root@localhost ~]# umount /dev/sdc

//1GBのUSBメモリーを挿入
[root@localhost ~]# df
Filesystem           1K-ブロック    使用     使用可   使用%   マウント位置
....
/dev/sdc1              1013284    448524    564760  45% /media/disk-1

//2つのUSBを連続してマウントした場合のデバイス割当
[root@localhost ~]# df
Filesystem           1K-ブロック     使用     使用可  使用%  マウント位置
/dev/sdc1              1013284    448524   564760  45% /media/disk-1
/dev/sdd                254984     192     254792   1% /media/disk-2
[root@localhost ~]# 

レベル3の端末(SSHのPuTTY端末)を開いてマウンティング・ポイントを作成し、実際にマウントしてみます。

[root@localhost ~]# mkdir /mnt/usbfm
//256MBのUSBを接続し、マウント
[root@localhost ~]# mount /dev/sdc /mnt/usbfm
[root@localhost usbfm]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
....
/dev/sdc                254984     194  254790   1% /mnt/usbfm

//マウンティング・ポイントに移動し、USBの内容を確認
[root@localhost ~]# cd /mnt/usbfm
[root@localhost usbfm]# ll
合計 98
-rwxr-xr-x 1 root root   397 2003-01-23 15:11 ADSL&PPP接続マニュアル.txt
-rwxr-xr-x 1 root root 19968 2002-03-24 13:29 ADSL_Modem.xls
-rwxr-xr-x 1 root root 28160 2008-11-08 08:42 IP_CHECK_ERROR.doc
....

複数のUSBマウントに対応したプログラム
異なったUSBを挿入するごとにデバイスを確認するのは面倒なので次のようなスクリプトを作成して同一コマンドで異なったUSBをマウントできるようにします。
例えば、レベル5で確かめた、USB=254MBが/dev/sdc、USB=1GBが/dev/sdc1のデバイスを使用していたとします。

#!/bin/sh
mtpoint=/mnt/usbfm
if [ ! -d $mtpoint ]; then
mkdir $mtpoint
fi
mount -t auto /dev/sdc $mtpoint >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "USB=250MB(/dev/sdc)を$mtpointにマウントしました"
exit 0
fi
mount -t auto /dev/sdc1 $mtpoint >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "USB=1GB(/dev/sdc1)を$mtpointにマウントしました"
exit 0
fi
echo -e "マウント失敗"

3行目から5行目までは、マウンティングポイントのディレクトリが存在しない場合にそのディレクトリを作成するというコマンド・ブロックです。
6~15行目は、各USBごとのデバイスを指定してマウントするスクリプトです。1ブロックのマウントが成功すれば(挿入したUSBが当該デバイスに合っていれば)、USBはマウントされ、プログラムを終了します。成功しなければ(デバイスが合わない場合)次のブロックに移行します。第2のブロックでは他のUSB用のデバイスでマウント操作が行われます。この2つのブロックを通過すれば必ず1つのUSBがマウントされているはずです。
何らかの原因(USBがうまく挿入されていない、あるいはマウンティング・ポイントが既に使われている)でマウントが失敗した場合には、「マウント失敗」の表示がなされます。

追加のUSBを連続してマウントする場合のプログラム
追加のUSBを連続してマウントするときのスクリプトを以下のように作成します(2つのUSBを交互に単独に使用する場合にはこのプログラムは必要ありません)。例えば、レベル5で確かめた時の、追加のUSBが使用するデバイスが/dev/sddと/dev/sdd1だったとします。

#!/bin/sh
mtpoint=/mnt/usbfm2
if [ ! -d $mtpoint ]; then
mkdir $mtpoint
fi
mount -t auto /dev/sdd $mtpoint >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "追加USB (/dev/sdd)を$mtpointにマウントしました"
exit 0
fi
mount -t auto /dev/sdd1 $mtpoint >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "追加USB (/dev/sdd1)を$mtpointにマウントしました"
exit 0
fi
echo -e "追加マウント失敗"

基本的コンセプトは、mount_usb.shと同じです。追加USB用のマウンティング・ポイント(usbfm2)を作成する点と、追加する場合のデバイス名が変化しただけです。

マウントUSBをアンマウントするプログラム
アンマウント用のスクリプトを以下のように作成します、

#!/bin/sh
mtpoint=/mnt/usbfm
umount /dev/sdc >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "USB=250MB(/dev/sdc)をアンマウントしました"
exit 0
fi
umount /dev/sdc1 >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "USB=1GB(/dev/sdc1)をアンマウントしました"
exit 0
fi
umount /dev/sdd >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "USB(/dev/sdd)をアンマウントしました"
exit 0
fi
umount /dev/sdd1 >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "USB(/dev/sdd1)をアンマウントしました"
exit 0
fi
echo "アンマウント失敗"

各USBで使用される各デバイスに対してアンマウント用のブロックを連記しただけのプログラムです。

マウント用コマンドの簡略化
これらのスクリプトをいちいち入力するのは面倒ですので、.bshrcでalias(コマンド名の変更)を行い実際入力するコマンドを簡略化しておきます。各プログラムは、/root/programに保存されたものとします(プログラムのパーミッションは必ず実行可能にしておいてください)。

alias mtusb='/bin/sh /root/program/mount_usb.sh'
alias addmtusb='/bin/sh /root/program/add_mount_usb.sh'
alias umtusb='/bin/sh /root/program/umount_usb.sh'

実際のマウント操作
実際に、USBステックをソケットに挿入しレベル3の端末でマウントしてみます。

//USB=256MB をソケットに挿入しマウント
[root@localhost ~]# mtusb
USB=256MB (/dev/sdc)を/mnt/usbfmにマウントしました

//dfコマンドでマウント確認
[root@localhost ~]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
...
/dev/sdc                254984    194    254790   1% /mnt/usbfm

//USB=256MB をアンマウント
[root@localhost ~]# umtusb
USB (/dev/sdc)をアンマウントしました

//USB=256MBを外し、USB=1GBをソケットに接続しマウント
[root@localhost ~]# mtusb
USB=1GB (/dev/sdc1)を/mnt/usbfmにマウントしました

//マウントを確認
[root@localhost ~]# df
Filesystem           1K-ブロック    使用    使用可  使用% マウント位置
...
/dev/sdc1              1013284    448524  564760  45% /mnt/usbfm

//USB=256MBを第2のソケットに追加挿入し、追加マウント
[root@localhost ~]# addmtusb
追加USB (/dev/sdd)を/mnt/usbfm2にマウントしました

//dfコマンドで2つのUSBがマウントされていることを確認
[root@localhost ~]# df
Filesystem           1K-ブロック     使用     使用可  使用% マウント位置
....
/dev/sdc1              1013284    448524   564760   45%  /mnt/usbfm
/dev/sdd                254984     194     254790    1%  /mnt/usbfm2

//2つのUSBをアンマウント
[root@localhost ~]# umtusb
USB (/dev/sdc1)をアンマウントしました
[root@localhost ~]# umtusb
USB (/dev/sdd)をアンマウントしました
3. 問題点
  1. 複数のUSBをソケットに設置しているときは、umtusbコマンドで特定のUSBを指定してアンマウントできません。この場合には、umtusbを2回繰り返し、全てのUSBをアンマウントし、不要のUSBをプラグから外し、目的のUSBだけ再度マウントさせます。あるいは、dfでアンマウントしたいデバイス(xxx)を確認し,umount /dev/xxxで特定のUSBをアンマウントします。


コメントを残す




空欄に計算式を満たす数値を記入してください(必須)