Pythonこの広告は、90日以上更新していないブログに表示しています。2008-11-15LinuxでUSB外付けディスクを快適にマウントするLinuxでUSB外付けディスクをつないでマウントしようとするとき、接続する順番や環境によって各デバイスが/devディレクトリのどこにマップされるのかが一意に定まりません。このため、頻繁に外付けディスクを使うことが前提となる環境において、マウントポイントを自動的に統一することができず非常に不便です。そこでこのエントリでは、外付けディスクのマウントの煩わしさを解決する方法を紹介いたします。Debianをはじめとして、最近のLinuxディストリビューションで採用されているカーネルでは、接続されているディスクを、接続順や接続環境に依らずに一意に判別するため、画期的な手段を用意しています。以下にID,Label,Path,UUIDの4種類からデバイスマップを取得できるのです。by-uuidそれぞれのディレクトリには各ディスクやパーティーションのデバイスファイルにシンボリックリンクが張られており、ディスクが持つ固有情報をキーとして利用し、マウントに活用することができます。このエントリでは、利用できる4つのキーのうちUUIDを利用することによって、接続順に依らず自動的に同じ場所にマウントする環境を実装してみます。Identifierの略語で、様々なデバイスを一意に識別するために利用されるものです。表現すると難しく聞こえますが、たいていの場合何も考えなくてもすでに割り振られているIDですから、このIDを有効活用してみましょう。HDD:1TB)です。Debianのランレベルは2で、Gnome環境やKDE環境の自動マウントは無効になっているものとします。基本編と応用編に分け、実装方法を紹介していきます。基本編まず、同じデバイスを同じ場所にマウントをするには、以下の2つの作業を行います。各デバイスのUUIDを調べるUUIDを利用してマウントするでは、順番に確認していきましょう。各デバイスのUUIDを調べるまず、各デバイスのUUIDを調べてみます。USBメモリから調べます。USBメモリをPCに接続し、直後に以下のコマンドを実行します。diskすると、接続されたデバイスの情報が表示されます。今回のこの表示では、[sdb]という文字列から、/dev/sdbにマップされたことがわかります。/dev/sdb2がそれらに対応しているということも下から2行目の情報で判断できます。2つのパーティーションが認識されていますが、製品によってパーティーション構成は異なるので、適宜読み替える必要があります。今回の製品はsdb1のみをデータ保存領域として利用しているものなので、sdb1をマウント対象とします。この/dev/sdb1がマウントしたいパーティーションだということがわかったので、このUUIDを調べましょう。いっても特別な作業は必要ありません。接続してから/dev/disk/by-uuid/のファイルリストを見てみます。../../sdb13B69-1AFDというシンボリックリンクが/dev/sdb1に向けて張られていることがわかります。この3B69-1AFDという文字列が今回試すUSBメモリのUUIDです。仮に、接続順などの関係でデバイスが異なる場所にマップされても、この/dev/disk/by-uuid/3B69-1AFDというシンボリックリンクが適宜リンク先を張り替えてくれるので、マウント時のデバイス名の代わりにこのシンボリックリンクを指定するようにすれば、デバイスのマップ名をいちいち調べ直さなくてもよいことになります。ちなみに、UUIDのほか様々なパーティーション情報を取得するコマンドにvol_idというものがあります。/dev/sdb1ID_FS_USAGE=filesystemID_FS_TYPE=vfatID_FS_VERSION=FAT16ID_FS_UUID=3B69-1AFDID_FS_UUID_ENC=3B69-1AFDID_FS_LABEL=*****ID_FS_LABEL_ENC=*****ID_FS_LABEL_SAFE=*****この結果からもID_FS_UUIDフィールドの値、つまり3B69-1AFDがUUIDであることを確認できました。ほかにも、ファイルシステムがFAT16であることなど、マウント時に有用な情報が得られるので、こちらのコマンドも覚えておくと便利かもしれません。UUIDを利用してマウントするUUIDもわかったところで、実際にマウントをしてみましょう。マウントポイントを作成します。/mnt/usbdisk1作成したマウントポイントにUSBメモリをマウントします。ファイルシステムはvfatを指定し、書き込み権限を一般ユーザにも与えるためにumask=000を指定することにします。umask=000エラーが出なければマウント成功です。上記のmountコマンドをスクリプトか何かに保存しておけば、いちいちデバイス名を調べる必要がなくなるのです。dfコマンドでマウント結果を見てみましょう。/mnt/usbdisk1問題なくマウントできました。他のUSB外付けディスクのUUIDについても同様の方法で調べ、すべて把握しておけば、いくつどの順番でデバイスを接続したとしても、どこにマップしているかを調べる必要がないので、2回目以降のマウント作業はとても便利になるでしょう。基本ができたら、autofsというツールを使ってさらに便利な環境を構築してみましょう。autofsは、マウントオプションなどを事前に登録しておけば、マウントとアンマウントをファイルアクセス要求に応じて自動的に行うツールです。autofsの設定ファイルにUUIDを活用するのです。autofsの導入Ubuntuをはじめとした最近のディストリビューションにはautofsのパッケージが用意されているので導入は非常に簡単です。Ubuntuの場合uuidをautofsに登録インストールが完了したら2つの設定ファイルを書き換え、autofsにUSB外付けディスクのUUIDを登録します。この行のコメントアウト"#"を外すUSB外付けディスクのUUIDはauto.miscに登録していきます。マウントオプションは適宜パーティーションに応じて変更する必要がありますので注意してください。SATA-USB外付けケース入りファイルの編集が終わったらautofsを再起動します。restart設定が正しく反映されているか見てみます。28(省略)UUIDを指定して自動マウントを行うことができました。このようにしておけば、接続順を気にせずに固定のマウントポイントでUSB外付けディスクにアクセス可能です。autofsは一定時間のアクセスがない場合、自動的にデバイスをアンマウントしてくれますが、取り外すときには必ずdfコマンドでマウントされていないことを確認してから取り外すようにしましょう。アンマウントされていない場合は、root権限でumountで手動アンマウントし、取り外せば問題ありません。以上、UUIDを利用したUSB外付けディスクのマウント方法をご紹介しました。UUID以外にもラベルやデバイスIDを使うことでも同様のことができます。この方法は、Linuxでやっかいだった外付けディスクのマウントの煩わしさを鮮やかに解決してくれます。一度は試されることをお勧めします。2017で講演をしました月別アーカイブAmazonはてなブログをはじめよう!colspanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。