AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1151862
Accepted
Mikko Rantalainen
Mikko Rantalainen
Asked: 2024-01-19 21:58:16 +0800 CST2024-01-19 21:58:16 +0800 CST 2024-01-19 21:58:16 +0800 CST

Como encontrar o dispositivo subjacente para um arquivo no ext4 no LVM e em vários dispositivos de armazenamento subjacentes?

  • 772

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 -me 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á- fiolo 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
performance
  • 2 2 respostas
  • 37 Views

2 respostas

  • Voted
  1. jpiddle888
    2024-04-05T12:43:36+08:002024-04-05T12:43:36+08:00

    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 debugfsde /dev/xvda2 , que é minha partição raiz (/):

    # debugfs /dev/xvda2
    debugfs 1.46.5 (30-Dec-2021)
    debugfs:  ls /root
     262146  (12) .    2  (12) ..    268932  (12) .ssh
     268409  (16) .bashrc    268410  (16) .profile    276186  (16) .cache
     268256  (16) .ansible    268318  (24) .vim
     268408  (24) .bash_completion
     267590  (16) .vimrc    262167  (24) .bash_history
    debugfs:  stat /root/.bashrc
    Inode: 268409   Type: regular    Mode:  0644   Flags: 0x80000
    Generation: 4101506038    Version: 0x00000000:00000001
    User:     0   Group:     0   Project:     0   Size: 10137
    File ACL: 0
    Links: 1   Blockcount: 24
    Fragment:  Address: 0    Number: 0    Size: 0
     ctime: 0x64c7f06b:37648614 -- Mon Jul 31 12:33:31 2023
     atime: 0x660f7b2c:32146cc8 -- Thu Apr  4 23:16:44 2024
     mtime: 0x64c7ef9d:00000000 -- Mon Jul 31 12:30:05 2023
    crtime: 0x641493b2:49f692b4 -- Fri Mar 17 11:22:10 2023
    Size of extra inode fields: 32
    Inode checksum: 0x8cc75e77
    EXTENTS:
    (0-2):4145465-4145467
    

    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.

    • 1
  2. Best Answer
    Nikita Kipriyanov
    2024-04-05T13:47:45+08:002024-04-05T13:47:45+08:00

    Primeiro de tudo, use filefrago utilitário para encontrar a lista de todas as extensões de arquivo:

    merlin@uc-s4m75657:~$ sudo filefrag /mnt/spool/merlin/VMs/slax-64bit-11.4.0-merlin.iso -e
    Filesystem type is: ef53
    File size of /mnt/spool/merlin/VMs/slax-64bit-11.4.0-merlin.iso is 322979840 (78853 blocks of 4096 bytes)
     ext:     logical_offset:        physical_offset: length:   expected: flags:
       0:        0..    8191:    2703360..   2711551:   8192:            
       1:     8192..   14335:    2719744..   2725887:   6144:    2711552:
       2:    14336..   57343:    2732032..   2775039:  43008:    2725888:
       3:    57344..   65535:    2783232..   2791423:   8192:    2775040:
       4:    65536..   71679:    2797568..   2803711:   6144:    2791424:
       5:    71680..   78852:    2811904..   2819076:   7173:    2803712: last,eof
    /mnt/spool/merlin/VMs/slax-64bit-11.4.0-merlin.iso: 6 extents found
    

    physical_offsetlhe 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 -vswitch 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):

    system {
    #...
            extent_size = 8192              # 4 Megabytes
    #...
            physical_volumes {
                    pv0 {
    #...
                            device = "/dev/sda4"    # Hint only
    #...                        
                            pe_start = 2048
                            pe_count = 57105        # 223,066 Gigabytes
                    }
            }
    
            logical_volumes {
    #...
                    spool {
    #...
                            segment_count = 1
    
                            segment1 {
                                    start_extent = 0
                                    extent_count = 41361    # 161,566 Gigabytes
    #...
                                    stripes = [
                                            "pv0", 15744
                                    ]
                            }
                    }
            }
    
    }
    

    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.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve