AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 476048
Accepted
corsel
corsel
Asked: 2018-10-18 07:26:16 +0800 CST2018-10-18 07:26:16 +0800 CST 2018-10-18 07:26:16 +0800 CST

为什么需要一个循环设备呢?

  • 772

我以前使用创建图像文件,使用dd在它们上设置文件系统,并将mkfs它们mount作为已安装的分区访问它们。后来我在网上看到很多例子都是losetup事先在/dev. 我不知道为什么实际上需要一个图像文件来充当循环设备并拥有自己的/dev条目,而无需任何麻烦即可获得相同的行为。

总结:在现实生活场景中,为什么我们需要一个/dev/loopX条目,而我们可以在没有它的情况下挂载 fs 映像?循环设备有什么用?

filesystems mount
  • 4 4 个回答
  • 7909 Views

4 个回答

  • Voted
  1. Best Answer
    Stephen Harris
    2018-10-18T07:39:55+08:002018-10-18T07:39:55+08:00

    挂载通常必须在块设备上完成。循环驱动程序将块设备前端放置到您的数据文件中。

    如果您没有进行循环挂载,losetup那么操作系统会在后台执行一个。

    例如

    $ dd if=/dev/zero of=/tmp/foo bs=1M count=100
    100+0 records in
    100+0 records out
    104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
    $ mke2fs /tmp/foo
    mke2fs 1.42.9 (28-Dec-2013)
    ....
    
    
    $ losetup    
    $ mount -o loop /tmp/foo /mnt1    
    $ losetup
    NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
    /dev/loop0         0      0         1  0 /tmp/foo
    $ umount /mnt1
    $ losetup
    $ 
    

    losetup如果您的文件映像中包含嵌入式分区, 您可能需要直接调用。

    例如,如果我有这张图片:

    $ fdisk -l /tmp/foo2      
    
    Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x1f25ff39
    
         Device Boot      Start         End      Blocks   Id  System
    /tmp/foo2p1            2048      204799      101376   83  Linux
    

    我不能直接挂载

    $ mount -o loop /tmp/foo2 /mnt1
    mount: /dev/loop0 is write-protected, mounting read-only
    mount: wrong fs type, bad option, bad superblock on /dev/loop0,
           missing codepage or helper program, or other error
    

    但是如果我使用losetup然后kpartx我可以访问分区:

    $ losetup -f /tmp/foo2
    $ losetup
    NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
    /dev/loop0         0      0         0  0 /tmp/foo2
    $ kpartx -a /dev/loop0
    $ mount /dev/mapper/loop0p1 /mnt1
    $
    
    • 25
  2. Stephen Kitt
    2018-10-18T07:31:21+08:002018-10-18T07:31:21+08:00

    文件系统期望读取和写入块设备,但图像文件不是块设备。循环设备在文件(或另一个块设备,可选地重新映射)之上提供块设备。

    很多情况下挂载镜像时不需要考虑loop设备,因为mount一切都为你搞定;但仍涉及循环设备。losetup -l -a将向他们展示。

    另请参阅mount 和 mount -o loop 有什么区别。

    • 22
  3. schily
    2018-10-18T07:31:46+08:002018-10-18T07:31:46+08:00

    您似乎在 Linux 上,而 Linux 对该功能使用了错误的名称。

    我于 1988 年在 SunOS-4.0 上发明了该功能,我称该功能为fbk- 文件模拟块设备。

    背景是设备驱动程序在普通文件之上模拟块设备。你需要这个,因为文件系统不能使用普通文件作为文件系统的后台存储。它需要一个块设备,这就是fbk模拟的。

    一段时间以来,有些人使程序mount变得更加聪明,并且有一些挂载实现会自动fbk为文件创建一个实例,以防mount程序检测到预期为块设备的参数似乎是一个计划文件。

    • 11
  4. rackandboneman
    2018-10-19T00:57:22+08:002018-10-19T00:57:22+08:00

    即使在后台不需要它来从文件挂载文件系统,对于使用绝对需要块设备的驱动程序或程序的任何设置,您仍然需要它。想想 nbd(网络块设备)服务器、复合块设备驱动程序,如 mdraid、lvm 等。

    • 0

相关问题

  • 我应该在 NAS 的 SD 卡中使用哪个文件系统?

  • 如何提前知道 .zip 内部是否有父目录

  • Virtualbox 动态分配磁盘 *.vdi 不断增长

  • du/df 和 ls 报告不同的磁盘使用情况

  • Linux 内核开发人员如何处理数百万行代码的工作?他们是一种方法吗?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve