[linux] losetup 命令

简介: [linux] losetup 命令

[linux] losetup 命令

功能

Linux循环设备 `/dev/loop` 解析

语法

操作示例

测试实例

附录


功能

inux losetup 命令用于设置循环设备。


循环设备可把文件虚拟成区块设备,籍以模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。


Linux循环设备 /dev/loop 解析

/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。


在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。


这种设备文件经常被用于光盘或是磁盘镜像(IOS、IMG)。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。


语法

losetup [-d][-e <加密方式>][-o <平移数目>][循环设备代号][文件]


参数:


-d 卸除设备。
-e<加密方式> 启动加密编码。
-o<平移数目> 设置数据平移的数目。


操作示例

  1. 创建空的磁盘镜像文件,这里创建一个1.44M的软盘
$ dd if=/dev/zero of=floppy.img bs=512 count=2880

  1. 使用 losetup将磁盘镜像文件虚拟成块设备
$ losetup /dev/loop1 floppy.img

  1. 挂载块设备
$ mount /dev/loop0 /tmp

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

  2. 卸载loop设备
$ umount /tmp
$ losetup -d /dev/loop1

测试实例

  1. 首先创建一个 1G 大小的空文件:
# dd if=/dev/zero of=loopfile.img bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 69.3471 s, 15.5 MB/s

  1. 对该文件格式化为 ext4 格式:
# mkfs.ext4 loopfile.img

  1. 用 file 命令查看下格式化后的文件类型:
# file loopfile.img
loopfile.img: Linux rev 1.0 ext4 filesystem data, UUID=a9dfb4a0-6653-4407-ae05-7044d92c1159 (extents) (large files) (huge files)

  1. 准备将上面的文件挂载起来:
# mkdir /mnt/loopback
# mount -o loop loopfile.img /mnt/loopback

  1. mount 命令的 -o loop 选项可以将任意一个 loopback 文件系统挂载。

  2. 上面的 mount 命令实际等价于下面两条命令:

# losetup /dev/loop0 loopfile.img
# mount /dev/loop0 /mnt/loopback

  1. 因此实际上,mount -o loop 在内部已经默认的将文件和 /dev/loop0 挂载起来了。

  2. 然而对于第一种方法(mount -o loop)并不能适用于所有的场景。比如,我们想创建一个硬盘文件,然后对该文件进行分区,接着挂载其中一个子分区,这时就不能用 -o loop 这种方法了。因此必须如下做:

# losetup /dev/loop1 loopfile.img
# fdisk /dev/loop1

  1. 卸载挂载点:
# umount /mnt/loopback

附录

这里,列出一个用来导入新的系统镜像,并且加载的操作,也是用到了 losetup 命令完成的镜像文件挂载,具体如下:


#!/bin/sh
# 脚本使用方式 : get_img.sh [curos] [uname] [osid] [orgos] [servIP]
# 参数准备
export DEFAULT_IFACE=eth0
export DISKDIR=/mnt/disk
export TCDIR=/usr/sbin/tc
export BOOT_FILE=$DISKDIR/osenv.inf
export BOOT_FILE2=$DISKDIR/osenv1.inf
export XPDATA_IMG=tempdata.img
if [ -z "$1" -o -z "$2" -o -z "$3" -o -z "$4" ] ; then
  echo "Usage: get_img.sh <curimg> <username> <osid> <orgimg>"
  exit 1
fi
IFACE=$DEFAULT_IFACE
if [ -f $IFACE_FILE ] ; then
  IFACE=`cat $IFACE_FILE`
fi
if [ "x$2" != "xadmin" ] ; then
  echo "not admin, del mdf/udf"
  rm -f $DISKDIR/$4-$2.udf $DISKDIR/$4-$2.mdf
fi
if [ ! -f $DISKDIR/$4-$2.udf -o ! -f $DISKDIR/$4-$2.mdf ] ; then
  $TCDIR/createMdfUdf $DISKDIR/$4 $2 $DISKDIR
  if [ $? -ne 0 ] ; then
    echo "create mdf/udf failed"
    exit 12
  fi
fi
fdisk -l $DISKDIR/$4 | grep -i "EFI system"
if [ $? -eq 0 ] ; then
  echo "UEFI OS image"
  ln -sf /usr/sbin/tc/kloader.uefi /usr/sbin/tc/kloader
else
  echo "Legacy OS image"
  ln -sf /usr/sbin/tc/kloader.legacy /usr/sbin/tc/kloader
fi
# for offline mode
cp $DISKDIR/$2-$4.osenv1 $BOOT_FILE
if [ -f $DISKDIR/$2-$4.osenv2 ] ; then
  # for offline mode
  cp $DISKDIR/$2-$4.osenv2 $BOOT_FILE2
else
  # add for centerm
  echo "create disk-D for none p-user"
  XPDATA_MDF=$XPDATA_IMG-x.mdf
  XPDATA_UDF=$XPDATA_IMG-x.udf
  if [ ! -f $DISKDIR/$XPDATA_IMG ] ; then
    dd if=/dev/zero of=$DISKDIR/$XPDATA_IMG seek=6143 bs=1M count=1
    losetup /dev/loop0 $DISKDIR/$XPDATA_IMG
fdisk /dev/loop0 <<EOT
EOT
    mkfs.ntfs -f /dev/loop0p1
    losetup -d /dev/loop0
  fi
  $TCDIR/createMdfUdf $DISKDIR/$XPDATA_IMG x $DISKDIR
  echo "BASEIMG:\\Device\\Harddisk0\\Partition1\\$XPDATA_IMG" >$BOOT_FILE2
  echo "UDFIMG:\\Device\\Harddisk0\\Partition1\\$XPDATA_UDF" >>$BOOT_FILE2
  echo "MDFIMG:\\Device\\Harddisk0\\Partition1\\$XPDATA_MDF" >>$BOOT_FILE2
fi
exit 0



相关文章
|
2天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
192 2
|
2天前
|
Linux 程序员 计算机视觉
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
15 0
|
2天前
|
Linux
Linux的find命令使用
【5月更文挑战第11天】Linux的find命令使用
14 3
|
2天前
|
监控 Linux 数据处理
|
2天前
|
编解码 Ubuntu Linux
|
2天前
|
JSON Linux 数据格式
Linux命令发送http
请注意,`curl`命令非常灵活,可以根据您的需求进行多种配置和自定义。您可以查看 `curl`命令的文档以获取更多详细信息。
12 0
|
2天前
|
安全 Linux 测试技术
|
2天前
|
安全 Linux Windows
Linux中Shutdown命令使用介绍
Linux中Shutdown命令使用介绍
13 2
|
2天前
|
缓存 关系型数据库 Linux
Linux目录结构:深入理解与命令创建指南
Linux目录结构:深入理解与命令创建指南
|
2天前
|
数据挖掘 Linux vr&ar
Linux命令实战:解决日常问题的利器
Linux命令实战:解决日常问题的利器