Linux loop设备的应用介绍 (linux loop设备 用途)

Linux loop设备是Linux系统中非常有用的一种设备,它可以把一个文件当作一个块设备来使用,让用户能够在不用实际设备的情况下,模拟一个块设备。Linux loop设备可以在多个场景中使用,本文将从以下方面介绍loop设备的应用:

1. 块设备文件

在Linux系统中,大多数块设备都以磁盘或光盘的形式出现。但是,当我们需要在快速原型开发或测试中使用块设备时,使用实际物理设备可能会繁琐、浪费时间和资源。这时可以使用loop设备,将一个文件当作块设备来使用。这种做法允许用户建立一个简单的虚拟块设备文件,在不增加任何硬件成本的情况下,满足测试需要。例如,在开发新的数据库管理软件时,可以使用loop设备模拟真实的磁盘块,并运行针对数据库的测试。

2. 加密文件系统

使用加密文件系统可保护用户数据免受未经授权的访问,但加密文件系统需要以一个文件的形式存储。

以下是一个基于Loop设备的加密文件系统的例子:

先创建一个新文件,大小与需使用的空间一致。

“`

$ dd if=/dev/urandom of=./encrypted_fs bs=1M count=100

“`

使用cryptsetup命令加密文件:

“`

cryptsetup -c aes-xts-pln -s 512 -h sha512 luksFormat ./encrypted_fs

Password:

Verify passphrase:

WARNING!

========

This will overwrite data on ./encrypted_fs irrevocably.

Are you sure? (Type uppercase yes): YES

Enter passphrase for ./encrypted_fs:

Verify passphrase:

“`

输入密码后将文件映射到Loop设备:

“`

$ losetup /dev/loop0 ./encrypted_fs

“`

使用cryptsetup-pln open命令打开Loop设备上的文件:

“`

$ cryptsetup -c aes-xts-pln -s 512 -h sha512 open /dev/loop0 my_encrypted_fs

Enter passphrase for /dev/loop0:

“`

此时,设备my_encrypted_fs就被挂载了。可以用以下命令检查:

“`

$ mount | grep /dev/mapper/my_encrypted_fs

/dev/mapper/my_encrypted_fs on /mnt type ext4 …

“`

3. 磁盘映像文件

利用Loop设备,可以将一个磁盘映像文件视为一块硬盘。这种做法主要用于数据恢复和数据后续处理。例如,当一块硬盘损坏而无法正常读取时,可以使用loop设备将磁盘映像文件加载到系统上,然后对其中的数据进行检索和处理。

4. 挂载ISO文件

在Linux系统中,可以使用mount命令来挂载ISO文件,将其作为虚拟CDROM直接读取ISO文件中的内容,避免了将ISO映像刻录到实际CDROM中的麻烦。

可以使用以下命令来挂载ISO文件:

“`

$ mount -o loop image.iso /mnt/loop/

“`

在Linux系统中使用loop设备,可以将一个文件视为块设备,使用虚拟块设备进行快速原型开发和测试,保护用户数据免受未经授权的访问,处理磁盘映像文件,并挂载ISO文件。有了loop设备,用户可以在不使用物理设备的情况下,模拟块设备,提高Linux系统的灵活性和可用性。

相关问题拓展阅读:

在linux系统下,设备分那几种?

Linux系统中的设备可以分为字符设备、块设备和网唤脊络设备这三类。

1、字符设备

字符设备是能够像字节流一样被访问的设备,当对字符设备发出读写请求,相应的IO操作立即发生。Linux系统中很多设备都是字符设备,宏链弊如字符终端、串口、键盘、鼠标等。在嵌入式Linux开发中,接触最多的就是字符设备以及驱动。

2、块设备

块设备是Linux系统中进行TO操作时必须以块为单位进行访问的设备,块设备能够安装文件系统。块设备驱动会利用一块系统内存作为缓冲区,因此对块设备发出读写访问,并不一定立即产生硬件I/O操作。Linux系统中常见的块设备有如硬盘、软驱等等。

3、网络设备

