Shell 使用环回文件,Linux文件系统通常存在于磁盘或记忆棒(memory stick)这种设备上。文件其实也可以作为文件系统挂载。这种存在于文件中的文件系统(filesystem-in-a-file)可用于测试、文件系统定制或者是作为机密信息的加密盘。
实战演练
让我们来看看如何在大小为1GB的文件中创建ext4文件系统。
(1) 使用dd
命令创建一个1GB大小的文件:
你会发现创建好的文件大小超过了1GB。这是因为作为块设备,硬盘是按照块大小的整数倍来分配存储空间的。
(2) 用mkfs
命令将1GB的文件格式化成ext4文件系统:
(3) 使用file
命令检查文件系统:
(4) 使用mkdir
创建挂载点并挂载环回文件:
选项-o loop
用来挂载环回文件系统。这里用的实际上是一种快捷方式,可以将环回文件系统附加到(attach)由操作系统选定的设备上,这些设备的名称类似于/dev/loop1
或/dev/loop2
。
(5) 也可以使用以下命令来指定具体的环回设备:
(6) 使用下面的方法进行卸载(umount
):
例如:
(7) 也可以用设备文件的路径作为umount
命令的参数:
注意,因为
mount
和umount
都是特权命令,所以必须以root用户的身份来执行。
工作原理
我们必须首先使用dd
命令生成一个文件来创建环回文件系统。dd
是一个用于复制原始数据(raw data)的通用命令。它将数据从if
参数所指定的文件复制到of
参数所指定的文件中。我们指定dd
复制一块大小为1GB的块,这样就创建了一个1GB的文件。/dev/zero是一个特殊的文件,从这个文件中读出的内容都是0。
然后,使用mkfts. ext4
命令在该文件中创建ext4文件系统。设备上必须有文件系统存在才能够挂载。常用的文件系统包括ext4、ext3和vfat。
最后,我们使用mount
命令将环回文件挂载到挂载点上(在本例中是/mnt/loopback)。挂载点使得用户可以访问文件系统中的文件。在执行mount
命令之前,应该先使用mkdir
命令创建挂载点。选项-o loop
用于指明要挂载的是环回文件,而非设备。
当mount
知道它使用的是环回文件时,它会自动在/dev中建立一个对应该环回文件的设备并将其挂载。如果想手动操作,可以使用losetup
命令建立设备,然后使用mount
命令挂载。
补充内容
让我们再来研究一下使用环回文件和挂载的其他用法。
- 在环回镜像中创建分区
假设我们需要创建一个环回文件,然后对其分区并挂载其中某个分区。在这种情况下,没法使用mount - o loop
。我们必须手动建立设备并挂载分区。使用下面的方法对文件(内容全部填充为0)进行分区:
fdisk
是Linux系统中的标准分区工具,在http://www.tldp.org/HOWTO/Partition/fdisk_partitoning.html处可以找到一份有关如何使用fdisk
创建分区的简明教程(记得将教程中的/dev/hdb换成/dev/loop1)。
在loopback.img
中创建分区并挂载第一个分区:
/dev/loop2表示第一个分区,-o
用来指定偏移量,在DOS分区方案3中,这个偏移量是32256
。第一个分区在硬盘上起始于32 256字节处。
我们也可以指定所需的偏移量来挂载第二个分区。完成挂载之后,就可以像在物理设备上一样执行所有日常操作了。
- 快速挂载带有分区的环回磁盘镜像
如果我们希望挂载环回磁盘镜像中的分区,可以通过参数的形式将分区偏移量传递给losetup
命令。不过,有一个更快的方法可以挂载镜像中的所有分区:kpartx
。该命令默认并没有安装在系统中,你得使用软件包管理器来安装:
这条命令在磁盘镜像的分区与/dev/mapper中的设备之间建立了映射,随后便可以挂载这些设备了。下列命令可以用来挂载第一个分区:
当你完成设备上的操作后(并使用umount
卸载所有挂载过的分区),使用下列命令移除映射关系:
- 将ISO文件作为环回文件挂载
ISO文件是光学存储介质的归档。我们可以采用挂载环回文件的方法,像挂载物理光盘一样挂载ISO文件。
我们甚至可以用一个非空目录作为挂载路径。在设备被卸载之前,这个挂载路径中包含的都是来自该设备的数据,而非目录中的原始内容。例如:
现在就可以对/mnt/iso中的文件进行操作了。ISO是一个只读文件系统。
- 使用
sync
立刻应用更改
对挂载设备作出的更改并不会被立即写入物理设备。只有当内部缓冲区被写满之后才会回写设备。我们可以用sync
命令强制立刻写入更改:
3
losetup
中的-o 32256 (512*63=32256)
用于设置数据偏移。由于历史原因,硬盘第一个扇区(512 字节)作为 MBR(Master Boot Record,主引导记录),其后的62个扇区作为保留扇区。