回环设备(/dev/loop*)与losetup命令

以下内容源于网络资源的学习与整理,如有侵权请告知删除。

一、前言

之前曾利用losetup命令进行根文件系统镜像文件的制作,但不明白其命令含义。

二、回环设备

命名方式

回环设备一般以 /dev/loop* 方式命名。

回环设备的含义

回环设备是一种伪设备,是使用文件来模拟块设备的一种技术。它允许用户以一个普通磁盘文件来虚拟一个块设备。设想有一个磁盘设备,系统对它的所有读写操作,都将被重定向到操作一个普通文件,而非操作实际磁盘或者分区的轨道和扇区。文件模拟成块设备后,就可以像磁盘或光盘一样使用。比如像一个磁盘设备一样被mount起来。

在使用之前,一个回环设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。

当我们还需要使用一个分区的时候如果不想从磁盘中再进行分区,这个时候就可以通过/dev/loop来进行管理操作。但是这种伪设备只能像访问普通文件一样,不能像实际的磁盘通过扇区读写访问。

之所以叫回环设备,其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过回环设备把它mount起来,就像文件系统之上再绕了一圈的文件系统,所以称为回环。

应用的例子

比如将另外一种文件系统的镜像文件保存到一个文件中,例如iso文件,然后将一个回环设备指向该文件,之后我们就可以将该回环设备挂载到主文件系统的一个目录下,就可以像访问一个文件系统一样,正常地访问该镜像中的内容。

其他说明

(1)每个回环设备可以虚拟一个块设备。

(2)只有root用户才有权限设置回环设备。

(3)一般在linux中会有8个loop设备,一般是/dev/loop0~loop7,可用通过losetup -a查看所有的loop设备,如果命令没有输出就说明所有的loop设备都没有被占用。

三、简单使用

制作根文件系统的步骤:制作ext2格式的根文件系统镜像_天糊土的博客-CSDN博客

(1)创建一个文件

root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# ls
rootfs.ext2  rootfs_xjh  tmp
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# rm rootfs.ext2 
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# dd if=/dev/zero of=./rootfs.ext2 bs=1024 count=10240
记录了10240+0 的读入
记录了10240+0 的写出
10485760字节(10 MB)已复制,0.146392 秒,71.6 MB/秒
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# ls 
rootfs.ext2  rootfs_xjh  tmp
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# du rootfs.ext2 -h
10M	rootfs.ext2
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs#

(2)使用losetup命令,把伪设备/dev/loop*关联到常规文件中。

root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# losetup /dev/loop1 ./rootfs.ext2 
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# losetup -a //查看loop设备
/dev/loop1: [0801]:20826 (/home/xjh/iot/embedded_basic/rootfs/rootfs.ext2)
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# lsblk //查看所有的块设备
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    20G  0 disk 
├─sda1   8:1    0    18G  0 part /
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0     2G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom  
sr1     11:1    1  1024M  0 rom  
loop1    7:1    0    10M  0 loop    //这里出现了回环设备
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# 

(3)上述步骤后,我们就得到一个磁盘,可以将这磁盘格式化为任意系统。比如利用mke2fs命令制作ext2文件系统。

