¿Puedo crear un software RAID 1 con un dispositivo?

20

Tengo un solo disco del que quiero crear un espejo; Llamemos a este disco sda. Acabo de comprar otro disco de tamaño idéntico, al que podemos llamar sdb. sday sdbtener una partición llamada sda1y sdb1respectivamente.

Al crear una incursión, no quiero limpiarme sday comenzar de nuevo, solo quiero que empiece a duplicarse sdb. Mi línea de pensamiento era hacer:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... para crear la matriz sin sdbdisco, luego ejecute algo como (estoy pensando en el siguiente comando en voz alta, porque no estoy seguro de cómo lograr este paso)

mdadm /dev/md0 --add /dev/sdb1

sdb1Se supone que la nota tiene un formato similar asda1

es posible?

quién soy
fuente
Sí tu puedes. No es tan sencillo como --add, y debes tener cuidado, pero no es muy complicado. Consulte ¿Cómo configurar la duplicación de disco en Ubuntu? (No puedo proponer esa pregunta como un duplicado debido a las nuevas reglas.)
Gilles 'SO- deja de ser malvado'

Respuestas:

28

La respuesta simple a la pregunta en el título es "Sí". Pero lo que realmente quiere hacer es el siguiente paso, que es reflejar los datos existentes.

Es posible convertir el disco existente, pero es arriesgado, como se mencionó, debido a la ubicación de los metadatos. Mucho mejor crear un espejo vacío (roto) con el nuevo disco y copiar los datos existentes en él. Luego, si no funciona, simplemente reinicia al original sin espejo.

Primero, inicialice /dev/sdb1como nuevo /dev/md0con una unidad faltante e inicialice el sistema de archivos (supongo que ext3, pero la elección es suya)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Ahora, /dev/sda1es muy probable que sea su sistema de archivos raíz ( /), por lo que, por seguridad, debe hacer el siguiente paso desde un CD en vivo, un disco de rescate u otro sistema de arranque que pueda acceder a ambos /dev/sda1y, /dev/md0aunque lo he logrado, caí al modo de usuario único.

Copiar todo el contenido del sistema de archivos en /dev/sda1a /dev/md0. Por ejemplo:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Edite /etc/fstabo asegúrese de que, en el próximo arranque, /dev/md0esté montado en lugar de /dev/sda1. Es probable que su sistema esté configurado para arrancar /dev/sda1y los parámetros de arranque probablemente especifiquen esto como el dispositivo raíz, por lo que al reiniciar, debe cambiar esto manualmente para que la raíz sea /dev/md0(suponiendo que /dev/sda1fuera root). Después de reiniciar, verifique que /dev/md0ahora esté montado ( df) y que se esté ejecutando como un espejo degradado ( cat /proc/mdstat). Añadir /dev/sda1a la matriz:

mdadm /dev/md0 --add /dev/sda1

Como la reconstrucción se sobrescribirá /dev/sda1, la versión de metadatos que use no es relevante. Como siempre al realizar cambios importantes, realice una copia de seguridad completa (si es posible) o al menos asegúrese de que todo lo que no se pueda recrear sea seguro.

Deberá regenerar su configuración de arranque para usarla /dev/md0como root (si /dev/sda1fue root) y probablemente necesite regenerarla mdadm.confpara asegurarse de /dev/md0que siempre se inicie.

StarNamer
fuente
Perfecto exactamente lo que necesito: D
whoami
2
No use cppara copiar sistemas de archivos, se perderá algunas cosas como enlaces duros, atributos extendidos ... Use taro rsynccon las opciones adecuadas. Al iniciar un Live CD, tenga en cuenta que la asignación de usuario uid es diferente (consulte las opciones --numeric-owner de tar / rsync). Consulte también clone2fs para clonar sistemas de archivos extx.
Stéphane Chazelas
1
Las opciones para cpmanejar la preservación de enlaces (-d), modo, propiedad y marcas de tiempo (-p), hacerlo recursivamente (-R) y permanecer en un sistema de archivos (-x), pero creo que puede tener razón sobre enlaces duros y extendidos atributos.
StarNamer
rsync -aH --delete /mnt/olddisk/ /mnt/newarray/Es una buena opción. Agregue -vih --progresssi realmente quiere ver lo que está haciendo.
Rudolfbyker
4

