Existe algum comando que produzirá os blocos inicial e final de qualquer arquivo?
command-line
filesystems
files
preciso
fonte
fonte
Respostas:
hdparm
Não tenho 100% de certeza de que é isso que você está procurando, mas acredito que você pode fazer isso usando o comando
hdparm
, especificamente com sua--fibmap
opção.excerto
Exemplo
Digamos que temos um arquivo de amostra.
Agora quando corremos
hdparm
.filefrag
Outro método interessante para descobrir os blocos inicial e final de um arquivo é
filefrag
. Você precisará usar as opções apropriadas para obter a saída desejada. Uma vantagem dessa ferramentahdparm
é que qualquer usuário pode executá-la, portanto nãosudo
é necessário. Você precisará usar o-b512
comutador para que as saídas sejam exibidas em blocos de 512 bytes. Também precisamos dizerfilefrag
para ser detalhado.Exemplo
debugfs
Um terceiro método para obter os LBAs de um arquivo é fazer uso
debugfs
. Esse método exigirá um pouco de matemática, mas achei importante mostrar como se pode converter do valor de extensões relatado pelosdebugfs
LBAs para aqueles que possam estar curiosos.Então, vamos começar com o inode do arquivo.
NOTA: Também podemos usar o nome do arquivo,
debugfs
mas, para esta demonstração, utilizarei o inode.Agora vamos obter as
stat
informaçõesdebugfs
sobre o nosso inode.As informações importantes estão na seção de extensões. Na verdade, esses são os blocos do sistema de arquivos que estão sendo usados por este inode. Nós apenas precisamos convertê-los para o LBA. Podemos fazer isso através da seguinte equação.
NOTA: Supondo que o nosso sistema de arquivos use tamanhos de bloco de 4k e que o hardware subjacente use unidades de 512 bytes, precisamos multiplicar as existentes por 8.
Exemplo
Portanto, em nosso exemplo, nossa extensão inicial e final é a mesma, pois nosso arquivo se encaixa em uma única extensão.
Portanto, nossos LBAs são 282439184..282439191.
Referências
fonte
filefrag
.debugfs
.filefrag
com os tamanhos de bloco disponíveis de 1024 e 2048 ..debugfs
com extensões de arquivo maiores : 0 - 12187 .. vou levar um tempo e entender .. isso é uma grande ajuda, obrigado ...Número do setor relativo ao dispositivo de bloco que contém o FS (não o disco inteiro)
(Observe que
hdparm --fibmap
é relativo ao disco inteiro, não à partição ou a qualquer outro bloco que detém o FS. Também requer raiz.)filefrag -e
funciona bem e usa o ioctl genérico e eficienteFIEMAP
, por isso deve funcionar em praticamente qualquer sistema de arquivos (incluindo o BTRFS geralmente estranho, mesmo para arquivos compactados por BTRFS). Ele retornará ao FIBMAP para sistemas de arquivos / kernels sem suporte ao FIEMAP.Somente XFS
Se você estiver usando xfs, terá uma
xfs_bmap
saída melhor: mostra onde existem buracos, enquantofilefrag
apenas a próxima extensão começa em um setor posterior. Ele usa blocos de 512B, não importa o tamanho real do sistema de arquivos. (normalmente 4k no Linux). Ele mostra em qual grupo de alocação cada extensão está e como está alinhado nos limites da faixa RAID.-l
é redundante quando-v
usado, mas por algum motivo eu sempre digito-vpl
.-pl
é uma saída mais compacta.Ambos
filefrag
exfs_bmap
mostram extensões pré-alocadas.hdparm --fibmap
só é útil se você quiser um número de setor relativo a todo o disco rígido , não dentro da partição em que o sistema de arquivos está. Ele não funciona sobre o RAID de software (ou provavelmente qualquer outra coisa entre o sistema de arquivos e o disco rígido). Também requer raiz. Apesar do nome da opção, ele realmente usaFIEMAP
quando disponível (o novo mapa de extensão ioctl, não o antigo mapa de bloco lento ioctl).fonte
Portanto, para um determinado arquivo, você deseja saber quais números de bloco de disco contêm o início e o final desse arquivo.
debugfs (8) parece promissor para FSes ext2 / 3/4
stat (1), ls -i, lsof (8) fornece o número do inode, mas não muito mais sobre blocos de disco.
head / tail --bytes = 1024 é útil para o conteúdo do arquivo, mas não para os blocos de disco.
dd (1) será o que você deseja inspecionar o conteúdo do bloco - esteja alerta para a diferença entre os parâmetros seek = e skip = e evite = / dev / ... a menos que você realmente queira que o arquivo de saída seja um dispositivo .
fonte
hdparm --fibmap
listará os blocos que um arquivo ocupa. Observe que eles podem não ser contíguos; portanto, "início e fim" não faz sentido.fonte
--fibmap
. Além disso, você precisa especificar um nome de arquivo com ele. Exemplo:hdparm --fibmap afile
.hdparm
era em todo o nível da unidade, nunca a usei para arquivos antes.