root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# mke2fs -m 0 /dev/loop1 10240
mke2fs 1.42.9 (4-Feb-2014)
Discarding device blocks: 完成                            
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
2560 inodes, 10240 blocks
0 blocks (0.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=10485760
2 block groups
8192 blocks per group, 8192 fragments per group
1280 inodes per group
Superblock backups stored on blocks: 8193Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# 

(4)将该磁盘挂载到主文件系统中的一个目录。这里挂载到/home/xjh/iot/embedded_basic/rootfs/rootfsxjh目录。

root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# ls
rootfs.ext2  rootfsxjh  rootfs_xjh  tmp
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# mount -t ext2 /dev/loop1 ./rootfsxjh/
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            490M  4.0K  490M    1% /dev
tmpfs           101M  1.2M  100M    2% /run
/dev/sda1        18G   14G  3.5G   80% /
none            4.0K     0  4.0K    0% /sys/fs/cgroup
none            5.0M     0  5.0M    0% /run/lock
none            501M  228K  501M    1% /run/shm
none            100M   48K  100M    1% /run/user
vmhgfs-fuse     238G  194G   44G   82% /mnt/hgfs
/dev/loop1      9.7M   92K  9.6M    1% /home/xjh/iot/embedded_basic/rootfs/rootfsxjh
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# fdisk -l /dev/loop1Disk /dev/loop1: 10 MB, 10485760 bytes
255 heads, 63 sectors/track, 1 cylinders, total 20480 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000Disk /dev/loop1 doesn't contain a valid partition table
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# 

(5)将文件夹形式的根文件系统中的文件复制到挂载目录中。

即把/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh中的内容,拷到/home/xjh/iot/embedded_basic/rootfs/rootfsxjh目录中。

root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# ls
rootfs.ext2  rootfsxjh  rootfs_xjh  tmp
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# cp ./rootfs_xjh/* ./rootfsxjh/ -rf
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# cd rootfsxjh/
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs/rootfsxjh# ls
bin  dev  etc  home  lib  linuxrc  lost+found  mnt  proc  root  sbin  sys  tmp  usr  var
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs/rootfsxjh#

(6)取消挂载与删除块设备。

如果取消挂载时提示设备忙,参考umount报错设备繁忙(device is busy)怎么处理(另外也有一种可能,你是在(要取消挂载的)路径下输入取消挂载的指令)。

root@ubuntu:/home/xjh/iot/embedded_basic/rootfs/rootfsxjh# umount /dev/loop1
umount:/home/xjh/iot/embedded_basic/rootfs/rootfsxjh:设备忙。(有些情况下在 lsof(8) 或 fuser(1)) 中可以找到有关使用该设备的进程的有用信息
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs/rootfsxjh# cd ..
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# umount /dev/loop1
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# df 
文件系统           1K-块      已用     可用 已用% 挂载点
udev              501320         4   501316    1% /dev
tmpfs             102540      1128   101412    2% /run
/dev/sda1       18447100  13852488  3634512   80% /
none                   4         0        4    0% /sys/fs/cgroup
none                5120         0     5120    0% /run/lock
none              512680       228   512452    1% /run/shm
none              102400        48   102352    1% /run/user
vmhgfs-fuse    248821060 202918208 45902852   82% /mnt/hgfs
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# losetup -d /dev/loop1 //删除伪设备
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# losetup -a
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# losetup /dev/loop1 //查看是否有伪设备关联文件
loop: 无法获取设备 /dev/loop1 的信息:没有那个设备或地址
root@ubuntu:/home/xjh/iot/embedded_basic/rootfs# 

(7)完成上述步骤之后,得到的rootfs.ext2就是做好的rootfs镜像,可以利用fastboot工具来进行烧录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle中游标的使用

1)--- 使用带参数的游标;declareCURSOR stock_cur(symbol_in VARCHAR2) IS SELECT * FROM rate_combine_nr nr WHERE nr.combine_nosymbol_in;stock_info stock_cur%ROWTYPE; beginOPEN stock_cur(G600000001); --打开游标;loop FETCH stock_cur INTO stock_inf…

JS 学习笔记--11---内置对象(Global/Math)

练习中使用的浏览器是IE10,如果各位朋友有不同意见或者遇到浏览器不兼容问题,希望指正 1、内置对象的定义:有ECMAScript实现提供的、不依赖与宿主环境的对象,在ECMAScript运行之前就已经创建好的对象就叫做内置对象。就是说&…

SQL Server 视图设计器

SQL Server 中经常需要写一些查询,关联好多张表,显示无数个列。如果使用视图设计器,可以大大提高效率,同是减少差错。1. 启动视图设计器为数据库“新建视图”,将启用视图设计器。2. 添加表在起始界面,将出现…

Linux系统的目录树

更多详细内容,见Linux目录树详解(转)_peniel_shen的博客-CSDN博客 Linux系统的目录树: rootubuntu:/# tree -L 1 . ├── bin //保存系统自身启动和运行时可能会用到的核心二进制程序。 ├── boot //保存系统引导启动时要…

Android 4 学习(19):Services

参考《Professional Android 4 Development》 Services Service是invisible的,因此其优先级不高于visible的Activity,之所以说不高于,是因为我们可以设置Service为在前台运行。 创建Service Android提供了Service抽象类,继承它便可…

ACL权限设定

1.ACL(Access Control List)可以针对单一使用者、单一档案或目录来进行r、w、x的权限规范。ACL主要针对以下方面来控制权限:1)使用者:可以针对使用者。来设定权限2)群组:针对群组为对象来设定其…