Claro, puede crearlo especificando que el segundo disco es actualmente missing:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1
eppesuig
fuente
Un dulce agradecimiento. Probablemente estoy siendo TOC aquí, pero ¿hay alguna razón por la que hayas agregado los que faltan antes de / dev / sda1, es importante el orden?
whoami
Creo que el orden no importa.
eppesuig
3
¡Cuidado con eso! con --metadata = 1.2 (el nuevo valor predeterminado), los metadatos RAID (1MB) se insertarán al inicio (anulando el contenido allí). Y el inicio de la matriz md comenzará 1 MB dentro de / dev / sda1 (/ dev / md0 será 1 MB más corto que / dev / sda1). Con metadata = 0.9 (el valor predeterminado anterior), los metadatos (64kB) se insertarán al final anulando lo que hay allí. Entonces use --metadata = 0.9 y cambie el tamaño del FS primero. Hagas lo que hagas, haz una copia de seguridad de antemano.
Stéphane Chazelas
3

Usted puede hacer eso. Debe tener un poco de cuidado, pero esto no es peligroso¹ si tiene mucho cuidado de no escribir mal nada y no deja ningún problema en la configuración.

Recomiendo no hacer ninguna de las manipulaciones en un sistema en vivo. Es posible en algunos casos, pero requiere un cuidado especial. Arranque desde un liveCD / liveUSB como Parted o SystemRescueCD .

Primero, debe reducir un poco el volumen para dejar espacio para los metadatos mdraid (el superbloque). Hay varios formatos de metadatos , debe usar uno que coloque los metadatos al final del disco. (En algunas configuraciones, es posible que tenga suficiente espacio para colocar el superbloque al principio, pero eso es más complicado y propenso al riesgo, por lo que entramos en eso).

Debe asegurarse de que los últimos 128kB del dispositivo de bloque no se utilicen, para dejar espacio al superbloque. Por lo tanto, deberá reducir el sistema de archivos /dev/sda1. Si se trata de un sistema de archivos ext2 / ext3 / ext4, obtenga el tamaño del sistema de archivos actual con tune2fs /dev/sda1, luego ejecute resize2fs /dev/sda1 NNNdonde NNN es ese tamaño menos 128kB. Puedes hacer esto con Parted en su lugar. Si necesita reducir un sistema de archivos extN, primero deberá desmontarlo; un sistema de archivos btrfs puede reducirse en vivo.

Una vez que se haya asegurado de que los últimos 128kB del dispositivo de bloque estén libres, llame mdadm --createpara crear un volumen RAID-1. Esto no toca ninguna parte del volumen aparte del superbloque. Inicialmente, el volumen tendrá un solo componente: todos los demás se configuran como fallidos. Debe aprobar --level=1(o equivalente -n 1) (este enfoque solo funciona para RAID-1) --metadata=0.9o --metadata=1.0(el formato de superbloque predeterminado 1.2 coloca el superbloque cerca del comienzo del dispositivo, lo que puede sobrescribir los datos). El argumento para --raid-devices( -n) es el número de componentes (incluidos los que faltan) en el volumen RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Ahora puede activar la matriz y agregar otros componentes.

mdadm --add /dev/md0 /dev/sdb1

Una nota sobre los cargadores de arranque: Grub2 entiende Linux RAID-1 y puede arrancar desde él. Los cargadores de arranque como Grub1 que no entienden RAID leen de forma transparente desde los volúmenes espejo, pero su sistema no arrancará si falla la unidad del cargador de arranque. Si el volumen RAID está en una partición, asegúrese de instalar el sector de arranque de Grub en ambas unidades.

¹ Asegúrese de tener copias de seguridad. "No peligroso" significa "probablemente no los necesitará", no "apostar sus datos".

Reubicado y ligeramente adaptado de Cómo configurar la duplicación de disco (RAID-1)

Gilles 'SO- deja de ser malvado'
fuente