マウントとシンボリックリンク何が違うの

もちろんマウントとシンボリックリンクは、全然違う機能なんですが、
ただのマウントではなく、前回使ったmount –bindでのマウントのことです。

では、シンボリックリンクから。
ディレクトリaを作成し、aのシンボリックリンクbを作成。

takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ mkdir a
takk@deb9:~/tmp$ ln -s a b

ディレクトリaのシンボリックリンク、できました。簡単ですねえ。

lsでの見え方を確認。

takk@deb9:~/tmp$ ls -ld a b
drwxr-xr-x 2 takk takk 4096  6月 25 22:42 a
lrwxrwxrwx 1 takk takk    1  6月 25 22:42 b -> a
takk@deb9:~/tmp$ 

シンボリックリンクは、lsで見ても、明らかにディレクトリとは異なっています。
サイズも1になってます。

適当なファイルをディレクトリaに作っておきます。

takk@deb9:~/tmp$ echo HELLO >a/file1

中にファイルを作成しても、lsでの見え方は変わりません。

takk@deb9:~/tmp$ ls -ld a b
drwxr-xr-x 2 takk takk 4096  6月 25 22:42 a
lrwxrwxrwx 1 takk takk    1  6月 25 22:42 b -> a

stat でa bそれぞれ確認。

takk@deb9:~/tmp$ stat a b
  File: a
  Size: 4096            Blocks: 8          IO Block: 4096   ディレクトリ
Device: 801h/2049d      Inode: 800186      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    takk)   Gid: ( 1000/    takk)
Access: 2018-06-25 22:42:20.590005001 +0900
Modify: 2018-06-25 22:42:58.702005001 +0900
Change: 2018-06-25 22:42:58.702005001 +0900
 Birth: -
  File: b -> a
  Size: 1               Blocks: 0          IO Block: 4096   シンボリックリンク
Device: 801h/2049d      Inode: 547072      Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/    takk)   Gid: ( 1000/    takk)
Access: 2018-06-25 22:42:42.686005001 +0900
Modify: 2018-06-25 22:42:39.510005001 +0900
Change: 2018-06-25 22:42:39.510005001 +0900
 Birth: -
takk@deb9:~/tmp$ ls -l */*
-rw-r--r-- 1 takk takk 6  6月 25 22:42 a/file1
-rw-r--r-- 1 takk takk 6  6月 25 22:42 b/file1
takk@deb9:~/tmp$ 

statも、シンボリックリンクと認識してます。
あと、ファイルを作成したタイミングで、ディレクトリaのタイムスタンプも更新されていますね。
しかし、シンボリックリンクbのタイムスタンプはaに追従するというわけではないようです。
そして、aとbのInodeは別物ですね。

サイズを確認します。

takk@deb9:~/tmp$ du -h
8.0K	./a
12K	.
takk@deb9:~/tmp$ 

シンボリックリンクに関しては表示されませんでした。
(辿るには、-Lを指定します)

aとbに格納されているファイルをls。同じファイルが入ってます。

takk@deb9:~/tmp$ ls -l */*
-rw-r--r-- 1 takk takk 6  6月 25 22:42 a/file1
-rw-r--r-- 1 takk takk 6  6月 25 22:42 b/file1
takk@deb9:~/tmp$ 

次に、マウント。先ほど使ったa bは削除して、mount –bindします。

takk@deb9:~/tmp$ rm -rf a b
takk@deb9:~/tmp$ mkdir a b
takk@deb9:~/tmp$ sudo mount --bind a b

できました。lnほど簡単ではないですが、簡単ですね。
lsの見え方は、

takk@deb9:~/tmp$ ls -ld a b
drwxr-xr-x 2 takk takk 4096  6月 25 22:48 a
drwxr-xr-x 2 takk takk 4096  6月 25 22:48 b
takk@deb9:~/tmp$ 

本物のディレクトリが2つ並んでいます。
aに適当なファイルを作成。

takk@deb9:~/tmp$ echo HELLO >a/file1

ディレクトリ自体のサイズも変わりません。

takk@deb9:~/tmp$ ls -ld a b
drwxr-xr-x 2 takk takk 4096  6月 25 22:49 a
drwxr-xr-x 2 takk takk 4096  6月 25 22:49 b
takk@deb9:~/tmp$
takk@deb9:~/tmp$ stat a b
  File: a
  Size: 4096      	Blocks: 8          IO Block: 4096   ディレクトリ
Device: 801h/2049d	Inode: 800186      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    takk)   Gid: ( 1000/    takk)
Access: 2018-06-25 22:16:50.134005001 +0900
Modify: 2018-06-25 22:19:23.606005001 +0900
Change: 2018-06-25 22:19:23.606005001 +0900
 Birth: -
  File: b
  Size: 4096      	Blocks: 8          IO Block: 4096   ディレクトリ
Device: 801h/2049d	Inode: 800186      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    takk)   Gid: ( 1000/    takk)
Access: 2018-06-25 22:16:50.134005001 +0900
Modify: 2018-06-25 22:19:23.606005001 +0900
Change: 2018-06-25 22:19:23.606005001 +0900
 Birth: -
takk@deb9:~/tmp$

ディレクトリaとbのInodeは同一です。タイムスタンプもa b同期しています。
使用容量を見ると、

takk@deb9:~/tmp$ du -h
8.0K	./a
8.0K	./b
20K	.
takk@deb9:~/tmp$ 

両方のサイズが表示されました。
もうすこし大きなサイズのファイルを作成してみます。

takk@deb9:~/tmp$ seq 10000 > a/file2
takk@deb9:~/tmp$ find
.
./a
./a/file1
./a/file2
./b
./b/file1
./b/file2
takk@deb9:~/tmp$

使用容量を確認。

takk@deb9:~/tmp$ du -h
56K	./a
56K	./b
116K	.
takk@deb9:~/tmp$ 

aとbは同じものなのに、サイズだけ2倍になっています。
duでディスク使用量を確認している場合は、気をつけないといけないですね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA