文件作为块设备访问

1. loop设备介绍

在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。
在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。
    上面说的文件格式,我们经常见到的是 CD 或 DVD 的 ISO 光盘镜像文件或者是软盘(硬盘)的 *.img 镜像文件。通过这种 loop mount (回环mount)的方式,这些镜像文件就可以被 mount 到当前文件系统的一个目录下。
    至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。

2. losetup命令

losetup [ -e encryption ] [ -o offset ] loop_device file
    losetup [ -d ] loop_device

说明
此命令用来设置循环设备。循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。
上面,命令格式中的选项与参数名:
-e 表示加密的方式
-o 设置数据偏移量
-d 卸载设备
loop_device 循环设备名,在 linux 下如 /dev/loop0 , /dev/loop1 等。

file 要与循环设备相关联的文件名,这个往往是一个磁盘镜象文件,如 *.img

3. 使用举例

(1)创建空的磁盘镜像文件,这里创建一个1.44M的软盘

$ dd if=/dev/zero of=floppy.img bs=512 count=2880

(2)使用 losetup将磁盘镜像文件虚拟成快设备

$ losetup /dev/loop1 floppy.img

(3)挂载块设备

$ mount /dev/loop0 /tmp

经过上面的三步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件floppy.img。

(4) 卸载loop设备

$ umount /tmp

$ losetup -d /dev/loop1

如何挂载一个镜像文件(how to mount an image file)

http://smilejay.com/2012/08/mount-an-image-file/

或者可以使用qemu自带的一个工具qemu-nbd来挂载一个客户机。

http://smilejay.com/2012/11/how-to-mount-a-qcow2-image/

时间: 2024-08-02 01:19:24

文件作为块设备访问的相关文章

linux中普通文件和块设备文件的区别

1,基本概念 普通文件(Regular File).指普通意义上的文件,如数据文件.可执行文件等. 设备文件(Device File).类unix操作系统都是基于文件概念的,文件是由字节序列而构成的信息载体.根据这一点,可以把IO设备当作设备文件这种所谓的特殊文件来处理:因此,与磁盘上的普通文件进行交互所用的同一系统调用可直接用于IO设备.根据设备驱动程序的基本特征,设备文件可以分为两种:块和字符.这两种硬件设备之间的差异并不容易划分,但我们至少可以假定以下的差异:[1] · 块设备的数据可以随

linux一切皆文件之块设备文件(四)

一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.块设备是将信息存储在大小固定的块中,每一个块都有自己的地址,块设备支持随机访问.典型的块设备比如我们使用的硬盘 二.环境准备 组件 版本 OS Ubuntu 16.04.4 LTS 三.主设备号(major)与次设备号(minor) ● 当一块磁盘被注册到操作系统的时候,会被分配主设备号与次设备号 ● 其中

Smart210学习记录------块设备

转自:http://bbs.chinaunix.net/thread-2017377-1-1.html 本章的目的用尽可能最简单的方法写出一个能用的块设备驱动.所谓的能用,是指我们可以对这个驱动生成的块设备进行mkfs,mount和读写文件.为了尽可能简单,这个驱动的规模不是1000行,也不是500行,而是100行以内. 这里插一句,我们不打算在这里介绍如何写模块,理由是介绍的文章已经满天飞舞了.如果你能看得懂.并且成功地编译.运行了这段代码,我们认为你已经达到了本教程的入学资格,当然,如果你不

linux文件类型:设备文件、mknod创建设备文件

设备文件: 块设备文件b: 按块为单位,随机访问的设备: 字符设备文件c:按字符为单位,线性设备: 常见的块设备文件b: 硬盘 硬盘设备的设备文件名:    IDE ,ATA: hd    SATA.SCSI.USB:sd          a,b,c,...来区分同一类型下的不同设备 IDE: 第一个IDE口:主.从 /dev/hda, /dev/hdb 第二个IDE口:主.从 /dev/hdc, /dev/hdd SD:  sda, sdb, sdc,... hda: hda1: 第一个主分

Linux平台下:块设备、裸设备、ASMlib、Udev相关关系

对磁盘设备(裸分区)的访问方式分为两种:1.字符方式访问(裸设备):2.块方式访问 Solaris平台 : 在Solaris平台下,系统同时提供对磁盘设备的字符.块方式访问.每个磁盘有两个设备文件名: 一个在/dev/dsk目录下,比如/dev/dsk/c1t1d1s1,当以这个设备名操作时,就是以块的方式操作磁盘: 一个在/dev/rdsk目录下,比如/dev/rdsk/c1t1d1s1,当以这个设备名操作时,就是以字符方式(裸设备方式r)操作磁盘 Linux平台 : 在linux平台下,缺省

块设备的读流程分析

关于VFS的通用读,我们不做考虑,本文以如下函数为根,往下分析: do_generic_mapping_read(*ppos,*mapping,*desc) 本函数的目的是,从磁盘读数据到用户态, 先是从*ppos开始的页,一直读到*ppos+desc->count 为止的,这么多个页, 然后拷贝desc->count字节的数据到用户态. 也即,从磁盘读到内存缓冲区是按页读的,而从内存缓冲区读到用户态是按字节的. 函数核心是调用 mapping->a_ops->readpage(f

Linux字符设备和块设备的区别

系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块.最常见的块设备是硬盘,除此以外,还有软盘驱动器.CD-ROM驱动器和闪存等等许多其他块设备.注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式. 另一种基本的设备类型是字符设备.字符设备按照字符流的方式被有序访问,像串口和键盘就都属于字符设备.如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备:反过来,如果一个设备是随机(无序的)访问的,那么它就属于块设备

写一个块设备驱动1,2

http://blogold.chinaunix.net/u3/108239/showart.php?id=2144624 第1章 +---------------------------------------------------+|                 写一个块设备驱动                  |+---------------------------------------------------+| 作者:赵磊                          

【原创】-- linux 字符设备,块设备,网络设备

参考地址:http://blog.chinaunix.net/uid-26322998-id-2981874.html 1.块设备 系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块.最常见的块设备是硬盘,除此以外,还有软盘驱动器.CD-ROM驱动器和闪存等等许多其他块设备.注意,它们都是以安装文件系统的方式使用的——这也是块设备一般的访问方式.一般访问单位为512k的整数倍. 2.字符设备 另一种基本的设备类型是字符设备.字符设备按照字符流的