Por que preciso fazer o resize2fs depois do lvextend?

2

Para redimensionar a partição LVM2, é necessário executar os seguintes 2 comandos:

# lvextend -L+1G /dev/myvg/homevol
# resize2fs /dev/myvg/homevol

No entanto, quando executo lvextend , vejo que as alterações já estão aplicadas à partição (como mostrado em Gnome Disks). Então, por que ainda preciso fazer resize2fs ?

    
por Woofas 13.01.2018 / 20:19

4 respostas

8

O comando lvextend (sem a opção --resizefs ) apenas faz com que o arranjo do LVM aumente o dispositivo de bloco que é o volume lógico. Não importa o tipo de sistema de arquivos (ou mesmo se há ou não um sistema de arquivos) no LV, essas operações são sempre similares.

Se o LV contiver um sistema de arquivos ext2 / 3/4, a próxima etapa é atualizar os metadados do sistema de arquivos para tornar o sistema de arquivos ciente de que ele tem mais espaço disponível e criar / estender as estruturas de metadados necessárias para gerenciar espaço. No caso de sistemas de arquivos ext2 / 3/4, isso envolve pelo menos:

  • criando novos inodes para o espaço adicionado
  • estendendo as estruturas de dados de alocação de blocos para que o sistema de arquivos possa dizer se algum bloco do espaço adicionado está em uso ou livre
  • movendo potencialmente alguns blocos de dados se estiverem no caminho da extensão da estrutura de dados mencionada anteriormente

Esta parte é específica para o tipo de sistema de arquivos, embora os tipos de sistema de arquivos ext2 / 3/4 sejam similares o suficiente para que todos possam ser redimensionados com uma única ferramenta resize2fs . Para XFS, sistemas de arquivos, você usaria uma ferramenta xfs_growfs . Outros sistemas de arquivos podem ter suas próprias ferramentas de extensão. E se o volume lógico não contivesse um sistema de arquivos, mas sim algo como um banco de dados "bruto" ou um volume Oracle ASM, um outro procedimento precisaria ser aplicado.

Cada sistema de arquivos tem diferentes operações internas e, portanto, as condições para estender um sistema de arquivos serão diferentes para cada um. Demorou até que uma API comum fosse projetada para a extensão do sistema de arquivos; que tornou possível implementar o comando fsadm resize , que fornece uma sintaxe unificada para estender vários tipos de sistema de arquivos. A opção --resizefs de lvextend apenas usa o comando fsadm resize .

Em poucas palavras: após lvextend , as ferramentas no nível do LVM, como lvs , vgs , lvdisplay e vgdisplay , verão o tamanho atualizado, mas o sistema de arquivos e as ferramentas que o operam, como df , não vai ver ainda.

    
por 13.01.2018 / 23:37
7

A camada LVM é apenas um contêiner para o sistema de arquivos dentro. Você pode dizer a lvextend para redimensionar o sistema de arquivos dentro do volume lógico sem ter que executar uma resize2fs separada adicionando a opção -r (ou --resizefs ):

lvextend -r ...
    
por 13.01.2018 / 20:24
4

Porque os sistemas de arquivos e os volumes lógicos são abstrações diferentes. Um volume é um pedaço de disco (como uma partição) - ou pelo menos o equivalente "virtual". É apenas um dispositivo de bloco. Um sistema de arquivos é uma estrutura que vai dentro dele (ou, acima disso, se você preferir) e que é usada para fornecer um mapeamento entre arquivos (e diretórios e assim por diante) para aquele dispositivo. Sem resize2fs , a partição é maior, mas o sistema de arquivos não está aproveitando o espaço disponível.

Você pode criar um sistema de arquivos inicialmente que não ocupe toda a partição. Na página mke2fs man:

The file system size is specified by fs-size. If fs-size does not have a suffix, it is interpreted as power-of-two kilobytes, unless the -b blocksize option is specified, in which case fs-size is interpreted as the number of blocksize blocks. If the fs-size is suffixed by 'k', 'm', 'g', 't' (either upper-case or lower-case), then it is interpreted in power-of-two kilobytes, megabytes, gigabytes, terabytes, etc. If fs-size is omitted, mke2fs will create the file system based on the device size.

Como você pode ver, o padrão é preencher a partição, e normalmente não há motivo para fazer o contrário - mas você pode, se quiser.

Observe que quando lvextend tem uma opção --resizefs (ou apenas -r ), que cuida do crescimento do sistema de arquivos depois que o volume foi estendido sem a necessidade de executar um comando separado.

    
por 13.01.2018 / 20:27
0

O resize2fs força o sistema de arquivos fs , a ser expandido ou reduzido, para ocupar o novo espaço produzido pelo comando lvextend . Os processos:

with fs:
        -- shrink --> 1. shrink fs 2. shrink volume
        -- expand --> 1. expand volume, 2. expand fs
    
por 13.01.2018 / 20:21