环回文件与挂载

一、什么是环回文件系统?

    环回(loopback)的概念,在很多地方我们都可以看到,出现频率最多的可能就是网络相关的地方了。这里只讨论linux下的环回文件系统。文件系统,这个大家应该都了解,通常,要使用一个文件系统,我们首先要在硬件设备创建文件系统,然后将文件系统挂载在被称为挂载点(mount point)的目录上。那么什么是环回文件系统呢?环回文件系统就是指那些在文件中而非物理设备中创建的文件系统。比如我们可以创建一个文件,然后把这个文件格式化为我们常见ntfs、exfat或者ext4等文件系统格式,然后把它挂载在一个目录上使用。

二、创建一个特定大小的大文件

    ①在创建环回文件之前,我们要先要了解怎样去创建一个特定大小的大文件。先看下面这串命令:

 1: dd if=/dev/zero of=first.file bs=1M count=1

执行结果如下:

(A)

    这个命令会创建一个1MB大小的文件。dd命令是克隆输入的内容,并将副本写入到输出;if(input file)代表输入,stdin、设备文件、普通文件都可以作为输入,这个例子就是用设备文件作为输入;of(output file)代表输出,stdout、设备文件、普通文件等也可作为输出,这个例子是用first.file这个普通文件作为输出;bs代表以字节为单位的块大小(block size,BS),count代表被复制的块数。

    ②接下来查看下我们刚才创建的文件:

(B)

(C)

    我们看到上下两个图出来的结果不一样,因为上面的图(B)是我家里的虚拟机系统LinuxMint,下面的图(C)是我在公司服务器上截的图系统是SUSE,实际上下面的图(C)要更准确一些。其实创建的文件占用空间并不是1MB,比1MB要多,这是为什么呢?主要还是涉及到BS这个概念,具体的原因也比较复杂,真说起来可能又是一片长博客了,大家可以参考这篇文章Linux文件系统十问,腾讯的工程师阐释非常清晰,几乎是我见过的思路和讲解最清楚的文章了(我大腾讯威武!)。

    ③上面的命令里有个/dev/zero,这是一个字符设备,它会不断地返回0值;如果不指定if的值,dd默认会从stdin读取输入,同样,如果不指定of的值,dd会将stdout作为默认输出。上面dd命令的输出结果,我们还看到了这样一条数据:

 1: 1048576 bytes (1.0 MB) copied, 0.00157623 s, 665 MB/s

意思大家也都很容易看出来,由此,我们还可以用dd命令传输大量的数据,来测试硬盘的读写速度,上面的命令里"if=/dev/zero"不产生IO,所以可以用来测纯写速度;同样,用"of=/dev/null"可以测试纯读速度。当然,前提都是要传输大量的数据。从下面的图(D)和图(E)很容易看得出来机器性能的差别。

    三、创建环回文件系统

    ①创建一个1GB大小的文件,图(D)是我在公司截的图,图(E)是我家里的虚拟机:

(D)

(E)

    ②格式化这个1GB的文件:

 1: mkfs.ext4 file.img

环回文件与挂载_第1张图片(F)

    ③将文件格式化为ext4文件系统,然后我们可以检查下文件系统:

(G)

    四、挂载环回文件

    到了挂载这一步就和我们平常挂载设备文件基本上一样了,但挂载也分几种的:

    ①下面是一种比较偷懒的挂载方法,我们并没有连接到哪个设备上,在内部,这个环回文件会连接到/dev/loop1或者/dev/loop2的设备上,这时候就需要手动连接设备了。

 1: mkdir /mnt/loop
 2: mount -o loop file.img /mnt/loop
 3: losetup /dev/loop1 file.img
 4: mount /dev/loop1 /mnt/loop

    ②上面的方法并不适用于所有的场合,比如我们创建了一个硬盘文件,然后对这个硬盘文件分区并要挂载其中的某个分区,就不能使用mount -o loop了,需要使用下面的方法了。

 1: losetup /dev/loop1 file.img
 2: fdisk /dev/loop1

环回文件与挂载_第2张图片(H)

在file.img中创建分区并挂载第一个分区:

 1: losetup -o 32256 /dev/loop2 file.img

这里,/dev/loop2就是第一个分区了。其中-o表示偏移量,32256字节是针对DOS分区方案的一个设置,第一个分区自硬盘第32256字节之后开始。同样,我们可以这样设置第二个分区。要卸载的话,就是umount mount_point.

你可能感兴趣的:(linux,环回)