mountコマンドのmanを見ると、非常に説明が長く、mountコマンドで色々なことができる。
ここでは、たまに使いたいときがあるけど、すぐ忘れてしまうmountコマンドの使い方を書いておく。


基本のコマンド-リスト

 mount [-t vfstype] device dir

サポートされているファイルシステムタイプは以下のとおり。
 vfstype :adfs, affs, autofs, coda, coherent, cramfs, devpts, efs, ext, ext2, ext3,
      hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, ntfs,
      proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs,
      udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs


CD、DVDのマウント

以下のようにしてマウントする。-t オプションは指定しなくても自動で認識してくれる。mountのmanを見ると、DVDはiso9660の他に、udfというファイルシステムタイプもあるようだが、手元のDVDをいくつかためしてみが、udfではマウントできず、すべてiso9660だった。
なお、-r はCD-ROM、DVD-ROMだと、リードオンリーでマウントしないと警告メッセージがでるため。
 mount [-t iso9660] [-r] /dev/cdrom dir
 mount [-t iso9660] [-r] /dev/dvd dir
 mount [-t iso9660] [-r] /dev/sr0 dir <ーー/dev/cdrom と /dev/dvd は、/dev/sr0のシンボリックリンク


ループバック(loopback)デバイスのマウント

ループバックデバイスとは、任意のファイルを、ファイルシステムのようにマウントする機能。
ただし、ファイルを作成しただけではマウントできず、losetupコマンドを使ってファイル内にファイルシステムの作成が必要。
ファイルシステムを作成したファイルは、以下のようにしてマウントできる。
 mount file dir [-t vfstype] -o loop=/dev/loop?  <ーー/dev/loop?がloopbackデバイス。ubuntuではloop0~loop7

10MBのファイルを作成し、それを ext3 としてマウントするには、以下のようにする。
 $ dd if=/dev/zero of=./testfile count=10 bs=1024k  <ーー10MBのファイルを作成
 $ ls -l testfile
 -rw-r--r-- 1 usr grp 10485760 2010-06-27 00:02 testfile
 $ sudo losetup -f                  <ーー最初の未使用loopbackデバイスの表示
 /dev/loop0
 $ sudo losetup /dev/loop0 ./testfile         <ーーloopbackデバイスに作成したファイルを接続
 $ sudo mkfs -t ext3 /dev/loop0            <ーーloopbackデバイスを通して、testfile上にファイルシステム作成
 $ sudo mount -t ext3 /dev/loop0 tmp         <ーーtmpにloopbackデバイスをマウント
 $ mount | grep loop0
 /dev/loop0 on /home/ISO/tmp type ext3 (rw)
 $ df -m
 ファイルシステム 1M-ブロック 使用 使用可 使用% マウント位置
   ・・・途中略 ・・・
 /dev/loop0 10 2 9 12% /home/tmp   <ーー確かに10MBのサイズでマウントされている。
 $ sudo umount tmp
 $ sudo losetup -d /dev/loop0               <ーーtestfileのloopbackデバイスへの接続を切断
 $ sudo losetup /dev/loop0
 loop: デバイス /dev/loop0 の情報を取得できません: No such device or address  <ーー切断されているため

ファイルとloopbackデバイスが接続済みなら、「mount loopbackデバイス dir」でマウントできるが、未接続なら以下のようにすることで、マウント時に一時的に接続してマウントできる。一時的なので、umountすると接続が切れる。()
 $ sudo mount -t ext3 testfile tmp -o loop=/dev/loop0
 $ mount | grep loop
 /dev/loop0 on /home/ISO/tmp type ext3 (rw,loop=/dev/loop0)
 $ sudo umount tmp  
 loop: デバイス /dev/loop0 を削除できません: No such device or address  <ーー一時的なせいかエラーがでるが、アンマウントできる。

上記では、未使用のloopbackデバイスを探してからtestfileを接続したが、以下のようにすると未使用のものに接続してくれる。
ただ、接続時にどのloopbackデバイスに接続したか表示されないので、結局どれに接続されたか調べる必要がある。
 $ sudo losetup -f ./testfile <ーー最初の未使用loopbackデバイスに作成したファイルを接続
 $ sudo losetup /dev/loop0
 /dev/loop0: [0803]:918611 (/home/ISO/testfile)

ループバックデバイスを使うなら、1度はlosetupコマンドのmanをみるべき。
なお、losetupに -E や -e オプションがあり、暗号化モジュールが組み込まれていれば、loopbackデバイス上のファイルシステムを暗号化出きる模様(試してない)。セキュリティ要件が厳しいファイルがある場合に、loopbackデバイスを使って暗号化したファイルシステムを作って、そこにファイルを格納するなどの使い方に便利かと。

loopbackデバイスの個数は以下で確認できる。
 $ cat /proc/devices | grep loop
 7 loop

