ls no dispositivo sem montá-lo

8

É possível executar ls em um dispositivo sem montá-lo primeiro?
Algo parecido com isto:

# ls /dev/sda1
    
por lampoon 17.09.2013 / 08:52

4 respostas

10

Você pode usar o programa debugfs de e2fsprogs . Apesar de seu nome histórico, ele funcionará em sistemas de arquivos ext2 / 3/4. O uso é simples:

# debugfs -R "ls -l" /dev/sda6
  2   40755 (2)   1001   1001    4096 17-Sep-2013 04:03 .
  2   40755 (2)   1001   1001    4096 17-Sep-2013 04:03 ..
 16  100644 (1)   1001   1001    9085 17-Sep-2013 04:03 avserver.conf
 17  100644 (1)   1001   1001    2177 17-Sep-2013 04:03 bash.bashrc
 26  100644 (1)   1001   1001     722 17-Sep-2013 04:03 crontab
 …   

em que "ls -l" é um comando debugfs specific que age principalmente como ls -l ; você não pode usar nenhum comando shell arbitrário lá. Por padrão, o debugfs abre uma unidade no modo somente leitura, portanto, isso é relativamente seguro; por exemplo, tentar isso em uma partição não ext2 / 3/4 apenas fornece um diagnóstico:

# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open

Eu não posso dizer que considero essa prática recomendável, mas ela fará o que você pedir.

    
por 17.09.2013 / 10:07
3

O objetivo de montar um sistema de arquivos é acessar seus arquivos. Portanto, não, em geral, você não pode acessar os arquivos de um sistema de arquivos sem montá-lo.

Existem alguns utilitários que acessam um arquivo diretamente, sem montagem, como debugfs para ext2 / ext3 / sistemas de arquivos ext4 e mtools para sistemas de arquivos FAT.

Para um ext2 / ext3 / ext4, em vez de invocar o programa perigoso e difícil de usar debugfs , você pode listar seu último local de montagem:

tune2fs -l /dev/sda1 | grep 'Last mounted'

No entanto, isso só é útil se o último local de montagem tiver sido gravado.

A maioria dos tipos de sistema de arquivos suporta o fornecimento de rótulos de sistemas de arquivos (por exemplo, tune2fs -L foo ). Portanto, dê a todos os seus sistemas de arquivos um rótulo exclusivo. Então monte o sistema de arquivos pelo rótulo:

mount /dev/disks/by-label/foo /media/foo

ou

mount LABEL=foo /media/foo
    
por 18.09.2013 / 03:20
2

Resposta simples: você não pode. ls usa rotinas libc padrão que se traduzem em chamadas do sistema que são atendidas pelo driver do sistema de arquivos, portanto, não é possível usar ls (ou qualquer coisa usando essas chamadas de sistema) sem montar o sistema de arquivos.

Você poderia escrever um utilitário que contornaria isso tendo sua própria cópia de algumas partes do driver do sistema de arquivos (tal coisa existe, por exemplo, para ler sistemas de arquivos Ext2 do Windows), mas isso é pouco prático.

Se o seu problema é apenas identificar as partições, você provavelmente deve começar a usar o GPT que tem espaço para nomes de partições (72 bytes por partição). Algumas soluções sobrepostas (Linux MD ou LVM, por exemplo) permitem nomear também.

    
por 17.09.2013 / 09:25
1

Como descrito anteriormente, o debugfs funciona bem.

debugfs -R "ls -l" /dev/sda1

Para NTFS, há ntfsls do ntfs-3g.

ntfsls /dev/sda2

Para o FAT, há mdir, de mtools.

mdir -i /dev/sdc1

Para o exFAT, não tenho certeza. Parece que exfat-utils não inclui ferramentas similares às descritas acima. Há dumpexfat embora, mas eu não acho que vai fornecer as informações solicitadas.

Para descobrir mais detalhes sobre as unidades conectadas, há o lsblk.

lsblk

Pessoalmente, prefiro isso e defini um alias para ele:

alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"
    
por 11.12.2017 / 21:47

Tags