está no dispositivo sem montá-lo

9

É possível rodar lsem um dispositivo sem montá-lo primeiro?
Algo assim:

# ls /dev/sda1
satirizar
fonte
Com que finalidade?
dawud 17/09/2013
Acho que não. Você definitivamente precisaria de uma ferramenta além disso ls.
strugee
Não. Por que você não nos diz o que está tentando alcançar?
Jasonwryan
1
para aqueles momentos em que quero montar algum dispositivo, mas não me lembro se é sda1 / 2/3/4/5/6, etc. Só precisa listar os arquivos nesse dispositivo para me dar uma pista se é o dispositivo que eu sou procurando
lampoon 17/09/2013
A propósito: se você tem uma imagem de um disco (não uma partição), poderá ver seus arquivos testdiskexecutando o testdiskcomando com um caminho de arquivo de imagem como seu primeiro parâmetro na linha de comando.
Abbafei 21/10

Respostas:

11

Você pode usar o debugfsprograma de e2fsprogs . Apesar do 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
 …   

onde "ls -l" é um debugfscomando específico que age principalmente como ls -l; você não pode usar nenhum comando arbitrário do shell 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

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

msw
fonte
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 sistemas de arquivos ext2 / ext3 / ext4 e mtools para sistemas de arquivos FAT.

Para um ext2 / ext3 / ext4, em vez de chamar o programa perigoso e difícil de usar debugfs, é possível 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 sistemas de arquivos suporta a atribuição de rótulos aos sistemas de arquivos (por exemplo tune2fs -L foo). Portanto, dê a todos os seus sistemas de arquivos um rótulo exclusivo. Em seguida, monte o sistema de arquivos pelo rótulo:

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

ou

mount LABEL=foo /media/foo
Gilles 'SO- parar de ser mau'
fonte
2

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

Você poderia escrever um utilitário que contornasse isso tendo sua própria cópia de algumas partes do driver do sistema de arquivos (existe, por exemplo, para a leitura de sistemas de arquivos Ext2 no Windows), mas isso é bastante impraticável.

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

peterph
fonte
1

Como descrito anteriormente, o debugfs funciona bem.

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

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

ntfsls /dev/sda2

Para o FAT, existe o mdir, do mtools.

mdir -i /dev/sdc1

Para exFAT, não tenho certeza. Parece que o exfat-utils não inclui nenhuma ferramenta semelhante à descrita acima. No entanto, existe dumpexfat, mas acho que não fornecerá as informações solicitadas.

Para descobrir mais detalhes sobre as unidades conectadas, acesse lsblk.

lsblk

Pessoalmente, prefiro isso e defini um alias para ele:

alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"
Mika Norén
fonte