「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をよく知らない人の前で使えば、きっと凄腕プログラマーに見えますね。
つづく
コメント