loopbackデバイスを増やす場合は以下のようにする。
Novellのhttp://support-j.novell.co.jp/tid/jp/00007000_/00007004.htmにでていた方法でSuSE用。Ubuntuでは実際にためしてないのであしからず。
 1./etc/modprobe.d/loopファイルを作成
   例えば、20個にしたい場合、次のようにloopデバイスの個数を指定します。
   options loop max_loop=20

   http://d.hatena.ne.jp/KoshianX/20080712/1215867901によれば、ubuntuの場合はファイル名が
  違うようで、以下のようにすればよいようです。
 $ sudo echo 'options loop max_loop=255' >/etc/modprobe.d/loopdev

 2. /dev/loopデバイスを必要な数だけ作成します。
  /dev/loop0から/dev/loop7までは存在するので、以下のように/dev/loop19まで作成します。

 for NODE in $(seq 8 19)
 do
 mknod -m 660 /dev/loop$NODE b 7 $NODE
 done
 chown root:disk /dev/loop*

 3. OSを再起動します。


ISOイメージのマウント

CD-ROMやDVD-ROMのISOイメージは、iso9660というファイルシステムをもった1つのファイルである。なので、上記のループバックデバイスを使うと、ISOイメージがマウントできる。
 $ sudo mount -t iso9660 -r pclinuxos-2009.1-jp.iso ./tmp -o loop=/dev/loop0
 $ mount | grep loop
 /dev/loop0 on /home/tomonari/ISO/tmp type iso9660 (ro,loop=/dev/loop0)
 $ sudo losetup /dev/loop0
 /dev/loop0: [0803]:815467 (/home/tomonari/ISO/pclinuxos-2009.1-jp.iso)


任意のディレクトリを任意のディレクトリにマウントする。(Linux 2.4.0 以降)

以下のようにすると、olddirをnewdirにマウントできる。
ファイルシステムのマウントオプションは、元のマウントポイントのものが敬称され、--bind/--rbind の後に -o オプションを指定して変更できない
 mount --bind olddir newdir     <ーolddir内のサブマウントはアタッチされない。
 mount --rbind olddir newdir     <ーolddir内のサブマウントもアタッチされる。

例:
 $ ls -l tmp
 合計 4
 -rw-r--r-- 1 usr grp 0 2010-06-26 23:02 fff
 drwxr-xr-x 2 usr grp 4096 2010-06-26 23:02 ttt
 $ ls -l tmp2
 合計 0         <ーーここには何もない。
 $ sudo mount --bind ./tmp ./tmp2
 $ ls -l tmp
 合計 4         <ーーもとのディレクトリでもアクセス可能
 -rw-r--r-- 1 usr grp 0 2010-06-26 23:02 fff
 drwxr-xr-x 2 usr grp 4096 2010-06-26 23:02 ttt
 $ ls -l tmp2
 合計 4         <ーー新たなマウント先でも同じ内容にアクセス可能
 -rw-r--r-- 1 usr grp 0 2010-06-26 23:02 fff
 drwxr-xr-x 2 usr grp 4096 2010-06-26 23:02 ttt


マウント済みマウントポイントを別のマウントポイントに移動(Linux 2.5.1 以降)

man上は「マウントされたツリーを纏めて他の場所に移動する」とある機能で、以下のようにする。
ためしたところだと、olddirにマウントされているのアンマウントして、アンマウントしたものをnewdirにマウントしなおす機能。
 mount --move olddir newdir

特にファイルシステム(デバイスファイル)でなくても、上記の --bind や --rbind でマウントした単なるディレクトリであっても、mountでマウントしたものなら移動可能な模様。
なお、移動なのでマウント後は、olddir配下には何もマウントされておらず、newdirをアンマウントしてもolddirはアンマウントされたままだった。

例:
 $ mount | grep tmp2
 /home/tmp on /home/tmp2 type none (rw,bind)  <ーーtmp2にマウントされている
 $ ls -l tmp3
 合計 0                    <ーーtmp3には何もマウントされていない。
 $ ls -l tmp2
 合計 4
 -rw-r--r-- 1 usr grp 0 2010-06-26 23:02 fff
 drwxr-xr-x 2 usr grp 4096 2010-06-26 23:02 ttt
 $ sudo mount --move ./tmp2 ./tmp3
 $ ls -l tmp2
 合計 0                    <ーーtmp2にはマウントされていない。
 $ ls -l tmp3
 合計 4                    <ーーtmp3にマウントされている。
 -rw-r--r-- 1 usr grp 0 2010-06-26 23:02 fff
 drwxr-xr-x 2 usr grp 4096 2010-06-26 23:02 ttt


tmpfs - メモリをファイルシステムとしてマウントする

以下のようにすると、メモリの一部をファイルシステムとして任意のディレクトリにマウントできます。
 mount -t tmpfs tmpfs dir [-o size=XXX]

