.png)
Hace un par de años actualicé mi netbook con un disco duro más grande. Quería conservar el contenido del antiguo disco duro en caso de que todavía quisiera sacar algo de él.
Así que copié el disco duro antiguo en un archivo del nuevo:
dd if=/dev/sdd5 of=~/fw-disk-image/fw-sdd5-linux-lvm-partition.raw
y escribí/copié un script para montar los lvms en esa partición como sistemas de archivos de solo lectura:
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
Esto funcionó durante mucho tiempo y ahora, de repente, falla con el 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
Supongo que desde que creé un dispositivo de bucle invertido de solo lectura, a vgchange no le gusta no poder escribir en él. Creo que el sistema de archivos estaba sucio la última vez que se utilizó el disco, pero quiero ignorarlo.
Mi sistema actual se está ejecutando actualmente:
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
¿Hay alguna manera de que pueda (nuevamente) montar los LV en esta partición sin dejar de ser estrictamente de solo lectura?
Respuesta1
A continuación se muestra una solución alternativa: dado que LVM quiere un dispositivo de bloque de lectura y escritura, creamos uno con un dispositivo de bloque superpuesto basado en el dispositivo de bloque de solo lectura (ver esta otra pregunta).
Como raíz:
- Cree un archivo disperso con el mismo tamaño que el dispositivo de bloque de solo lectura
(incluso si es más grande que el sistema de archivos actual)truncate -s`blockdev --getsize64 /dev/loop1` '/tmp/overlay.bin'
- Crear el dispositivo de bloque superpuesto
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 LVM se queje de PV duplicado con el mismo UUID, edite /etc/lvm/lvm.conf para excluir el /dev/loop1 original: ya sea
devices { scan = [ "/dev/mapper" ] }
(devices { filter = [ "r|/dev/loop1|" ] }
verestas preguntas frecuentes en la wiki de LVM) - Ahora
vgchange -a y fw
trabaja.
Durante el uso, se debe monitorear el archivo /tmp/overlay.bin, aunque no debería aumentar, especialmente si el sistema de archivos del LV está montado como de solo lectura.
Para cerrar el dispositivo de bucle:
vgchange -a n fw
dmsetup remove /dev/mapper/overlayloop1
rm /tmp/overlay.bin
losetup -d /dev/loop1
Respuesta2
No era el sistema de archivos el que estaba sucio (puede que lo estuviera, pero ese no es el problema aquí), sino la estructura bcache de LVM. Supongo que se ha cambiado alguna configuración predeterminada y esa es la razón por la que ya no funciona.
Sugerencias:
Configure el dispositivo de bucle en modo rw una vez. Eso debería arreglar el problema. Después del éxito,
vgchange
puede destruir el dispositivo de bucle y configurarlo nuevamente. Sin haber montado el sistema de archivos.
Incluso puedes probar si eso resuelve el problema sin hacer que loopdev sea rw: puedes crear otro loopdev en un archivo de 100 M y crear una instantánea. Desafortunadamente, tendrías que hacerlo manualmente condmsetup
. Luego puede hacer que las herramientas LVM escaneen la instantánea. Todos los cambios se escribirán en la instantánea.Intentar
vgchange -a y --readonly fw