网络设备既可以是网卡这样的硬件设备,也可以蔽族是一个纯软件设备如回环设备。网络设备由Linux的网络子系统驱动,负责数据包的发送好接收,而不是面向流设备,因此在Linux系统文件系统中网络设备没有节点。对网络设备的访问是通过socket调用产生,而不是普通的文件操作如open/closc和read/write等。

跟WINDOWS一样埋唤吧。硬盘,光盘,软盘,可移动磁盘,鼠标,打印机,弯空凯网卡亏败,磁盘。。。

常见硬件设备在linux中的代号:

IDE硬盘 /dev/hd

SCSI硬盘 /dev/sd

光驱 /dev/cdrom

软驱 /dev/fd

打印机 /dev/lp

鼠标 /dev/mouse

磁盘 /dev/ht0(IDE) /dev/st0 (SCSI)

网卡 /dev/ethn (n由0开始)

字符设备:

字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序

来实现这种特性。字符设备驱动程序通常至少要实现open、close、read和write的系统调用。字符终端(/dev/console)和串口(/dev/ttyS0以及类似设备)就是两个字符设备,它们能很好的说明“流”这种抽象概念。字符设备可以通过FS节点来访问,比如/dev/tty1和/dev/lp0等。这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道。然而,也存在具有数据区特性的字符设备,访问它们时可前后移动访问位置。例如framebuffer就是这样的一个设备,app可以用郑燃mmap或lseek访问抓取的整个图像。

块设备:

和字符设备类似,块设备也是通过/dev目录下的文件系统节点来访问。块设备(例如磁盘)上能够容纳filesystem。在大多数的Unix系统中,进行I/O操作时块设备每次只能传输一个或多个完整的块,而每块包含512字节(或2的更高次幂字节的数据)。Linux可以让app像字符设备一样地读写块设备,允许一次传递任意多字节的数据。因此,块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符驱动程序相比,块驱动程序具有完全不同的接口。

网络设备:

var目录可否整个目录mount到另一个硬盘上

挂接命令(mount)

首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。

命令格式:mount device dir

其中:

1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:

光盘或光盘镜像:iso9660

DOS fat16文件系统:msdos

Windows 9x fat32文件系统:vfat

Windows NT ntfs文件系统:ntfs

Mount Windows文件网络共享:bfs

UNIX(LINUX) 文件网络共享:nfs

2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:

loop:用来把一个文件当成硬盘分区挂接上系统

ro:采用只读方式挂接设备

rw:采用读写方式挂接设备

iocharset:指定访问文件系统所用字符集

3.device 要挂接(mount)的设备。

4.dir设备在系统上的挂接点(mount point)。

挂接光盘镜像文件

1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。

#cp /dev/cdrom /home/sunky/mydisk.iso 或

#dd if=/dev/cdrom of=/home/sunky/mydisk.iso

注:执行上面的任何一条命令都可将当前光驱里的光握樱盘制作成光盘镜像文件/home/sunky/mydisk.iso

2、将文件和目录制作成光盘镜像文件,执行下面的命令。

#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir

注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk

3、光盘镜像文件的挂接(mount)

#mkdir /mnt/vcdrom

注:建立一个目录用来作挂接点(mount point)

#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom

注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。

挂接移动硬盘

对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。

# fdisk -l

接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况.应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev /sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和 /dev/sdc5。

#mkdir -p /mnt/uhd1

#mkdir -p /mnt/uhd2

注:建立目录用来作挂接点(mount point)

#mount -t ntfs /拍则dev/sdc1 /mnt/uhd1

#mount -t vfat /dev/sdc5 /mnt/uhd2

注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。

#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/uhd1

#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/uhd2

linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更段贺丛方便了。使用下面的命令直接挂接即可。

#mount /dev/sdc1 /mnt/uhd1

挂接U盘

和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。

# fdisk -l

插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。

# fdisk -l

系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。

#mkdir -p /mnt/u

注:建立一个目录用来作挂接点(mount point)

#mount -t vfat /dev/sdd1 /mnt/u

注:现在可以通过/mnt/u来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。

#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/u

挂接Windows文件共享

Windows网络共享的核心是B/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到

www.samba.org

网站下载……新的版本是3.0.10版。

当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:

# mkdir –p /mnt/samba

注:建立一个目录用来作挂接点(mount point)

# mount -t bfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba

注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享

如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2023、windows xp、windows 2023环境下测试通过。

挂接UNIX系统NFS文件共享

类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。

在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。

1、Solaris系统NFS服务端配置方法如下:

(1)修改 /etc/dfs/dfstab, 增加共享目录

share -F nfs -o rw /export/home/sunky

(2)启动nfs服务

# /etc/init.d/nfs.server start

(3)NFS服务启动以后,也可以使用下面的命令增加新的共享

# share /export/home/sunky1

# share /export/home/sunky2

注:/export/home/sunky和/export/home/sunky1是准备共享的目录

2、linux系统NFS服务端配置方法如下:

(1)修改 /etc/exports,增加共享目录

/export/home/sunky 10.140.133.23(rw)

/export/home/sunky1 *(rw)

/export/home/sunky2 linux-client(rw)

注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:

10.140.133.23 linux-client

(2)启动与停止NFS服务

/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)

/etc/rc.d/init.d/nfs start 启动NFS服务

/etc/rc.d/init.d/nfs stop 停止NFS服务

注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。

3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享

# mkdir –p /mnt/nfs

注:建立一个目录用来作挂接点(mount point)

#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs

注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。

如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过

补充:

linux加载光驱

(1)使用光驱前,要先mount一下:#mount /dev/cdrom /mnt/cdrom,然后您就可以进入/mnt/cdrom目录下读取光盘内容了;

Linux中如何通过设备号找到设备

一耐亏个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程辩枝序。次设备号用来表示使用该驱动程序的各设备。

查看主设备号:

# cat /proc/devices

Character devices:

1 mem

4 /dev/vc/0

4 tty

4 ttyS

5 /dev/tty

5 /dev/console

5 /dev/ptmx

6 lp

7 vcs

10 misc

13 input

14 sound

21 sg

29 fb

116 alsa

128 ptm

136 pts

162 raw

180 u

189 u_device

202 cpu/msr

203 cpu/cpuid

216 rfcomm

249 blkwatch_272

250 hidraw

251 umon

252 bsg

253 pcmcia

254 rtc

Block devices:

1 ramdisk

2 fd

259 blkext

7 loop

8 sd

9 md

11 sr

65 sd

66 sd

67 sd

68 sd

69 sd

70 sd

71 sd

128 sd

129 sd

130 sd

131 sd

132 sd

133 sd

134 sd

135 sd

253 device-mapper

254 mdp

如上所示,该命令会显示字符设备和块设备的主设备号。如果你想查看某个主设备号,那么可以

# cat /proc/devices | grep 253

253 pcmcia

253 device-mapper

其中Device Mapper,Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需昌灶神要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的。

次设备号查看

#  ls -l /dev   或   ll  /dev

#  ll  /dev | grep 253 | grep -v grep

brw-rwroot root   253,   0 Jul 17 23:08 dm-0

brw-rwroot root   253,   1 Jul 17 23:08 dm-1

brw-rwroot root   253,   2 Jul 17 23:08 dm-2

brw-rwroot root   253,   3 Jul 17 23:08 dm-3

brw-rwroot root   253,   4 Jul 17 23:09 dm-4

brwroot root   253,   1 Jul 17 23:09 root

但是在一台服务器的日志信息遇到下面错误信息,通过/dev 没有找到次设备号为253:14的块设备。 如下所示

Jul 19 05:02:01 mylnx01 kernel: BLKWATCH ERR: Attempt to get a sector index out of the bitmap bounds.

Jul 19 05:02:01 mylnx01 kernel: BLKWATCH ERR: Critical error 1 happened for device 253:14. Additional info: Failed to mark block as dirty.

#  ll  /dev | grep 253 | grep -v grep

因为这个设备是一个VG,所以上述命令无法找到设备,不过可以通过命令dmsetup查看。如下所示:

# dmsetup ls

VolGroup03-LogVol00–PS–user–snapshot-cow     (253, 15)

VolGroup05-LogVol00-real(253, 5)

VolGroup03-LogVol00–PS–user–snapshot (253, 16)

VolGroup00-LogVol00-real(253, 0)

VolGroup00-LogVol00–PS–user–snapshot (253, 3)

