Você tem dois discos de 3 TB armazenando dados de 6 TB. Você deseja instalar um novo disco de 3 TB.
Isso permitirá que você converta os três discos de 3 TB em um array RAID5, armazenando dados de 6 TB. No entanto, o processo é bastante complicado e as oportunidades de perder dados em algum lugar ao longo da rota são bastante grandes.
Etapas para atingir o requisito
Vamos declarar os discos como sda
(contém dados), sdb
(contém dados), sdc
(novo).
- Se for possível, faça um backup de todos os seus dados, mesmo que você precise pedir emprestado um disco de um amigo por alguns dias
- Crie uma matriz RAID1 no novo disco
sdc
. Deve ter dois membros dos quais um está faltando - Crie um sistema de arquivos nesta matriz RAID1
- Copie os dados de
sdb
para a nova matriz RAID1 - Verifique se copiou corretamente os dados
- Adicione
sdb
à matriz RAID1 - Aguarde até que a sincronização seja concluída
- Reinicializar
- Cresça a matriz RAID1 para RAID5. Deve ter três membros dos quais um está faltando. Para fazer isso, você precisará de 128K de espaço temporário em um disco adicional. Você pode querer usar um thumbstick USB para isso. Não use um disco RAM.
- Copie os dados de
sda
para o novo array RAID5 - Verifique se copiou corretamente os dados
- Adicione
sda
à matriz RAID5 - Reinicializar
Exemplo trabalhado
Aqui está um exemplo trabalhado usando três arquivos como imagens de disco.
# Prepare the demonstration
#
dd if=/dev/zero bs=1M count=100 of=sda.img
dd if=/dev/zero bs=1M count=100 of=sdb.img
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sda.img # One primary partition
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sdb.img # One primary partition
losetup --show --find --partscan sda.img
losetup --show --find --partscan sdb.img
mkfs -t ext4 -L sda /dev/loop0p1
mkfs -t ext4 -L sdb /dev/loop1p1
mkdir -p /mnt/sda1 /mnt/sdb1
mount /dev/loop0p1 /mnt/sda1
mount /dev/loop1p1 /mnt/sdb1
cp -a /usr/local/man/. /mnt/sda1/u.l.man/
mkdir /mnt/sdb1/u.l.etc
cp -a /usr/local/bin/. /mnt/sdb1/u.l.bin/
df -h | grep mnt
umount /mnt/sda1
umount /mnt/sdb1
# Create the third disk
#
dd if=/dev/zero bs=1M count=100 of=sdc.img
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sdc.img # One primary partition
losetup --show --find --partscan sdc.img
# Create the RAID1 array and its filesystem
#
mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=default /dev/loop2p1 missing
mkfs -t ext4 -L md1 /dev/md1
mkdir -p /mnt/md1
# Copy the data from sdb to md1
#
mount /dev/loop1p1 /mnt/sdb1
mount /dev/md1 /mnt/md1
cp -a /mnt/sdb1/. /mnt/md1/
umount /mnt/sdb1
umount /mnt/md1
# Complete the RAID1 array
#
mdadm --manage /dev/md1 --add /dev/loop1p1
# Grow the RAID1 array to RAID5
#
mdadm --grow /dev/md1 --level=5 --raid-devices=3 --backup-file=/root/workarea.dat --force
e2fsck -f /dev/md1
resize2fs /dev/md1
# Copy the data from sda to md1
#
mount /dev/loop0p1 /mnt/sda1
mount /dev/md1 /mnt/md1
cp -a /mnt/sda1/. /mnt/md1/
umount /mnt/sda1
umount /mnt/md1
# Add the remaning disk to the RAID5 array
#
mdadm --manage /dev/md1 --add /dev/loop0p1
# All done
#
mdadm --stop /dev/md1
losetup -d /dev/loop0
losetup -d /dev/loop1
losetup -d /dev/loop2
rm sda.img sdb.img sdc.img
Você realmente deve garantir que entende o exemplo trabalhado ANTES de tocar nos dados ao vivo em seus discos. Escusado será dizer que é da sua responsabilidade e eu realmente recomendo um backup antes de alterar o seu sistema ao vivo.