Muy bien, lo descubrí con la ayuda de este enlace de Trello. En caso de que alguien más quiera hacer esto, este es el procedimiento.
Procedimiento
De una matriz RAID1 de dos discos, uno /dev/sda
que está defectuoso y otro /dev/sdc
bien conocido:
- Deshabilitar el montaje automático de esta matriz en
/etc/fstab
, reiniciar . Básicamente, queremos que btrfs olvide que esta matriz existe, ya que hay un error en el que aún intentará usar una de las unidades si está desconectada. -
Ahora que su matriz está desmontada, ejecute:
echo 1 | sudo tee /sys/block/sda/device/delete
reemplazando
sda
con el nombre del dispositivo defectuoso. Esto hace que el disco deje de girar (debe verificar esto en dmesg) y se vuelve inaccesible para el kernel.Alternativamente :¡simplemente saque la unidad de la computadora antes de arrancar! Elegí no optar por este método, ya que el anterior funciona bien para mí.
- Monta tu arreglo, con
-o degraded
modo. - Comience una operación de reequilibrio con
sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Esto reorganizará las extensiones en el disco en buen estado, convirtiéndolas asingle
(no RAID). Esto tardará casi un día en completarse, según la velocidad de su unidad y el tamaño de su matriz. (el mío tenía ~700 GiB y se reequilibró a una velocidad de 1 fragmento de 1 GiB por minuto) Afortunadamente, esta operación se puede pausar y mantendrá la matriz en línea mientras ocurre. - Una vez hecho esto, puede emitir
sudo btrfs device remove missing /mountpoint
para eliminar el dispositivo defectuoso 'faltante'. - Comience un segundo reequilibrio con
sudo btrfs balance start -mconvert=dup /mountpoint
para restaurar la redundancia de metadatos. Esto toma unos minutos en mi sistema. - ¡Has terminado! Su matriz ahora es
single
modo, con toda la redundancia eliminada. - Lleva tu disco defectuoso afuera y golpéalo con un martillo.
Resolución de problemas
- Ayuda, btrfs intentó escribir en mi disco defectuoso, se equivocó y lo forzó a solo lectura.
- ¿Seguiste el paso 1 y reiniciaste antes de continuar? Es probable que btrfs todavía piense que la unidad que desactivaste está presente. Reiniciar hará que btrfs olvide cualquier error y le permitirá continuar.
Gracias por tu publicación. Tuve la idea de que podía probar la incursión, sacar la unidad de mi bahía de intercambio en caliente, usar otra unidad y luego volver a colocar la unidad de incursión. En retrospectiva, fue una mala idea y ahora necesito mi bahía de intercambio en caliente.
Esto es lo que encontré. Como root:
# sudo btrfs fi show
Label: 'disk' uuid: 12817aeb-d303-4815-8bba-a3440e36c62c
Total devices 2 FS bytes used 803.10GiB
devid 1 size 931.51GiB used 805.03GiB path /dev/sda1
devid 2 size 931.51GiB used 805.03GiB path /dev/sdb1
Tenga en cuenta el devid enumerado para cada unidad. Man for brtrfs balance me llevó a la opción devid, tomó un par de intentos para descubrir cómo funcionaban los filtros (inicialmente intenté con devid=/dev/sdb1). Así que tu primer intento se verá así.
# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Lo que me dio un error.
ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail
Aquí está el error de dmesg:
BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this
Así que esta es la final que funcionó:
# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Esperemos que esto ayude a alguien más.