linux中loop虚拟设备介绍及限制目录空间使用举例

1.loop设备介绍

        在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。

        上面说的文件格式,我们经常见到的是 CD 或 DVD 的 ISO 光盘镜像文件或者是软盘(硬盘)的 *.img 镜像文件。通过这种 loop mount (回环mount)的方式,这些镜像文件就可以被 mount 到当前文件系统的一个目录下。至此,顺便可以再理解一下 loop 之含义对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop;循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。

2.losetup命令基本用法

losetup --help              ##查看命令帮助

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

losetup [ -d ] loop_device

-e 表示加密的方式

-o 设置数据偏移量

-d 卸载关联设备

3.使用loop虚拟设备挂载目录限制目录空间大小举例

1)创建文件系统

dd if=/dev/zero of=/root/file100.disk bs=1M count=100  ##生成100M大小文件

losetup /dev/loop100 /root/file100.disk                           ##把生成的文件关联到虚拟块设备

ll /dev/loop100                                                                ##查看生成的虚拟设备

mkfs.ext3 /dev/loop100                                                  ##以ext3格式格式化loop100虚拟设备(或者直接格式化对应的文件也行;mkfs.ext3 /root/file100.disk 需要输入y 确认 )

mkdir /data100                           ##创建待挂载目录

mount /dev/loop100 /data100    ##将虚拟设备挂载到/data100目录

df -Th|grep data100                    ##查看挂载情况

losetup -l loop100                       ##查看loop100设备挂载对应的文件

losetup -a                                   ##查看所有虚拟设备的关联情况

2)验证配额空间

cd /data100

dd if=/dev/zero of=file.disk1 bs=1M count=60

dd if=/dev/zero of=file.disk2 bs=1M count=60       ##再次创建60m文件失败

3)卸载

umount /data100                       ##卸载

df -Th|grep data100                 ##查看挂载;发现已经没有挂载

losetup -a                                 ##查看关联;发现关联依然存在

losetup -d /dev/loop100           ##卸载loop虚拟设备与文件的关联

losetup -a                                 ##再次查看关联;此时发现没有关联

ll /dev/loop*                              ##查看loop设备;发现还在

##reboot

##卸载后再次卸载即报错设备不存在;ls /dev/loop100却还在;但是需要重启Linux服务器后/dev/loop*设备文件的显示才消失;

##创建多个限制目录按照上述步骤再操作一遍即可;

##但是每次重启发现上次创建的设备消失;导致数据也会丢失!!因此需要设置为永久挂载

4)永久挂载

由于服务器重启后/dev/loop100就会丢失;因此不能在/etc/fstab下编写挂载;否则会导致设备丢失后找不到设备服务器重启之后起不来;因此只能临时挂载然后编写开机挂载脚本;

 ##编写开机自启脚本     

vi /etc/init.d/loop100.sh                           ##设置挂载关联之前的文件和设备

#!/bin/bash -l
source ~/.bashrc 
losetup /dev/loop100 /root/file100.disk         
mount /dev/loop100  /data100     

chmod 755 /etc/init.d/loop100.sh                                    ##添加执行权限

ln -vsf /etc/init.d/loop100.sh /etc/rc5.d/S99loop100        ##设置脚本链接到root对应的运行级别下

ll /etc/rc5.d/S99loop100 

##创建待验证文本文件如果执行了上述卸载过程;先重新挂载后再创建该验证文件 )               

echo 123456 > /data100/123456.txt           

##reboot                                       ##再次重启验证;

df -Th|grep data100                       ##重启之后再次登陆;首先查看挂载情况

cat /data100/123456.txt                 ##查看文件内容

##此时开机自动挂载成功;并且文件内容依然保留;

##因此使用loop虚拟设备挂载文件限制目录大小成功!!!!

4. mount -o loop命令介绍

#前提准备:创建挂载目录、创建文件;格式化文件

mkdir /data100
dd if=/dev/zero of=/root/file100.disk bs=1M count=100
mkfs.ext3 /root/file100.disk

##挂载虚拟设备和文件

losetup /dev/loop100 /root/file100.disk
mount /dev/loop100 /data100

##可以用以下命令代替上面两条命令-o loop 选项可以将任意一个 loopback 文件系统挂载

mount -o loop /root/file100.disk  /data100

##同时挂载多个也没问题;mount -o loop可以自动设置loop名称不影响;

mkdir /data200
dd if=/dev/zero of=/root/file200.disk bs=1M count=200
mkfs.ext3 /root/file200.disk 
mount -o loop /root/file200.disk  /data200
df -h|grep data

##mount -o loop并不能适用于所有的场景。比如,我们想创建一个硬盘文件,然后对该文件进行分区,接着挂载其中一个子分区,这时就不能用 -o loop 这种方法;则需要先将文件进行分区;(不过此种方法不推荐;因为存在开机丢设备的情况;需要设置开机重新建分区的脚本等操作比较麻烦)

losetup /dev/loop100 /root/file100.disk

fdisk /dev/loop100                           ##新建分区操作

fdisk -l /dev/loop100                        ##然后查看分区情况;

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值