メモリ上なので、高速に読み書きできるが、アンマウントしたり、リブートするとその中のファイルはなくなる。
ファイルシステム内のファイル量に応じて、動的にメモリが割り当てられ、中のファイルを削除するとメモリが開放される、仮想メモリ上に構築されているため、物理メモリが不足すると、仮想メモリが使われる。
メモリを使い尽くすことの対策として、ファイルシステムの容量を size オプションにより指定できる。

 $ sudo mount -t tmpfs -o size=64m tmpfs ./tmp2  <ーー64MBの容量でtmp2にマウント sizeの単位はg,m,k
 $ mount | grep tmp2
 tmpfs on /home/tomonari/tmp2 type tmpfs (rw,size=64m)  <ーーマウントされている

なお、tmpfsについては、仮想記憶(VM)ファイルシステムとバインド・マウントの使い方が詳しい。
また、tmpfsの正式なマウントポイントは /dev/shm で、Ubuntu10.04もデフォルトでマウントされています。


aufs(Another UnionFS) ー 複数のディレクトリを重ね合わせる。

UnionFSは、複数のディレクトリを重ね合わせて、それらのディレクトリの和集合を合成するファイルシステム。
aufsとは、UnionFSの信頼性と性能改善を狙って開発されたものである。
以下のようにして、ディレクトリを重ね合わせられる。マウント元が none なのは、重ね合わせたディレクトリがマウント元であり、オプションとして指定しているので、マウント元としては指定しなくてよい(常にnoneでよい)。また、mountdirは重ね合わせたディレクトリと同じでも別でもよい。(別にした場合は、mountdir配下に合ったファイルやディレクトリは見えなくなる。)
 mount -t aufs -o br:dir1:dir2:dir3:... none mountdir

例:
 $ ls tmp*   複数のtmp?ディレクトリを作成し、ファイルを入れておく。
 tmp:
 dir1 file1

 tmp2:
 file2

 tmp3:
 file3

 tmp4:
 file4

 tmp5:
 file5
 $ sudo mount -t aufs -o br:./tmp:./tmp2:./tmp3:./tmp4 none ./tmp5 <ーーtmp5に、tmp、tmp2、tmp3,tmp4を重ね合わせたものをマウント
 $ mount | grep tmp5
 none on /home/tomonari/tmp5 type aufs (rw,br:./tmp:./tmp2:./tmp3:./tmp4)
 $ ls ./tmp?
 ./tmp:     <ーー重ね合わせても、もとのディレクトリでもアクセスできる。
 dir1 file1

 ./tmp2: 
 file2

 ./tmp3:
 file3

 ./tmp4:
 file4

 ./tmp5:
 dir1 file1 file2 file3 file4  <ーー重ね合わせたディレクトリのファイルが見える。

aufs配下のファイルに書き込んだり削除した場合の動きを確認してみる。
 $ echo "add string" > ./tmp5/newfile  <ーー新規ファイルに書き込み
 $ echo "add existed" > ./tmp5/file3  <ーー既存のファイルに書き込み
 $ ls ./tmp*
 ./tmp:
 dir1 file1 file3 newfile      <ーー一番最初に、file3もnewfile3も作成されている。

 ./tmp2:
 file2

 ./tmp3:
 file3

 ./tmp4:
 file4

 ./tmp5:
 dir1 file1 file2 file3 file4 newfile  <ーーnewfileはここにもできている。
 $ cat ./tmp3/file3          <ーーもとのtmp3配下のfile3にはかかれていない。
 $ cat ./tmp5/file3          <ーーあらたに作成されたfile3にはかかれている。
 add existed
 $ rm tmp5/file3
 $ ls tmp*
 tmp:
 dir1 file1 newfile         <ーーfile3は消えている。

 tmp2:
 file2

 tmp3:
 file3                 <ーーfile3は残っている。

 tmp4:
 file4

 tmp5:
 dir1 file1 file2 file4 newfile  <ーーfile3は消えている。

削除とか、他にも色々確認んしてみたいことはあるが、それはまたそのうち。
LiveCDのLinuxなどで、CD-ROMは書き込み不可にも関わらず、ファイルを作成できたりするのは、このUnionFSやaufs上にtmpfsを重ね合わせて、CD-ROM上のファイルツリーを見せつつ、メモリ上に書き込み可能にしているからである。

cifs(Common Internet File System) - Windowsのフォルダ(sammbaも)をマウントする

昔は、sambaの共有ディレクトリをLinuxのマシンからマウントする場合は、smbmountコマンドを使ったのだが、RHEL5.4にはそのコマンドがなくなっていた。調べてみると、今はmountコマンドの-tオプションに「cifs」を指定するらしい。

 mount -t cifs //<ホスト名>/public /mnt/samba -o  rw,username=<ユーザID>, \
  iocharset=utf8,file_mode=0777,dir_mode=0777


名前:
コメント:


最終更新:2011年05月15日 09:16