Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2008年10月26日日曜日

外付けHDDのパーティション・マウント・所有権の設定 このエントリーを含むはてなブックマーク

本記事では、Ubuntu 8.04の導入されたPCに外付けHDDをUSB接続して、パーティションを切り、マウントポイントの登録、一般ユーザがアクセスできるように所有権の変更など一連の作業をまとめる。

背景

私はUbuntuのバックアップを外付けHDDにとろうと思い、試したところうまくいかず試行錯誤を繰り替えしてしまった。その一番の原因は以下の通りであった。バックアップは、rsyncという同期をとるツールを使って自動的にバックアップをとる仕組みをスクリプトで書こうと試みた(本記事の末尾に、スクリプトの載せている)。

設定は、ノートPCにインストールしているUbuntuのhome, etc, var, usr/localといったディレクトリ以下をUSB接続の外付けHDDにバックアップをとることである。実際にスクリプトを動かせてみると、ほとんどすべてのファイルが下のような

chown ・・・・:Operation not permitted

というエラーによって失敗してしまった。

エラー出力は以下の通りである:

2008/10/26 20:12:38 [6028] rsync: chown "/media/tstar/200810backup/home/waterman/.cache/audacious/thumbs/.Classic1.3.png.x3IqDy" failed: Operation not permitted (1)
2008/10/26 20:12:38 [6028] >f+++++++++ home/waterman/.cache/audacious/thumbs/Default.png
2008/10/26 20:12:38 [6028] rsync: chown "/media/tstar/200810backup/home/waterman/.cache/audacious/thumbs/.Default.png.WEqFI6" failed: Operation not permitted (1)
2008/10/26 20:12:38 [6028] >f+++++++++ home/waterman/.cache/audacious/thumbs/Ivory.png
2008/10/26 20:12:38 [6028] rsync: chown "/media/tstar/200810backup/home/waterman/.cache/audacious/thumbs/.Ivory.png.pEaHOE" failed: Operation not permitted (1)

おそらく「バックアップ先に転送しようとしたけれど、アクセス権がないのでできません」らしいことは分かる。もちろん、sudoを使ってルート権限を持った状態でコマンドを実行しているのにである。これを解決するために、1ステップづつ試してみた結果を以下にまとめる。

(注)同じ症状でうまくバックアップをとれないという報告がUbuntu Forumsなどで見られたが、直接 解決につながる報告を見つけることができなかった。

HDDをfat32でパーティションを切る。

何が原因なのかよく分からないので、一度まっさらな状態にしてゼロから確認してみようと思った。まずGPartedというパーティションを切るツールをsynapticからインストールする。これはGUIで簡単にパーティション作業ができるので非常に便利なツールである(なぜか、「すべてのデバイスをスキャン中…」というところでやたらと時間がかかるのが難点)。

GPartedのウィンドウ

このアプリで、既存のファイルシステムを削除してから、新規ファイルシステムとしてfat32を選択する。パーティションが切れたら、念のためフォーマットもしておく。また、HDDのデバイス名(図では、/dev/sdb1となっている)を確認しておく。

HDDのマウントポイントを/etc/fstabに登録する。

/etc/fstabは、システムにマウントされるデバイスのマウント先が登録されている。この設定ファイルに次の1行を追加する。

/dev/sdb1 /media/tstar vfat  iocharset=utf8,umask=000 0 0

1番目の項目はデバイス名、2番目の項目はマウントポイントである。なので、Gpartedあるいは次のコマンド

$ sudo fdisk -l
でデバイス名を確認する必要がある。

また、マウントポイントとして/media/tstarがなければ作成する。

$ sudo mkdir /media/tstar

そして、

$ sudo mount /media/tstar
を実行するとマウントできる。ちなみに、これまではGUIからマウント、アンマウントの操作をできていたのに、なぜかGUIからの操作ができなくなった。CUIからmountあるいはumountのコマンドで操作できるので問題ないのだが、どういう訳だろう?

実験

上で説明した設定の下で、まずマウント先のディレクトリの所有権をユーザに変更することを試みた。 (もし所有権を変更できたならば、アクセスする権限がないなどと怒られないだろうから)

$ cd /media
$ sudo mount tstar
$ ls -al
lrwxrwxrwx  1 root     root        7 2008-09-07 02:52 floppy -> floppy0
drwxr-xr-x  2 root     root     4.0K 2008-09-07 02:52 floppy0
drwxr-xr-x  3 root     root     4.0K 2008-10-26 20:49 tstar
drwxr-xr-x  4 root     root     4.0K 2008-10-26 21:04 .
drwxr-xr-x 23 root     root     4.0K 2008-10-26 18:48 ..

このようにHDDであるtstarの所有者はもちろんrootになっているので、所有者を変更するため

$ sudo chown ユーザ名:ユーザ名 tstar
と実行してみたが、permission deniedというようなエラーメッセージが出て失敗した。また、ダメ押しでbackupスクリプトを走らせてみたが、また上と同じ症状が発生した。したがって、別の方法でトライすることにした。

(注)マウントしないで所有権の変更を試みたら、うまく変更できた。しかし、その後にマウントしたら、自動的に所有権がrootに変わっていたので、結局ダメだった。

HDDをext3でパーティションを切る。

パーティションの切り方は、ファイルシステムをext3に指定することを除いて上とまったく同じ。

HDDのマウントポイントを/etc/fstabに登録する。

マウントポイントの登録は今度は

/dev/sdb1       /media/tstar    ext3    defaults,relatime       0 0
という一行を/etc/fstabに挿入する。

実験

今回も同じように所有権の変更を試みた。

$ cd /media
$ sudo mount tstar
$ ls -al
lrwxrwxrwx  1 root     root        7 2008-09-07 02:52 floppy -> floppy0
drwxr-xr-x  2 root     root     4.0K 2008-09-07 02:52 floppy0
drwxr-xr-x  3 root     root     4.0K 2008-10-26 20:49 tstar
drwxr-xr-x  4 root     root     4.0K 2008-10-26 21:04 .
drwxr-xr-x 23 root     root     4.0K 2008-10-26 18:48 ..

$ sudo chown ユーザ名:ユーザ名 tstar
今度はうまく所有権を変更できた。そして、バックアップスクリプトを走らせてみると、エラーもなくバックアップをとることができた!

(補足)アンマウントした後に、再度マウントしても所有権はユーザのままだった。また、再起動しても保存されていた。

分かったこと

ほとんどファイルシステムが違うだけの2通りの方法を試みて一方が成功して、他方が失敗したので、ファイルシステムが原因なのではないかと思われる。実は、後で調べて分かったことだが、vfat, fatなどのファイルシステムをマウントしたとき、基本的に所有者がrootになってしまうようだ。もしユーザやグループを指定してマウントしたいならば、マウントオプションで指定するかfstabに記述しておく必要がある。

例:

$ mount /media/tstart -o uid=xxx, gid=yyy

参考: 「バックアップ用ポータブルドライブに最適なファイルシステムに関する一考察」 「[linux-users:22683] mount option for fat (Re: Mosaic)

バックアップスクリプト

次のスクリプトの処理手順は

  1. バックアップ先のディレクトリがなければ作成する。
  2. インストール済みのパッケージリスとを作成する。
  3. 各ディレクトリ以下をrsyncでバックアップをとる。
ただし、.gvfsにマッチするものは無視する。バックアップ先のディレクトリは月ごとに新規作成する。パッケージリストとバックアップログは、実行する度にとる。

0 コメント:

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。