我正在尝试分离环回设备。
推测losetup --detach可能成功(没有错误消息和返回代码 0),但设备仍然存在。
有任何想法吗?
root@Cassiopeia:~# losetup -a
/dev/loop1: [2053]:5243868 (/var/lib/snapd/snaps/core_6034.snap)
/dev/loop6: [2053]:19401380 (/tmp/imagefile)
/dev/loop4: [2053]:5249290 (/var/lib/snapd/snaps/canonical-livepatch_49.snap)
/dev/loop2: [2053]:5243293 (/var/lib/snapd/snaps/canonical-livepatch_50.snap)
/dev/loop0: [2053]:5249134 (/var/lib/snapd/snaps/core_5897.snap)
/dev/loop5: [2053]:5249130 (/var/lib/snapd/snaps/core_6130.snap)
/dev/loop3: [2053]:5244442 (/var/lib/snapd/snaps/canonical-livepatch_54.snap)
root@Cassiopeia:~# losetup --detach /dev/loop6
root@Cassiopeia:~# echo $?
0
root@Cassiopeia:~# losetup -a
/dev/loop1: [2053]:5243868 (/var/lib/snapd/snaps/core_6034.snap)
/dev/loop6: [2053]:19401380 (/tmp/imagefile)
/dev/loop4: [2053]:5249290 (/var/lib/snapd/snaps/canonical-livepatch_49.snap)
/dev/loop2: [2053]:5243293 (/var/lib/snapd/snaps/canonical-livepatch_50.snap)
/dev/loop0: [2053]:5249134 (/var/lib/snapd/snaps/core_5897.snap)
/dev/loop5: [2053]:5249130 (/var/lib/snapd/snaps/core_6130.snap)
/dev/loop3: [2053]:5244442 (/var/lib/snapd/snaps/canonical-livepatch_54.snap)
Run Code Online (Sandbox Code Playgroud) 我正在使用 Ubuntu 18.04,并尝试使用以下命令安装 Matlab ISO:
sudo mount R2018a_glnxa64_dvd1.iso /mnt/cdrom -o loop
Run Code Online (Sandbox Code Playgroud)
但终端的响应如下:
mount: /mnt/cdrom: failed to setup loop device for R2018a_glnxa64_dvd1.iso.
Run Code Online (Sandbox Code Playgroud)
我不确定这意味着什么以及如何推进它。
几年前,我用更大的硬盘升级了我的上网本。我想保留旧硬盘上的内容,以防万一我还想删除它。
所以我将旧硬盘复制到新硬盘上的文件中:
dd if=/dev/sdd5 of=~/fw-disk-image/fw-sdd5-linux-lvm-partition.raw
Run Code Online (Sandbox Code Playgroud)
我编写/复制了一个脚本,用于将lvms作为只读文件系统安装在该分区上:
losetup -r /dev/loop1 ~/fw-disk-image/fw-sdd5-linux-lvm-partition.raw
pvscan
vgscan
vgchange -a y fw
cd /mnt/fw
for i in root tmp usr var home
do
mount -o ro /dev/fw/$i $i
done
Run Code Online (Sandbox Code Playgroud)
现在这工作了很长一段时间,现在突然在vgchange -a y fw命令中失败了:
# vgchange -a y fw
Error writing device /dev/loop1 at 4096 length 512.
bcache_invalidate: block (4, 0) still dirty
Failed to write mda header to /dev/loop1 fd -1
Failed to update old PV extension headers in VG fw.
Volume group "fw" …Run Code Online (Sandbox Code Playgroud) 我无法卸载在其上创建并删除映射的分区kpartx:
# mount /dev/sdb1 usb/
# cd usb/
# kpartx -a -p sda -r -s -v sda.img
add map loop0sda1 (254:5): 0 16777216 linear 7:0 2048
add map loop0sda2 (254:6): 0 16777216 linear 7:0 16779264
add map loop0sda3 (254:7): 0 440401920 linear 7:0 33556480
add map loop0sda4 (254:8): 0 26159792 linear 7:0 473958400
# kpartx -dv /dev/loop0
del devmap : loop0sda4
del devmap : loop0sda3
del devmap : loop0sda2
del devmap : loop0sda1
# cd ..
#umount usb/ …Run Code Online (Sandbox Code Playgroud) 我必须通过 映射几个环回设备dmsetup。
我可以跟踪哪个环回设备映射到特定的/dev/dm-X设备文件,但是有没有一种简单的方法可以单独获取此信息/dev/dm-X?
dmsetup info在这里对我没有任何帮助。
我正在使用cryptsetup分离的标头。为此,我使用--header 参数来指定头文件。我可以使用以下方式打开我的设备:
cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER
Run Code Online (Sandbox Code Playgroud)
但我需要提供标头,而不是作为文件,而是作为另一个命令的输出(我cat在这里使用命令进行说明)
cryptsetup luksOpen /dev/sdb1 sdb1 --header <(cat LUKS-HEADER)
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我收到以下错误:
Attaching loopback device failed (loop device with autoclear flag is required).
Run Code Online (Sandbox Code Playgroud)
这很令人困惑,因为类似的方法适用于提供密钥,即
cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER --key-file <(printf asdf)
Run Code Online (Sandbox Code Playgroud)
上面的命令工作正常(我使用“asdf”作为示例密码)。
如何--header从管道/另一个进程向选项提供参数?
赏金更新:
接受的答案有效,即我可以使用:
cat LUKS-HEADER > /dev/ram0
cryptsetup luksDump /dev/ram0
Run Code Online (Sandbox Code Playgroud)
但是,我需要一个如何使用进程替换的解决方案,即。目前,进程替换不起作用:
cryptsetup luksDump <(cat LUKS-HEADER)
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
Attaching loopback device failed (loop device with autoclear flag is required).
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用文件从头开始制作硬盘映像。这包括 MBR、分区表、分区数量等。但我一生都无法让 Linux 挂载我创建的分区。
\n\n编辑:请参阅问题末尾的更新 - 似乎与 vboxsf 有关
\n\n到目前为止,我已经尝试了许多不同的方法,但那些最有效的方法最终都到达了同一个地方。我在下面制作了一个简化版本,应该足以解释我的问题
\n\n使用 dd 生成空文件(或截断速度)
\n\ndd if=/dev/zero of=test.img bs=1M count=150\nRun Code Online (Sandbox Code Playgroud)\n\n制作分区表
\n\nparted -s test.img mklabel gpt\nWarning: The resulting partition is not properly aligned for best performance.\nRun Code Online (Sandbox Code Playgroud)\n\n制作分区
\n\nparted -s test.img -- mkpart logical 0 5M\nparted -s test.img set 1 bios_grub on\nparted -s test.img -- mkpart logical 5M 50M\netc.\nRun Code Online (Sandbox Code Playgroud)\n\n安装为循环设备(加载 max_part=31 的循环模块)
\n\nlosetup /dev/loop0 test.img\nRun Code Online (Sandbox Code Playgroud)\n\nlsblk 来检查
\n\n …filesystems partition loop-device disk-image partition-table
所以我的设置是这样的。
$ truncate -s 1T volume
$ losetup -f --show volume
/dev/loop0
$ mkfs.ext4 /dev/loop0
$ ls -sh volume
1.1G volume
$ mount /dev/loop0 /mnt/loop
Run Code Online (Sandbox Code Playgroud)
现在我有 1.1TB 的卷,正如预期的那样。ext4 的开销将稀疏文件扩展至 1.1G,但这没关系。现在添加一个文件。
$ dd if=/dev/urandom of=/mnt/loop/file bs=1M count=10240
$ ls -sh volume
12G volume
Run Code Online (Sandbox Code Playgroud)
很好,现在我不想要这个文件了。
$ rm /mnt/loop/file
$ ls -sh volume
12G volume
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,可用空间仍然占用空间,并$ fallocate -d volume释放了 1GB。
我的问题是,如何在不将卷扩展到完整大小的情况下将此处的可用空间清零?$ dd if=/dev/zero会将其扩展至完整大小,并conv=sparse使其在卷内创建一个无用的稀疏文件。
TL;DR:有没有一种方法可以losetup忽略空块对空扇区的写入,同时允许其他所有操作?
我正在尝试找出一种干净且安全的方法来在构建脚本内使用循环设备。据我所知,如果您想要(GPT)分区和(FAT32,EXT3)格式化稀疏文件1 ,则需要循环设备。
例如:假设我有这个脚本:
#!/bin/bash
set -ex
truncate --size 4G target.img
sfdisk target.img < partitions
loop_device=$(losetup -f --show target.img)
trap "losetup -d $loop_device" EXIT
partx -u $(loop_device)
mkfs.vfat ${loop_device}p1
mkfs.ext4 ${loop_device}p2
Run Code Online (Sandbox Code Playgroud)
在大多数快乐和不快乐的路径中,循环设备将通过 bash 调用来清理losetup。但也有一些不愉快的路径2导致循环设备被抛在后面。
如果这是有关挂载的问题,那么简单的解决方案是在挂载名称空间中运行unshare -m. 这将导致内核在进程退出时清理挂载点,而进程不会显式执行相同的操作。
此外,如果循环设备首先是通过挂载创建的,mount -o loop那么当挂载点存在时,循环设备将被清理,因此通过代理,挂载命名空间也可以用于清理循环设备。
但由于我所追求的是全为零的文件上的 GPT 分区表,因此没有文件系统可以成功安装在其上(据我所知)。
那么,当进程、进程组、命名空间等被清理时,是否有其他方法可以让内核清理循环设备?
dd偏移量进行复制,但这会导致将多个 GB 的零写入磁盘,而不是保留为稀疏文件。所以这里“稀疏”二字很重要kill -9loop-device ×10
linux ×3
cryptsetup ×1
disk-image ×1
filesystems ×1
kpartx ×1
linux-kernel ×1
lsof ×1
lvm ×1
mount ×1
partition ×1
pipe ×1
shell ×1
sparse-files ×1