misc类设备驱动1——板载蜂鸣器驱动测试

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、驱动部分 1、前言 九鼎移植的内核已经提供了蜂鸣器驱动源码(在SI中搜索关键字buzzer,发现出现有x210-buzzer.c文件;或者在make menuconfig界面搜索buzzer&am…

【微信开发】上传下载多媒体文件

最近一段时间,开始入手了微信开发。感觉挺有意思的,虽然目前还是遇到了许多解决不了的问题。上传下载多媒体文件,这个作为高级接口的一部分功能,可能使用的人并不多,所以现在网上关于这个接口的使用教程很少。于是我就…

github和git@osc提交问题

为什么80%的码农都做不了架构师?>>> 今天想用gitosc push下测试下自己能否正常使用gitosc的git仓库的,公钥SSH 已经加好。 ssh -T gitgit.oschina.net 测试正常。 结果报错could not read Username for https://git.oschina.net: No such fi…

misc类设备驱动2——misc类设备的简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有其侵权请告知删除。 一、misc类设备的含义 1、名字含义 misc是英文Miscellaneous的缩写,中文意思是“杂项、混杂”,因此“misc类设备”也叫“杂项设备”或者“混杂设备”。因为这些字符设备不…

怎样跟踪来访用户?

某些监视方法是比较容易想到的,比如,当你登录网站的时候,它就可以知道你是谁了。但是这些网络监视系统是如何通过你的上网行为记录你的个人信息呢? 广告系统经常通过追踪用户行为的方法来建立用户信息库,以定位谁是目标…

舟桥test

<p>testaa</p><p><script src"https://gist.github.com/chengdongdong/6ecf6f921c818d84d7a1.js"></script></p>转载于:https://blog.51cto.com/zchengdong/1599304

misc类设备驱动3——misc驱动框架源码分析(核心层+具体操作层)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有其侵权请告知删除。 前言 由misc类设备驱动1——misc类设备的简介可知&#xff0c;misc类设备驱动框架包括以下两部分&#xff1a; 1、内核开发者实现的部分 drivers/char/misc.c文件主要包括2个关键点&#xff1a;类…

mint锁屏设置

心血来潮&#xff0c;给笔记本装了linux&#xff0c;版本是当下最火的mint。唔&#xff0c;使用体验不错&#xff5e;下面记录的是修改mint锁屏相关设置的修改方式。 In Linux Mint 13, the screen lock feature is disabled by default. After being idle for a while, the sc…

effective C++ 读后笔记

首先不得不说侯捷翻译的书大部分我都很喜欢&#xff0c;因为侯捷本身是一名出色的C技术专家。这本书讲的是C如何高效的运行&#xff0c;我想要成为一名卓越的开发人员&#xff0c;代码的高效性是必不可少的。很多人的代码质量很差&#xff0c;即使能够勉强运行在以后的维护和重…

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录&#xff1f;LBS通讯录摘要&#xff1a;班级通讯录必备的功能&#xff0c;比如人员列表&#xff0c;人员地理位置标注&#xff0c;展示复杂信息窗口&#xff0c;公交和驾车等。一般班级人员都不会超过300个&#xff0c;因为可以高效…

开发板——在X210开发板上进行裸机开发的流程

流程总结 本文以“LED流水灯”为例&#xff0c;说明在X210开发板上进行裸机开发的流程。 步骤一&#xff1a;搭建嵌入式Linux开发环境 在虚拟机中安装与配置Linux系统&#xff0c;并安装交叉编译工具链&#xff1b; 在win主机上安装dnw软件、九鼎烧写SD卡软件等内容。 步骤二&a…

zmail邮件系统安装手册 V2.0版本

2019独角兽企业重金招聘Python工程师标准>>> Tmail邮件系统安装手册 V2.0版本 1、系统环境 centos6.0以上&#xff0c;最小化安装(64位系统) 2、部署 1、删除自带的postfix、mysql、httpd # rpm -qa|grep postfix|xargs rpm -e --nodeps # rpm -qa|grep mysql|xargs…

Cassandra1.2文档学习(5)—— Snitch

参考资料&#xff1a;http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureSnitchesAbout_c.html#concept_ds_c34_fqf_fk 一个snitch&#xff08;告密者&#xff09;决定应当从哪个数据数据中心和机架写入和读取数据。…

Entity Framework在WCF中序列化的问题(转)

问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象&#xff0c;那么对下面的错误一定不陌生。 接收对 http://localhost:5115/ReService.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。 这还可能是由于服务器中止了 HTTP …