Como remover o limite de comprimento de losetup -a

3

Estou usando o losetup -a para ver meus dispositivos de loop, mas ele tem um limite de comprimento (que é de 62 caracteres). Então, não posso saber com certeza qual dispositivo de loop realmente quero.

Ex:

[root@r7byach]# losetup -a 
/dev/loop0: [fc03]:33030504 (/storage5_vol1/6/ABCD116476-linux-ubuntu-10_04-64b-base-07150/*)
/dev/loop1: [0015]:4933 (/storage4/5/ABCD12345-linux-centos-5-64b-base-86836/hdc)

Eu posso pegar a saída em / dev / loop1 usando

losetup -a|grep diskPath |cut -f1 -d:|cut -f3 -d/

Mas não consigo colocar o dispositivo em loop0, pois o nome não é totalmente qualificado.

Como posso obter o dispositivo de loop independentemente desse limite de tamanho?

    
por Diego Dias 16.03.2011 / 20:40

2 respostas

4

Com kernels recentes (≥ 2.6.37), veja A resposta de Petr Uzel . Com kernels mais antigos, esse limite de comprimento é inerente.

Strace mostra que losetup -a obtém o nome por meio do LOOP_GET_STATUS ioctl, que chama loop_get_status_old , que obtém seus dados de um struct loop_info . O campo de nome nessa estrutura de dados do kernel é limitado a LO_NAME_SIZE = 64 bytes. (Há também um loop_get_status64 e struct loop_info64 , mas eles têm a mesma limitação.) Então essa limitação é intrínseca, você não pode fazer nada melhor.

De qualquer forma, essa estrutura de dados mostra o nome original do dispositivo ou arquivo subjacente, mas você pode renomeá-lo (ou mesmo removê-lo), e isso não será refletido na saída de losetup .

A saída de losetup mostra o identificador do sistema de arquivos ( st_dev ) e inode ( st_ino ) do arquivo, por exemplo, [fc03]:33030504 . Você pode encontrar o dispositivo de bloco para o sistema de arquivos, pesquisando em /proc/partitions (linha começando com 252 3 ). Em seguida, procure o ponto de montagem desse dispositivo de bloco em /proc/mounts . Em seguida, execute find /mount/point -inum 33030504 para localizar o arquivo. Sim, é complicado, e não, não há maneira mais rápida (bem, há debugfs para alguns tipos de sistema de arquivos ).

    
por 16.03.2011 / 22:02
3

Desde o kernel 2.6.37, você pode procurar o nome do arquivo subjacente (sem a limitação de comprimento) via /sys/block/loopX/loop/backing_file . O comando losetup suporta este método desde util-linux 2.19.

    
por 17.03.2011 / 09:13