É possível reduzir online um volume EXT4 com o LVM?

47

Hoje eu tentei isso na minha máquina com o OpenSUSE 12.3 (kernel 3.7):

# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported

/dev/mapper/system-srv é um volume EXT4.

É realmente sem suporte ou estou faltando alguma coisa?

Alicia
fonte

Respostas:

68

Como dizia a mensagem, você só pode aumentar um sistema de arquivos on-line. Se você quiser reduzi-lo, será necessário desmontá-lo primeiro.

De acordo com o mantenedor do sistema de arquivos ext4 , Ted Ts'o:

Desculpe, o encolhimento on-line não é suportado.

Michael Hampton
fonte
12
É uma pena ...
Alicia
5
O que há com o voto negativo?
Michael Hampton
16
@ MichaelHampton - algum idiota atirando no mensageiro? : D
tink
2
Isso foi há 10 anos. Isso já foi implementado?
duane
@duane Não. Não tem. Também não é provável que seja assim.
Michael Hampton
17

Sim, você pode reduzir / mover / aumentar uma partição raiz sem reinicializações (nem livecd nem usbkey): consulte esta resposta . É muito bem escrito e fácil de seguir, embora bastante longo e um pouco arriscado.

resize2fs não pode encolher ext4partições online . Essa limitação, quando aplicada na partição raiz, pode levar você a pensar que não pode evitar a reinicialização do host para permitir o encolhimento da rootpartição, o que pode ser algo que você deseja evitar. O processo vinculado permitirá desmontar a partição raiz sem nenhuma reinicialização. Portanto, sob essa luz, não é o redimensionamento on-line estritamente em relação ao estado montado da partição; no entanto, permanece um redimensionamento on-line em relação ao status on-line da rede ou à acessibilidade do host.

Obviamente, se você deseja apenas aumentar sua partição ext4, deve seguir as resize2fssoluções de trabalho convencionais .

A solução geral que eu vinculei funcionará em qualquer tipo de solução dedicada ou VPS, por exemplo.

TLDR; Esta solução implica em pivot_rootpara tmpfsque você possa umountviver com segurança sua partição raiz e mexer nela. Uma vez feito, você pivot_rootretornará à sua nova partição raiz.

Isso permite praticamente qualquer manipulação no sistema de arquivos raiz (mova-o, altere o sistema de arquivos, altere o dispositivo físico ...).

Eu pessoalmente usei isso, e funciona muito bem no sistema debian também, mas o guia foi escrito inicialmente em 2007 para redhat, a resposta que eu vinculei foi atualizada para o CentOS7. É altamente provável que funcione no seu OpenSUSE, embora provavelmente com alguma adaptação.

vaab
fonte
4
Isso não é 'online' em relação à comparação com 'online grow'. Todos os serviços devem estar inoperantes e seu sistema de arquivos raiz fica inacessível. Pode valer a pena contrastar isso com a abordagem livecd ou initramfs / rdshell neste comentário. Eu odiaria que as pessoas ficassem confusas com isso.
22616 Brian Brianman
2
@BrianChrisman Esta é realmente uma pegadinha que mereceu esclarecimentos e que espero ter coberto com uma edição em meu post. Muito obrigado pelo feedback.
vaab
O que eu gosto na solução referenciada é que ela é "quase online". Eu fiz isso em particular codificando um pequeno script e ferramentas no comando dracut e iniciei o initramfs resultante do kexec. Se isso pudesse, de alguma forma, manter uma sessão ssh aberta durante o processo, seria melhor. Suponho que, se você criar a raiz falsificada com sshd e arquivos necessários, inicie outro sshd (porque você está com ssh'd) em outra porta, então você pode ssh na outra porta e verificar a conectividade antes de continuar a lobotomizar o sistema.
Brian Chrisman
13

Se o caso for um servidor remoto sem console, você poderá reduzir o sistema de arquivos usando o initramfs durante a reinicialização. Você precisa adicionar resize2fs ao initramfs e executá-lo antes de montar o root.

Exemplo Debian / Ubuntu:

/ etc / initramfs-tools / hooks / resizefs (executável):

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case $1 in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs

exit 0

/ etc / initramfs-tools / scripts / local-premount / resizefs (executável)

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G
/sbin/e2fsck -yf /dev/sda1

Agora execute update-initramfs, reinicie, verifique o tamanho, remova esses scripts e update-intiramfs novamente.

Para dracut (Fedora, CentOS), use a mesma lógica (/usr/lib/dracut/modules.d).

Isso é muito útil para criptografar ou mover rootfs, sem espaço livre disponível para a nova partição.

urusha
fonte
2
Isso funciona como um encanto. Observe que você precisa executar o update-initramfs com a opção -u.
Diomidis Spinellis
Legal. No meu caso, eu também precisava update-grub.
Wojciech Kaczmarek