VolGroup01-LogVol00–PS–user–snapshot-cow     (253, 23)

VolGroup05-LogVol(253, 6)

VolGroup04-LogVol00-real(253, 9)

VolGroup04-LogVol(253, 10)

VolGroup05-LogVol00–PS–user–snapshot (253, 8)

VolGroup04-LogVol00–PS–user–snapshot-cow     (253, 11)

VolGroup03-LogVol(253, 14)

VolGroup02-LogVol00–PS–user–snapshot (253, 20)

VolGroup03-LogVol00-real(253, 13)

VolGroup02-LogVol(253, 18)

VolGroup02-LogVol00–PS–user–snapshot-cow     (253, 19)

VolGroup01-LogVol(253, 22)

VolGroup02-LogVol00-real(253, 17)

VolGroup00-LogVol(253, 4)

VolGroup04-LogVol00–PS–user–snapshot (253, 12)

VolGroup00-LogVol(253, 1)

VolGroup05-LogVol00–PS–user–snapshot-cow     (253, 7)

VolGroup01-LogVol00–PS–user–snapshot (253, 24)

VolGroup00-LogVol00–PS–user–snapshot-cow     (253, 2)

VolGroup01-LogVol00-real(253, 21)

关于次设备号的主要用途,这篇博客主设备号和次设备号介绍了部分内容。

1、区分设备驱动程序控制的实际设备;

2、区分不同用途的设备 (misc 系列设备)

3、区分块设备的分区 (partition)

通常,为了使应用程序区分所控制设备的类型,内核使用主设备号。而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备号。

# ll /dev/ | grep sd    #或者命令  ll /dev/ | grep disk

brw-rroot disk     8,   0 Jul 17 23:08 sda

brw-rroot disk     8,   1 Jul 17 23:10 sda1

brw-rroot disk     8,   2 Jul 17 23:08 sda2

brw-rroot disk     8,   3 Jul 17 23:08 sda3

brw-rroot disk     8,  16 Jul 17 23:08 sdb

brw-rroot disk     8,  17 Jul 17 23:08 sdb1

brw-rroot disk     8,  18 Jul 17 23:08 sdb2

brw-rroot disk     8,  21 Jul 17 23:08 sdb5

brw-rroot disk     8,  32 Jul 17 23:08 sdc

brw-rroot disk     8,  33 Jul 17 23:08 sdc1

brw-rroot disk     8,  34 Jul 17 23:08 sdc2

brw-rroot disk     8,  37 Jul 17 23:08 sdc5

brw-rroot disk     8,  48 Jul 17 23:08 sdd

brw-rroot disk     8,  49 Jul 17 23:08 sdd1

brw-rroot disk     8,  50 Jul 17 23:08 sdd2

brw-rroot disk     8,  51 Jul 17 23:08 sdd3

brw-rroot disk     8,  53 Jul 17 23:08 sdd5

brw-rroot disk     8,  64 Jul 17 23:08 sde

brw-rroot disk     8,  65 Jul 17 23:08 sde1

brw-rroot disk     8,  66 Jul 17 23:08 sde2

brw-rroot disk     8,  67 Jul 17 23:08 sde3

brw-rroot disk     8,  69 Jul 17 23:08 sde5

brw-rroot disk     8,  80 Jul 17 23:08 sdf

brw-rroot disk     8,  81 Jul 17 23:08 sdf1

brw-rroot disk     8,  85 Jul 17 23:08 sdf5

brw-rroot disk     8,  96 Jul 17 23:08 sdg

brw-rroot disk     8,  97 Jul 17 23:08 sdg1

brw-rroot disk     8,  98 Jul 17 23:08 sdg2

brw-rroot disk     8, 101 Jul 17 23:08 sdg5

brw-rroot disk     8, 112 Jul 17 23:08 sdh

brw-rroot disk     8, 113 Jul 17 23:08 sdh1

linux loop设备 用途的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux loop设备 用途,Linux loop设备的应用介绍,在linux系统下,设备分那几种?,var目录可否整个目录mount到另一个硬盘上,Linux中如何通过设备号找到设备的信息别忘了在本站进行查找喔。


数据运维技术 » Linux loop设备的应用介绍 (linux loop设备 用途)