losetup: não é possível encontrar um dispositivo de loop não utilizado [fechado]

10

Estou tentando criar um dispositivo de loop e obtendo um erro que não entendo:

# losetup -f  /media/2TB/sdb2-fix-file
losetup: cannot find an unused loop device

Não tenho dispositivos de loop configurados. A saída de losetup -aé nula e:

# ls -l /dev/loop*
crw-rw---- 1 root disk 10, 237 Oct  4 15:50 /dev/loop-control

Correr losetup -Dnão ajuda em nada.

Por que isso está ocorrendo?


Abaixo está a stracesaída completa :

# strace -fs80 losetup -f  /media/2TB/sdb2-fix-file
execve("/usr/bin/losetup", ["losetup", "-f", "/media/2TB/sdb2-fix-file"], 0x7ffc6fe88c38 /* 164 vars */) = 0
brk(NULL)                               = 0x55a51e754000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=215090, ...}) = 0
mmap(NULL, 215090, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f35d682e000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/libsmartcols.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000n\0\0\0\0\0\0@\0\0\0\0\0\0\0\210\341\2\0\0\0\0\0\0\0\0\0@\0008\0\10\0@\0\34\0\33\0\1\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=190600, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35d682c000
mmap(NULL, 2290720, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f35d640f000
mprotect(0x7f35d643b000, 2097152, PROT_NONE) = 0
mmap(0x7f35d663b000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2c000) = 0x7f35d663b000
mmap(0x7f35d663e000, 1056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f35d663e000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\20\2\0\0\0\0\0@\0\0\0\0\0\0\0\360s\37\0\0\0\0\0\0\0\0\0@\0008\0\n\0@\0G\0F\0\6\0\0\0\5\0\0\0@\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2065840, ...}) = 0
mmap(NULL, 3893456, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f35d6058000
mprotect(0x7f35d6206000, 2093056, PROT_NONE) = 0
mmap(0x7f35d6405000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1ad000) = 0x7f35d6405000
mmap(0x7f35d640b000, 14544, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f35d640b000
close(3)                                = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35d6829000
arch_prctl(ARCH_SET_FS, 0x7f35d6829740) = 0
mprotect(0x7f35d6405000, 16384, PROT_READ) = 0
mprotect(0x7f35d663b000, 8192, PROT_READ) = 0
mprotect(0x55a51ccf5000, 4096, PROT_READ) = 0
mprotect(0x7f35d6863000, 4096, PROT_READ) = 0
munmap(0x7f35d682e000, 215090)          = 0
brk(NULL)                               = 0x55a51e754000
brk(0x55a51e775000)                     = 0x55a51e775000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=1687072, ...}) = 0
mmap(NULL, 1687072, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f35d668d000
close(3)                                = 0
stat("/sys/block", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
uname({sysname="Linux", nodename="svelte", ...}) = 0
stat("/dev/loop-control", {st_mode=S_IFCHR|0660, st_rdev=makedev(10, 237), ...}) = 0
openat(AT_FDCWD, "/dev/loop-control", O_RDWR|O_CLOEXEC) = -1 ENODEV (No such device)
stat("/dev/loop", 0x7fffae014c60)       = -1 ENOENT (No such file or directory)
stat("/dev/loop0", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop1", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop2", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop3", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop4", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop5", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop6", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
stat("/dev/loop7", 0x7fffae014c00)      = -1 ENOENT (No such file or directory)
open("/dev/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=3400, ...}) = 0
getdents(3, /* 170 entries */, 32768)   = 4936
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2997, ...}) = 0
read(3, "# Locale name alias data base.\n# Copyright (C) 1996-2017 Free Software Foundatio"..., 4096) = 2997
read(3, "", 4096)                       = 0
close(3)                                = 0
open("/usr/share/locale/en_AU.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_AU/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "losetup: ", 9losetup: )                = 9
write(2, "cannot find an unused loop device", 33cannot find an unused loop device) = 33
write(2, "\n", 1
)                       = 1
close(1)                                = 0
close(2)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++
Tom Hale
fonte
Caso seja um problema XY: você pode montar arquivos de imagens etc. diretamente e mountcuidará do dispositivo de loop. Você não tem que ligar losetupmais, embora eu acho que ainda flutua em torno de muitos tutoriais na web ...
dirkt
Estou tentando criar um dispositivo de sobreposição para uso dm-setup. Para outros que se perguntam, aqui está o que é um problema XY .
Tom Hale
Talvez que necessita o loopmódulo carregado .. # modprobe loop.
Ralph Rönnquist
2
Não concordo em fechar isso. "fora do tópico, pois é improvável que ajude futuros leitores" é falso nesse caso. Eu tive o mesmo problema e a solução fornecida me ajudou.
user31389

Respostas:

12

Os módulos do kernel no disco eram incompatíveis com o kernel em execução. Eu atualizei meu kernel e ainda não reiniciei.

Corrermodprobe loop me deu:

modprobe: FATAL: Module loop not found in directory /lib/modules/4.9.51-1-MANJARO.

Após a reinicialização, modprobe loopfuncionou bem.

Tom Hale
fonte
Então o problema era "módulos no disco incompatíveis com a execução do kernel"?
dirkt
@dirkt Graças, essas foram as palavras que eu queria :)
Tom Hale
@dirkt Eu tenho refletido sobre isso, e me pergunto como eu teria descoberto que essa era realmente a causa, dados os sintomas que eu estava enfrentando. (As atualizações anteriores não causaram problemas). Se você tiver alguma indicação, ficaria feliz em ouvi-la.
Tom Hale #
Eu percebi isso na sua solução descrita ("após a reinicialização, funcionou"). Em geral, a compilação de um kernel alterará endereços etc., de modo que torne os módulos compilados recentemente incompatíveis com o kernel antigo. É algo que você precisa saber e é fácil entender se você entende como a montagem funciona. É também por isso que você sempre reinicia depois de compilar um novo kernel. Sem a informação "Acabei de compilar um novo kernel", teria sido difícil para mim adivinhar o problema. O que novamente mostra que é muito importante fornecer todas as informações sobre o que você fez ao fazer uma pergunta.
dirkt