Estou fazendo estágio em uma empresa de software e acertei um pouco de parede de tijolos. Aqui está o acordo:
O problema: Temos algumas caixas por aqui que foram particionadas incorretamente para unidades de 2 x 500 GB. As unidades reais são unidades de 2 x 1 TB. Essas são essencialmente máquinas com apenas metade do espaço disponível em disco sendo usado. Tenho a tarefa de escrever um script para reparticionar essas unidades.
Solução Assim Far: Eu tenho um script que desativa todos os processos e reinicializações e, em seguida, outro script que corrige as partições. O problema é que há uma perda de dados.
O que estou procurando: Preciso de uma solução que faça isso, mas salve todos os dados. Meu primeiro porém seria apenas aumentar as partições para o tamanho apropriado, mas não tenho certeza se isso é possível. A outra solução é copiar todos os dados para o Disk2, particionar o Disk1, mover os dados de volta para o Disk1 e, finalmente, particionar o Disk2. O problema é que sou muito novo no Linux e não sei como fazer isso. Eu tenho acesso ao utilitário fdisk e ao utilitário parted.
Eles são todos do tipo ext3.
EDIT: 11/3/11
Ok. Portanto, tenho aproximadamente 1 GB de espaço não utilizado e não alocado nos dois discos. Eu quero fazer o seguinte:
- Crie uma nova partição estendida em SDB de tamanho 1 GB, chamada sdb99 para referência aqui
- Copie sda5 sda6 sda7 para a nova partição SDB sdb99
- Posso simplesmente copiar "/" de cada um deles para alguma pasta nesta nova partição?
- Preciso colocar um sistema de arquivos nesta nova partição para copiar arquivos lá?
- Se eu apenas copiar "/", isso preservará toda a estrutura de diretórios?
- É uma tarefa simples mover arquivos entre discos como este?
- Exclua sda5 sda6 sda7 e recrie-os com o dobro do tamanho
- Eu realmente preciso excluir esses itens? Eu não acho que eu possa crescer 3 partições contíguas, e mesmo se eu pudesse, o sistema de arquivos não cresceria ... certo?
- Copie os dados de sdb99 para as novas partições sda5 sda6 sda7
- Isso deve ser tão simples quanto mover o conteúdo desses diretórios contendo todos os "/" de volta, certo?
- Copie sdb5 sdb6 sdb7 para o novo sda5 sda6 sda7 em pastas separadas.
- Deve haver espaço suficiente por causa do espaço agora duplicado disponível ... Espero
- Excluir e reparticionar SDB
- Mova os arquivos de sdb5 sdb6 sdb7 de volta para SDB
Alguém vê algum problema gritante, tem alguma indicação, aviso, sugestão, etc.?
Obrigado a todos. Novamente, isso precisa para ser roteirizado. Obrigado.
EDIT 2
Aqui está o script atual ...
#!/bin/bash
LOG=./repartition.log
date > $LOG 2>&1
echo "Ok, let's get started." >> $LOG 2>&1
# Resize logical partitons
parted -s /dev/sda resize 4 45GB 2000GB >> $LOG 2>&1
parted -s /dev/sdb resize 4 90GB 2000GB >> $LOG 2>&1
# Create the temporary file systems on disk 2
mke2fs -j /dev/sdb8 >> $LOG 2>&1
# Copy sda6 sda7 sda8 to sdb8
cp -r -L -p /dev/sda6 /dev/sdb8/home/sda6 >> $LOG 2>&1
cp -r -L -p /dev/sda7 /dev/sdb8/home/sda7 >> $LOG 2>&1
cp -r -L -p /dev/sda8 /dev/sdb8/home/sda8 >> $LOG 2>&1
# Remove NBD partitions on disk 1
parted -s /dev/sda rm 8 >> $LOG 2>&1
parted -s /dev/sda rm 7 >> $LOG 2>&1
parted -s /dev/sda rm 6 >> $LOG 2>&1
# Create NBD partitons on disk 1
parted -s /dev/sda mkpart logical 70GB 713GB >> $LOG 2>&1
parted -s /dev/sda mkpart logical 713GB 1356GB >> $LOG 2>&1
parted -s /dev/sda mkpart logical 1356GB 2000GB >> $LOG 2>&1
# Create the file systems on disk 1
mke2fs -j /dev/sda6 >> $LOG 2>&1
mke2fs -j /dev/sda7 >> $LOG 2>&1
mke2fs -j /dev/sda8 >> $LOG 2>&1
# Copy sda6 sda7 sda8 back to sda
cp -r -L -p /dev/sdb8/home/sda6 /dev/sda6 >> $LOG 2>&1
cp -r -L -p /dev/sdb8/home/sda7 /dev/sda7 >> $LOG 2>&1
cp -r -L -p /dev/sdb8/home/sda8 /dev/sda8 >> $LOG 2>&1
# Copy sdb5 sdb6 sdb7 to sda6 sda7 sda8
cp -r -L -p /dev/sdb5 /dev/sda6/home/sdb5 >> $LOG 2>&1
cp -r -L -p /dev/sdb6 /dev/sda7/home/sdb6 >> $LOG 2>&1
cp -r -L -p /dev/sdb7 /dev/sda8/home/sdb7 >> $LOG 2>&1
# Remove NBD partitions on disk 2
parted -s /dev/sdb rm 8 >> $LOG 2>&1
parted -s /dev/sdb rm 7 >> $LOG 2>&1
parted -s /dev/sdb rm 6 >> $LOG 2>&1
parted -s /dev/sdb rm 5 >> $LOG 2>&1
# Create NBD partitons on disk 2
parted -s /dev/sdb mkpart logical 90GB 726GB >> $LOG 2>&1
parted -s /dev/sdb mkpart logical 726GB 1362GB >> $LOG 2>&1
parted -s /dev/sdb mkpart logical 1362GB 2000GB >> $LOG 2>&1
# Create the file systems on disk 2
mke2fs -j /dev/sdb5 >> $LOG 2>&1
mke2fs -j /dev/sdb6 >> $LOG 2>&1
mke2fs -j /dev/sdb7 >> $LOG 2>&1
# Copy sdb5 sdb6 sdb7 back to sdb
cp -r -L -p /dev/sda8/home/sdb7 /dev/sdb7 >> $LOG 2>&1
cp -r -L -p /dev/sda7/home/sdb6 /dev/sdb6 >> $LOG 2>&1
cp -r -L -p /dev/sda6/home/sdb5 /dev/sdb5 >> $LOG 2>&1
rm /etc/init.d/fix_partitions >> $LOG 2>&1
rm /etc/init.d/local/99fix_partitions >> $LOG 2>&1
mv /etc/init.d/local/gca_init.off /etc/init.d/local/99gca_init >> $LOG 2>&1
echo "All set. Please reboot. Have a nice day." >> $LOG 2>&1
date >> $LOG 2>&1
reboot >> $LOG 2>&1