Como adicionar um novo disco (estamos falado de HD e não de qualquer outro tipo de mídia) num Linux?
O escopo deste post é mostrar como configurar um novo disco num Linux, pulando a parte “hardware” da coisa, ou seja, não vamos falar de cabeamento, parafusos e eventuais jumpers.
Uma vez que o disco foi instalado fisicamente na máquina, devemos identificá-lo para prepará-lo e então poder utilizá-lo.
Primeiramente, com o comando “df”, vamos verificar qual é o nosso disco atual:
[root@localhost ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 19306788 2809356 15516696 16% / tmpfs 515428 88 515340 1% /dev/shm /dev/sda1 297485 31238 250887 12% /boot
Com a saída do comando, verificamos que o disco atualmente utilizado é o /dev/sda.
Agora, para identificar o disco novo, podemos executar o comando “dmesg” e procurar por “disk”:
[root@localhost ~]# dmesg|grep disk sd 1:0:0:0: [sdb] Attached SCSI disk sd 0:0:0:0: [sda] Attached SCSI disk
Se nosso disco em uso é o “sda” e agora temos um “sdb”, acabamos de identificar nosso disco recém adicionado.
Com o disco identificado, agora vamos prepará-lo para utilizar no Linux. Preparar consiste basicamente em particionar e formatar o disco.
Para particionar, usaremos o comando “fdisk”:
[root@localhost ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').
Ok, vamos sair do modo de compatibilidade DOS e utilizar setores como medida de unidades:
[root@localhost ~]# fdisk -cu /dev/sdb Command (m for help):
No fdisk, digitamos “p” para mostrar informações sobre o disco como as partições atuais (que no nosso caso, não existem):
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x62e8c07a
Device Boot Start End Blocks Id System
Command (m for help):
Se não temos partições, vamos criar uma:
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First sector (2048-20971519, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): Using default value 20971519
Command (m for help):
E então listar essa nova partição criada:
Command (m for help): p Disk /dev/sdb: 10.7 GB, 10737418240 bytes 107 heads, 17 sectors/track, 11529 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x62e8c07a Device Boot Start End Blocks Id System /dev/sdb1 2048 20971519 10484736 83 Linux Command (m for help):
Por padrão, o tipo de partição criada é “Linux”. Este tipo é utilizado para sistemas de arquivo do tipo Ext2/Ext3/Ext4, por exemplo.
Se estiver apenas adicionando um disco e não quiser utilizá-lo com LVM, pode ignorar os próximos passos, salvar as alterações na tabela de partições (digitando “w” no fdisk) e ir direto para o comando “mkfs.ext4”, mais ao final do texto. Caso queira utilizar LVM, continue lendo.
Para utilizar a partição com LVM, deve-se mudar o tipo de partição. Para isso, ainda no fdisk, digite “t” e mude o tipo para “8e” (Linux LVM):
Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help):
Vamos listar a tabela de partições para verificar as modificações:
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x62e8c07a
Device Boot Start End Blocks Id System /dev/sdb1 2048 20971519 10484736 8e Linux LVM
Command (m for help):
Se estiverem OK, basta salvar as mudanças e sair do fdisk (comando “w”):
Command (m for help): w The partition table has been altered!
Calling ioctl() to re-read partition table. Syncing disks.
De volta ao bash, podemos verificar se as mudanças realmente foram salvas com:
[root@localhost ~]# fdisk -cul /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes 107 heads, 17 sectors/track, 11529 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x62e8c07a
Device Boot Start End Blocks Id System /dev/sdb1 2048 20971519 10484736 8e Linux LVM
Até aqui temos partição criada e tipo modificado para Linux LVM. Devemos então criar um volume físico para o LVM. Isso pode ser feito com o comando “pvcreate”:
[root@localhost ~]# pvcreate /dev/sdb1 Writing physical volume data to disk "/dev/sdb1" Physical volume "/dev/sdb1" successfully created
Então vamos visualizar algumas informações sobre este novo volume físico criado:
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 10.00g 10.00g
E visualizar os atributos deste volume:
[root@localhost ~]# # pvdisplay "/dev/sdb1" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID XqqgNn-WYhy-NFA8-ntae-hVVw-4wrl-uHy2fK
Em um volume físico, precisamos criar Volume Groups, que são as estruturas lógicas onde finalmente vamos armazenar os dados.
Para listar informações sobre os volume groups, usamos o comando “lvs”:
[root@localhost ~]# lvs No volume groups found
No nosso caso, ainda não temos nenhum criado. Vamos criar um volume group chamado “vg_teste” neste disco que acabamos de particionar e adicionar um volume físico, para isso, usaremos o comando “vgcreate”:
[root@localhost ~]# vgcreate vg_teste /dev/sdb1 Volume group "vg_teste" successfully created
Para listar informações sobre os Volume Groups, podemos usar o comando “vgs”:
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree vg_teste 1 0 0 wz--n- 10.00g 10.00g
Se executarmos o comando “pvs” novamente iremos observar que a coluna “VG” agora está preenchida com o nosso “vg_teste” recém criado:
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg_teste lvm2 a-- 10.00g 10.00g
Tendo um volume group criado, podemos criar um ou mais volumes lógicos. A grande vantagem de trabalharmos com volumes é poder facilmente adicionar e/ou remover espaço de um volume lógico. Se tivermos espaço livre disponível no volume group, podemos adicionar espaço a um volume lógico sem sequer ter que parar o sistema.
Para criar um volume lógico, usamos o comando “lvcreate”:
[root@localhost ~]# lvcreate -L 10G -n lv_teste vg_teste Volume group "vg_teste" has insufficient free space (2559 extents): 2560 required.
Um ponto a se observar é que quando criamos o volume group alocamos 10 Gbytes para o mesmo mas agora não pudemos fazer o mesmo para o volume lógico, por que?
Todos os volumes são divididos em partes menores, chamadas “extents”. Uma extent é a menor parte alocável de um volume e, sempre que criamos um volume, uma extent é reservada e não podemos utilizá-la. Então nossa possibilidade de uso de um volume pode ser definida como “tamanho total do volume menos uma extent”.
Vamos ver com “vgdisplay” quantas extents temos livres no nosso volume group. Basta procurar a linha “Free PE / Size” e observarmos que temos 2559 ao invés das 2560 necessárias para 10 Gbytes:
[root@localhost ~]# vgdisplay --- Volume group --- VG Name vg_teste System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 10.00 GiB PE Size 4.00 MiB Total PE 2559 Alloc PE / Size 0 / 0 Free PE / Size 2559 / 10.00 GiB VG UUID Mv0C69-2t56-tPSI-rNX9-cUcj-r28q-89tgSp
Então vamos criar um volume lógico novamente mas, ao invés de pedirmos 10 GB de tamanho (parâmetro “-L 10G”), vamos pedir 2559 extents (parâmetro “-l 2559”):
[root@localhost ~]# lvcreate -l 2559 -n lv_teste vg_teste Logical volume "lv_teste" created
Então executamos vgdisplay novamente para verificar que a linha “Alloc PE / Size” passou a mostrar “2559 / 10.00 GiB” ao invés de “0 / 0” que estava anteriormente:
[root@localhost ~]# vgdisplay --- Volume group --- VG Name vg_teste System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 10.00 GiB PE Size 4.00 MiB Total PE 2559 Alloc PE / Size 2559 / 10.00 GiB Free PE / Size 0 / 0 VG UUID Mv0C69-2t56-tPSI-rNX9-cUcj-r28q-89tgSp
O comando pvdisplay também mostrará que temos todo o volume alocado:
[root@localhost ~]# pvdisplay --- Physical volume --- PV Name /dev/sdb1 VG Name vg_teste PV Size 10.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 2559 Free PE 0 Allocated PE 2559 PV UUID TvGETI-FbsG-0UWt-4v0N-TwT5-bfnj-IZZsQ0
E o comando “lvs” listará todos os volumes lógicos criados:
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert lv_teste vg_teste -wi-a--- 10.00g
Com todos os passos executados, basta formatar o volume lógico com o comando “mkfs.ext4”. Neste ponto, se escolheu não utilizar volumes, substitua o caminho para sua partição que neste caso seria /dev/sdb1:
[root@localhost ~]# mkfs.ext4 /dev/mapper/vg_teste-lv_teste mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2620416 blocks 131020 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Poderíamos parar por aqui mas não quero que meu disco seja testado a cada 27 montagens ou 180 dias, que são os valores padrão. Então, com “tune2fs”, vamos mudar para ele nunca mais checar automaticamente:
[root@localhost ~]# tune2fs -c0 -i 0 /dev/mapper/vg_teste-lv_teste tune2fs 1.41.12 (17-May-2010) Setting maximal mount count to -1 Setting interval between checks to 0 seconds
E para montar o volume automaticamente em todo boot do sistema, vamos colocá-lo no arquivo /etc/fstab. Para isso, vamos identificar o “id” do volume, com o comando “blkid”:
[root@localhost ~]# blkid /dev/mapper/vg_teste-lv_teste /dev/mapper/vg_teste-lv_teste: UUID="fe556bcb-879a-4537-92cd-2d40519089df" TYPE="ext4"
Criar um diretório onde iremos montar este volume:
[root@localhost ~]# mkdir /teste
E adicionar uma linha ao final do /etc/fstab com o id do volume, diretório e demais parâmetros necessários:
[root@localhost ~]# echo "UUID=fe556bcb-879a-4537-92cd-2d40519089df /teste ext4 defaults 0 0" >> /etc/fstab
Montamos todos os dispositivos contidos no /etc/fstab:
[root@localhost ~]# mount -a
E por fim verificamos se está tudo OK.
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 19306788 2809160 15516892 16% /
tmpfs 515428 88 515340 1% /dev/shm
/dev/sda1 297485 31238 250887 12% /boot
/dev/mapper/vg_teste-lv_teste
10317112 154100 9638932 2% /teste
Pronto, nosso volume lógico “lv_teste”, contido no volume group “vg_teste”, identificado como “/dev/mapper/vg_teste-lv_teste” foi montado no diretório “/teste”.
No dia a dia, não precisamos executar alguns dos comandos citados neste post. Estes foram citados para facilitar a visualização do processo. Um fluxo resumido para obter o mesmo resultado seria executar os comandos “fdisk”, “pvcreate”, “vgcreate”, “lvcreate”, “mkfs.ext4”, “mkdir” e “mount” com os respectivos parâmetros.
Para um computador pessoal, onde não há muita “movimentação” de discos, não é obrigatório utilizar volumes de disco.
A clara vantagem de se utilizar volumes de disco será vista num próximo post onde irei mostrar como adicionar um segundo disco num volume já existente (o que criamos aqui) e somar suas capacidades fazendo o sistema operacional “enxergar” como se fosse um único disco maior.
Obrigado, a primeira vez que seguindo um passo-a-passo consigo executar todos comandos sem problema. Esta muito bem explicado parabéns.
Bah loco! show de bola! muito bem explicado!
ótimo passo a passo, parabéns! ajudou muito
Muito bom!!
Funciona perfeitamente
Obrigado por compartilhar me ajudou muito!
quando possível poste mais dicas sobre linux…
grande abraço!
Cara show de bola, ta melhor q o material que arrumei para a LPI.
Parabens
Gustavo, que tutorial fantástico. Parabéns, muito bem explicado e fico feliz em dizer que consegui adicionar um HD de primeira utilizando LVM. antes eu só utilizava LVM durante a instalação do servidor, nunca havia feito manualmente. Obrigado!
Boa tarde Gustavo, tudo bem? Parabéns pelo post.
Estou com uma dificuldade! Tenho um servidor ftp, o proftpd e adicionei o segundo HD, porém eu não consigo visualizar para poder transferir arquivos para o mesmo. Se eu der o comando “DF -L” ele aparece só não consigo visualizar-ló.
Abraços
Olá, como está a configuração do seu proftpd? Usa VirtualHost? Se sim, como está a configuração dele?
Muito BOM!!! consegui fazer de primeira.
Show de bola! Muito obrigado.
Muito bom .
Me ajudou muito.
Parabéns! Segunda vez que uso seu tutorial. Show de bola!
MUUUUUITO BOM.
Obrigado. Foi de grande ajuda.
Muito bom, deu tudo certo. Parabéns pela documentação, ficou muito fácil de entender. Obrigado.