Post

losetup命令

🧩 概要

losetupLinux系统中用于管理loop设备的命令行工具。loop设备是一种虚拟块设备,允许将普通文件“映射”为块设备,从而可以对文件进行像对磁盘分区那样的操作。losetup负责将一个普通文件绑定到一个loop设备,或者解除绑定。

💡 loop设备简介

  • Linux中的块设备(block device)通常是物理硬盘、SSDU盘等。
  • loop设备将普通文件当作虚拟磁盘,内核会把对loop设备的读写请求转发到该文件的相应偏移处。
  • 这样,普通文件就可以被格式化、挂载、写入数据等,类似真实硬盘。

⚙️ 常见应用场景

  • 使用Snap包管理器挂载.snap文件。
  • 测试和开发需要块设备的应用。
  • 结合LVMRAID技术创建虚拟磁盘阵列。

🧰 常用命令示例

✨ 创建一个100MB的空文件,作为虚拟磁盘镜像

1
$ dd if=/dev/zero of=disk.img bs=1M count=100
1
2
3
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0395708 s, 2.6 GB/s

🔌 将文件关联到空闲的loop设备

1
$ sudo losetup -f disk.img
  • -f表示查找第一个空闲的loop设备,自动绑定文件。
  • 绑定后可以用losetup -a查看当前绑定状态。
1
2
3
4
5
6
7
$ losetup -a
...
/dev/loop21: []: (/tmp/disk.img)
/dev/loop11: []: (/var/lib/snapd/snaps/gnome-42-2204_176.snap)
/dev/loop2: []: (/var/lib/snapd/snaps/code_194.snap)
/dev/loop0: []: (/var/lib/snapd/snaps/bare_5.snap)
...

🎯 手动绑定到指定的loop设备

1
$ sudo losetup /dev/loop5 disk.img

disk.img绑定到/dev/loop5

🔓 解除绑定

1
$ sudo losetup -d /dev/loop5

解除/dev/loop5和文件的绑定。

🗄️ 创建文件系统并挂载

1
2
$ sudo mkfs.ext4 /dev/loop5
$ sudo mount /dev/loop5 /mnt

📋 losetup常用选项

选项说明
-f查找并返回第一个空闲的loop设备
-a列出所有绑定的loop设备
-d <device>解除绑定指定loop设备
--show绑定时显示被使用的loop设备名称
-o <offset>绑定时指定偏移量(文件内偏移)
-r以只读模式绑定文件

⚙️ 原理简述

  • losetup通过ioctl调用向内核的loop设备驱动发送请求。
  • 内核loop模块会将用户指定的文件描述符关联到一个loop设备结构体。
  • 之后,所有对该设备的块操作被转发到对应的文件。

⚠️ 注意事项

  • 绑定的文件大小决定了虚拟设备大小,超出部分不可用。
  • 绑定期间,loop设备被其他程序访问时,文件内容会被修改或读取。
  • 操作完成后,务必执行解除绑定,否则文件可能处于被占用状态。
This post is licensed under CC BY 4.0 by the author.