Category Archives: 7-1.管理

ファイルをデバイスにしてマウントする

「mountコマンドに慣れる」の続きです。

前回ディレクトリをディレクトリにマウントしようとして失敗しました。

takk@deb9:~/tmp$ mkdir a b
takk@deb9:~/tmp$ sudo mount a b
mount:  /home/takk/tmp/a is not a block device
takk@deb9:~/tmp$ 

今回は、ファイルをloopデバイスに関連付けて、マウントします。
まずは、mountのドキュメントの、loopデバイスの説明を読んでみましょう。

takk@deb9:~/tmp$ man mount

省略

loop デバイス
       残ったタイプとしてもう 1 つ、loop デバイスを用いたマウントがある。 例え
       ば以下のコマンド

         mount /tmp/fdimage /mnt -t msdos -o loop=/dev/loop3,blocksize=1024

       は loop デバイス /dev/loop3 をファイル /tmp/fdimage  に関連付け、そして
       このデバイスを /mnt にマウントする。

       このタイプのマウントの際には   3   つのオプションが指定できる。   loop,
       offset, encryption である。 これらは実際には losetup(8)  のオプションで
       ある。  (これらのオプションはファイルシステムタイプに固有のオプションの
       他に 使用することができる。)

       loop デバイスの名前をコマンドラインで省略した場合 (`-o loop' のみを指定
       した場合) は mount はまだ使われていない loop デバイスを探してそれを利用
       する。 /etc/mtab を /proc/mounts へのシンボリックリンクにするような馬鹿
       をしなければ、  mount  によって割り当てられたいずれの  loop  デバイスも
       umount によって解放できる。 `losetup -d' を用いれば loop デバイスを手動
       で解放することもできる。 詳細は losetup(8) を見よ。

では、loopデバイスに関連付けるファイルを作成します。

takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ truncate -s2M file1
takk@deb9:~/tmp$ ls -lh file1
-rw-r--r-- 1 takk takk 2.0M  6月 23 14:00 file1
takk@deb9:~/tmp$ 

2MBのファイル、file1を作成しました。

次に、マウントするディレクトリaを作成。

takk@deb9:~/tmp$ mkdir a
takk@deb9:~/tmp$ ls -l
合計 36
drwxr-xr-x 2 takk takk    4096  6月 23 14:01 a
-rw-r--r-- 1 takk takk 2097152  6月 23 14:40 file1
takk@deb9:~/tmp$ 

file1は、現状オールゼロのデータとなっていいますので、ファイルシステムを構築します。
mkfsのドキュメントを確認。

MKFS(8)                     System Manager's Manual                    MKFS(8)

名前
       mkfs - Linux のファイルシステムを構築する

書式
       mkfs [ -V ] [ -t fstype ] [ fs-options ] filesys [ blocks ]

説明
       mkfs  は Linux のファイルシステムをデバイス (通常はハードディスクのパー
       ティ ション) 上に構築するために用いられる。 filesys  はファイルシステム
       を作成するデバイスの名前  (/dev/hda1,/dev/sdb2 など) またはマウントポイ
       ント (/,/usr,/home など) である。 blocks は作成するファイルシステムのブ
       ロック数である。


mkfsコマンドで、file1にext4を構築してみます。

takk@deb9:~/tmp$ sudo mkfs -t ext4 file1
mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done                            
Creating filesystem with 2048 1k blocks and 256 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

takk@deb9:~/tmp$

なんかいろいろメッセージが出ました。fileコマンドでどのようなファイルになったか確認してみます。

takk@deb9:~/tmp$ file file1
file1: Linux rev 1.0 ext4 filesystem data, UUID=81ac7637-7729-4859-bbf0-72996cb5c3cf (extents) (64bit) (large files) (huge files)
takk@deb9:~/tmp$ 

ファイルシステムのデータになってますね。
では、マウントします。 オプションに、-o loopを指定してmountを実行。

takk@deb9:~/tmp$ sudo mount ./file1 ./a -o loop
takk@deb9:~/tmp$ mountpoint a
a is a mountpoint
takk@deb9:~/tmp$ 

lsblkでブロックデバイスを確認。

takk@deb9:~/tmp$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0    2M  0 loop /home/takk/tmp/a
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0   36G  0 part /
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0    4G  0 part [SWAP]
sr0     11:0    1 55.3M  0 rom  /media/cdrom0
takk@deb9:~/tmp$ 

loop0が追加され、マウントポイントがディレクトリaとなりました。

dfも確認。

takk@deb9:~/tmp$ df
ファイルシス   1K-ブロック     使用   使用可 使用% マウント位置

省略

/dev/sr0             56614    56614        0  100% /media/cdrom0
/dev/loop0             987       29      816    4% /home/takk/tmp/a
takk@deb9:~/tmp$ 

こちらにも/dev/loop0が増えています。
lsの表示はどうなっているでしょうか。

takk@deb9:~/tmp$ ls -l
合計 33
drwxr-xr-x 3 root root    1024  6月 23 14:06 a
-rw-r--r-- 1 takk takk 2097152  6月 23 14:08 file1
takk@deb9:~/tmp$ 

ディレクトリaの、ユーザ、グループが、rootに変わっています。
マウントすると権限も更新されてしまうのでしょうか。

アンマウントしてみます。

takk@deb9:~/tmp$ sudo umount a
takk@deb9:~/tmp$ ls -l
合計 36
drwxr-xr-x 2 takk takk    4096  6月 23 14:01 a
-rw-r--r-- 1 takk takk 2097152  6月 23 14:40 file1
takk@deb9:~/tmp$ 

元に戻りました。ファイルの権限は、作成したユーザとなっています。

念の為、dfと、lsblkも、ちゃんとloopデバイスがなくなっているか確認。

takk@deb9:~/tmp$ df
ファイルシス   1K-ブロック     使用   使用可 使用% マウント位置

省略

/dev/sr0             56614    56614        0  100% /media/cdrom0
takk@deb9:~/tmp$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0   36G  0 part /
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0    4G  0 part [SWAP]
sr0     11:0    1 55.3M  0 rom  /media/cdrom0
takk@deb9:~/tmp$ 

lsblkは、本来ブロックデバイスの一覧を表示するものなので、こういう使い方は違うような気がしますが、
linuxをよく知らない人の前で使えば、きっと凄腕プログラマーに見えますね。

つづく