Eu tenho um sistema com 3 dispositivos SSD ( ,, /dev/sda
) que contêm um único volume lógico LVM que abrange todos os dispositivos. Eu tenho uma única partição ext4 no volume lógico./dev/sdb
/dev/sdc
Acho que um dos dispositivos SSD ( /dev/sdb
) pode estar com algum defeito e ter desempenho reduzido em comparação com outros dispositivos.
Existe um comando para obter a lista de arquivos suportados por esse dispositivo?
Eu sei que posso obter uma lista de segmentos lógicos sudo pvdisplay -m
e a saída é semelhante a esta:
--- Physical volume ---
PV Name /dev/sda
VG Name storage
PV Size <1,82 TiB / not usable <1,09 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 476932
Free PE 0
Allocated PE 476932
PV UUID h3x3O1-1KWj-3pY6-kZ24-MVV4-54UE-ltEdfA
--- Physical Segments ---
Physical extent 0 to 476931:
Logical volume /dev/storage/vm
Logical extents 0 to 476931
--- Physical volume ---
PV Name /dev/sdb
VG Name storage
PV Size <3,64 TiB / not usable <3,84 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 953861
Free PE 0
Allocated PE 953861
PV UUID MsNlhh-W2It-CbX4-IxJn-lXJN-hlcd-EpBh9Q
--- Physical Segments ---
Physical extent 0 to 953860:
Logical volume /dev/storage/vm
Logical extents 476932 to 1430792
--- Physical volume ---
PV Name /dev/sdc
VG Name storage
PV Size <3,64 TiB / not usable <3,84 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 953861
Free PE 0
Allocated PE 953861
PV UUID sklK6w-XZd6-DqIp-ZT1g-O9rj-1ufw-UaC0z4
--- Physical Segments ---
Physical extent 0 to 953860:
Logical volume /dev/storage/vm
Logical extents 1430793 to 2384653
Então eu sei que as extensões lógicas 476932 a 1430792 são a área potencialmente problemática. Como mapear esse intervalo de segmentos lógicos para arquivos reais no sistema de arquivos (ext4) no topo do LVM?
Basicamente, estou tentando descobrir se o dispositivo está realmente com defeito ou se o padrão de uso desses arquivos pode ser tão azarado que estou atingindo um padrão de uso problemático para o hardware e o desempenho é pior do que o esperado. Nenhum dispositivo apresenta erros e todos os dados parecem bons, mas o desempenho deste único dispositivo parece ser pior do que o esperado.
O sistema está em uso, então prefiro diagnosticar isso on-line sem substituir nenhum dado. Eu sei que se eu pudesse simplesmente colocar off-line o dispositivo de armazenamento potencialmente problemático e sobrescrever seu conteúdo, eu poderia usá- fio
lo para compará-lo para ver se ele está funcionando abaixo das especificações ou não.
$ lsblk -s
...
storage-vm 253:0 0 9,1T 0 lvm /mnt/storage
├─sda 8:0 0 1,8T 0 disk
├─sdb 8:16 0 3,7T 0 disk
└─sdc 8:32 0 3,7T 0 disk
Basicamente, estou perguntando como obter uma lista de arquivos suportados por um único dispositivo de armazenamento quando o sistema de arquivos abrange vários dispositivos de armazenamento.
Ou se você puder fornecer instruções sobre como descobrir onde um determinado arquivo está realmente armazenado, tudo bem também. Eu então executaria essa rotina para cada arquivo para descobrir quais arquivos são suportados pelo dispositivo no qual estou interessado. Estou ciente de que pode ser que um único arquivo grande seja suportado por todos os dispositivos se o arquivo estiver fragmentado em um grande variedade de segmentos locais, então a resposta poderia ser que um único arquivo é suportado por todos os dispositivos, mas atualmente também não tenho ideia de como fazer isso.
$ sudo vgdisplay
--- Volume group ---
VG Name storage
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size <9,10 TiB
PE Size 4,00 MiB
Total PE 2384654
Alloc PE / Size 2384654 / <9,10 TiB
Free PE / Size 0 / 0
VG UUID MOrTMY-5Dly-48uQ-9Fa8-JNvf-tont-9in7ol
$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/storage/vm
LV Name vm
VG Name storage
LV UUID RDkaLH-mh6C-cXxT-6ojc-DxkB-o4jD-3CMHdl
LV Write Access read/write
LV Creation host, time staging, 2021-01-21 09:57:06 +0200
LV Status available
# open 1
LV Size <9,10 TiB
Current LE 2384654
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
Você pode ter uma ideia geral de onde o arquivo está localizado usando
debugfs
, mas isso dependerá muito de como seus LVs foram criados. Se eles estiverem usando o tipo distribuído, os dados não serão gravados sequencialmente nas unidades (primeiro unidade 1, depois unidade 2, etc.), portanto as extensões seriam divididas.Lembre-se de que a camada do sistema de arquivos (ext4) não conhece nem se preocupa com o dispositivo de bloco subjacente. Ele apenas o vê como um grande pedaço de espaço que pode usar para criar arquivos. Da mesma forma, o LV não conhece nem se preocupa com o sistema de arquivos sobreposto, pois sua função é apenas gerenciar seus próprios dispositivos físicos subjacentes.
Por causa disso, o que o LV chama de extensão 476932 a 1430792 não é necessariamente o que o sistema de arquivos chama de extensões. No entanto, como é uma gama tão grande de extensões, você poderá pelo menos chegar ao limite.
Um exemplo de uso
debugfs
de /dev/xvda2 , que é minha partição raiz (/):Você pode ver que este arquivo está localizado nas extensões 4145465-4145467. Se o LV subjacente foi criado como um LV linear, é possível que essas extensões sejam iguais ou muito semelhantes.
Primeiro de tudo, use
filefrag
o utilitário para encontrar a lista de todas as extensões de arquivo:physical_offset
lhe dará uma visão geral de onde as extensões do arquivo estão localizadas no sistema de arquivos . Observe que esses números são em termos de blocos do sistema de arquivos , que neste caso são 4k.Por exemplo, as segundas extensões deste arquivo começam no byte 11140071424 do início do sistema de arquivos.
A seguir, explore seu layout LVM. Execute
sudo lvm vgcfgbackup -v
, ele irá despejar um layout de cada VG/etc/lvm/backup/<vgname>
em formato textual (e-v
switch fará com que ele informe esses nomes, se você for preguiçoso). É importante usar um dump de backup recém-criado , para que as "dicas" dos nomes dos dispositivos nele sejam realmente os dispositivos usados no momento (um dump antigo se referirá ao estado do VG quando você fez alterações nele pela última vez, o que pode ter acontecido algumas reinicializações atrás, então os nomes reais dos dispositivos podem ter sido alterados desde então).Leia o dump do VG correspondente. É bastante detalhado, mas fácil de entender. Em primeiro lugar, lista diversas informações comuns sobre o VG, das quais o tamanho do PE é importante. Em seguida, ele lista os PVs e anota em qual PV você está interessado.
E abaixo estão listados todos os LVs, conforme o conjunto de segmentos. Para cada segmento indica onde está mapeado, PV e localização, em termos de extensão do LVM.
Veja o exemplo (retirei partes não relacionadas):
Este é o LV onde o sistema de arquivos acima está localizado. Vemos que ele está totalmente localizado no pv0, e a extensão do arquivo acima começa no byte 11140071424 + 15744 * 4MiB = 77175193600 do dispositivo
sda4
. Se o sistema de arquivos abrangesse vários segmentos, eu teria que subtrair seu tamanho (em bytes) do local do byte da extensão do arquivo (11140071424), até terminar no meio de um determinado segmento.