本記事では、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で簡単にパーティション作業ができるので非常に便利なツールである(なぜか、「すべてのデバイスをスキャン中…」というところでやたらと時間がかかるのが難点)。
このアプリで、既存のファイルシステムを削除してから、新規ファイルシステムとして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)」
バックアップスクリプト
次のスクリプトの処理手順は
- バックアップ先のディレクトリがなければ作成する。
- インストール済みのパッケージリスとを作成する。
- 各ディレクトリ以下をrsyncでバックアップをとる。
0 コメント:
コメントを投稿