.png)
Há alguns anos, atualizei meu netbook com um disco rígido maior. Eu queria manter o conteúdo do disco rígido antigo, caso ainda houvesse algo que eu quisesse dele.
Então copiei o disco rígido antigo para um arquivo no novo:
dd if=/dev/sdd5 of=~/fw-disk-image/fw-sdd5-linux-lvm-partition.raw
e escrevi/copiei um script para montar os lvms nessa partição como sistemas de arquivos somente leitura:
losetup -r /dev/loop1 ~/fw-disk-image/fw-sdd5-linux-lvm-partition.raw
pvscan
vgscan
vgchange -a y fw
cd /mnt/fw
for i in root tmp usr var home
do
mount -o ro /dev/fw/$i $i
done
Agora isso funcionou por muito tempo e agora de repente falha no vgchange -a y fw
comando:
# vgchange -a y fw
Error writing device /dev/loop1 at 4096 length 512.
bcache_invalidate: block (4, 0) still dirty
Failed to write mda header to /dev/loop1 fd -1
Failed to update old PV extension headers in VG fw.
Volume group "fw" not found
Cannot process volume group fw
Suponho que, desde que criei um dispositivo de loopback somente leitura, o vgchange não está feliz por não poder gravar nele. Acho que o sistema de arquivos estava sujo quando o disco foi usado pela última vez, mas quero ignorar isso.
Meu sistema atual está em execução:
Linux fw 4.19.0-8-686-pae #1 SMP Debian 4.19.98-1 (2020-01-26) i686 GNU/Linux
$ vgchange --version
vgchange --version
LVM version: 2.03.02(2) (2018-12-18)
Library version: 1.02.155 (2018-12-18)
Driver version: 4.39.0
Configuration: ./configure --build=i686-linux-gnu --prefix=/usr --includedir=${prefix}/include --mandir=${prefix}/share/man --infodir=${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir=${prefix}/lib/i386-linux-gnu --libexecdir=${prefix}/lib/i386-linux-gnu --runstatedir=/run --disable-maintainer-mode --disable-dependency-tracking --exec-prefix= --bindir=/bin --libdir=/lib/i386-linux-gnu --sbindir=/sbin --with-usrlibdir=/usr/lib/i386-linux-gnu --with-optimisation=-O2 --with-cache=internal --with-device-uid=0 --with-device-gid=6 --with-device-mode=0660 --with-default-pid-dir=/run --with-default-run-dir=/run/lvm --with-default-locking-dir=/run/lock/lvm --with-thin=internal --with-thin-check=/usr/sbin/thin_check --with-thin-dump=/usr/sbin/thin_dump --with-thin-repair=/usr/sbin/thin_repair --enable-applib --enable-blkid_wiping --enable-cmdlib --enable-dmeventd --enable-dbus-service --enable-lvmlockd-dlm --enable-lvmlockd-sanlock --enable-lvmpolld --enable-notify-dbus --enable-pkgconfig --enable-readline --enable-udev_rules --enable-udev_sync
Existe alguma maneira de eu poder (novamente) montar os LVs nesta partição enquanto permaneço estritamente somente leitura?
Responder1
Abaixo está uma solução alternativa: dado que o LVM deseja um dispositivo de bloco de leitura e gravação, criamos um com um dispositivo de bloco de sobreposição baseado no dispositivo de bloco somente leitura (veja esta outra pergunta).
Como raiz:
- Crie um arquivo esparso com o mesmo tamanho do dispositivo de bloco somente leitura
(mesmo que seja maior que o sistema de arquivos atual)truncate -s`blockdev --getsize64 /dev/loop1` '/tmp/overlay.bin'
- Crie o dispositivo de bloco de sobreposição
loop=`losetup -f --show -- '/tmp/overlay.bin'` size=`blockdev --getsz /dev/loop1` printf '%s\n' "0 $size snapshot /dev/loop1 $loop P 8" | dmsetup create 'overlayloop1'
- Para evitar que o LVM reclame sobre PV duplicado com o mesmo UUID, edite /etc/lvm/lvm.conf para excluir o /dev/loop1 original: ou
devices { scan = [ "/dev/mapper" ] }
(devices { filter = [ "r|/dev/loop1|" ] }
vejaeste FAQ no wiki do LVM) - Agora
vgchange -a y fw
funciona.
Durante o uso, o arquivo /tmp/overlay.bin deve ser monitorado, embora não deva aumentar particularmente se o sistema de arquivos do LV for montado somente leitura.
Para fechar o dispositivo de loop:
vgchange -a n fw
dmsetup remove /dev/mapper/overlayloop1
rm /tmp/overlay.bin
losetup -d /dev/loop1
Responder2
Não o sistema de arquivos estava sujo (pode ter sido, mas esse não é o problema aqui), mas a estrutura do bcache do LVM. Acho que alguma configuração padrão foi alterada e é por isso que não funciona mais.
Sugestões:
Configure o dispositivo de loop no modo rw uma vez. Isso deve resolver o problema. Após o sucesso,
vgchange
você pode destruir o dispositivo de loop e configurá-lo novamente. Sem ter montado o sistema de arquivos.
Você pode até tentar se isso resolve o problema sem fazer o loopdev rw: Você pode criar outro loopdev em um arquivo de 100M e criar um instantâneo. Infelizmente você teria que fazer isso manualmente comdmsetup
. Então você pode fazer com que as ferramentas LVM verifiquem o instantâneo. Todas as alterações seriam gravadas no instantâneo.Tentar
vgchange -a y --readonly fw