Tradução do artigo Raw Devices on SuSE Linux escrito originalmente por Christian Winte em 08/11/2006
Três etapas para criar um volume logico
Como podemos fazer dispositivos raw em SuSE Linux? Existe uma maneira facil de construir chunks baseado em raw device dentro de um Logical Volume Manager?
A resposta é: sim. Neste artigo, vamos aprender o básicode LVM2 (criado por Heinz Mauelshagen), e como usar isso para criar raw devices para uma instancia Informix. Não vamos passar todos os comandos que trata a LVM apenas aqueles comandos necessarios para lidar com raw devices.
Primeiro vamos olhar a versão do LVM
isis:/dev # lvm version
LVM version: 2.02.39 (2008-06-27)
Library version: 1.02.27 (2008-06-25)
Driver version: 4.14.0
isis:/dev #
assim nós sabemos que temos o LVM2. É importante saber qual a versão você usa, porque volumes logicos (LV) são diferentemente representados na LVM1 e LVM2.
LVM1 armazena informações sobre LVs em /proc/lvm/VGs que mudou para /dev/mapper em LVM2
LVM2 é parte do sistema operacional SuSE desde a versão 9.3. Se não for instalado automaticamente, você pode instalar o LVM2 pelo yast2.
Para criar um volume logico temos que
- inicializar volumes fisicos (disco ou partições de disco)
- definir grupos de volumes (VGs) como conjuntos de volumos fisicos
- definir os volumes logicos (LVs) como subconjunto de VGs
As duas primeiras etapas será feito com o yast2, ferramenta de administração baseada em GUI do SuSE, mas você pode fazê-lo também com comandos como pvcreate e vgcreate.
Por exemplo, se você quiser fazer todo o disco /dev/hdb um volume fisico, deve-se digitar o comando abaixo
pvcreate /dev/hdb
Isto cria um descritor de grupo de volume no inicio do disco.
Talvez teremos um erro se houver uma tabela de partição no disco, então nós temos que excluir esta tabela explicitamente com o comando dd:
dd if=/dev/zero of=/dev/hdb bs=1k count=1
blockdev –rereadpt /dev/hdb
Em vez de todo o disco, podemos usar uma partição /dev/hdb1:
pvcreate /dev/hdb1
Em seguida, vamos criar um Grupo de Volume:
vgcreate vg01 /dev/hdb1
Em seguida, vamos ver o resultado:
isis:/ # pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg02
PV Size 931.51 GB / not usable 3.19 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 238466
Free PE 207746
Allocated PE 30720
PV UUID 8MZ3rV-IYi5-FEUq-G2eb-Vx3r-yH2g-tVWVwD
isis:/ # vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 298.09 GB
PE Size 8.00 MB
Total PE 38155
Alloc PE / Size 25600 / 200.00 GB
Free PE / Size 12555 / 98.09 GB
VG UUID LGsLJH-bS0u-Cit5-cnZR-2k1F-gZAR-5jCu1G
Em meu sistema SuSE Linux o nome do grupo de volume é “vg01”, seu tamanho é de 298,09 GB e o tamanho da PE=physical extent é 8MB. Mais tarde veremos que volumes logicos consistem de Extensões Fisicas (PE), que são mapeadas em Extensões Fisicas do VG a que pertece a LV.
Agora estamos pronto para criar o raw device para o nosso root space. Queremos cerca de 50MB para o root space.
Crie o Volume Logico (LV)
lvcreate –L 50M –n lvol01 vg01
Rouding up size to full physical extent 56.00 MiB
Logical volume “lvol01” created
Nosso volume “lvol01” foi arredondado para o tamanho da extensão fisica completa de 56,00 MB, porque o tamanho deve ser um multiplo de 8MB, que é o tamanho da PE.
De Volume Logico para dispositivo raw
Qual o resultado do comando lvcreate? lvdisplay nos da uma descrição detalhada da LV:
--- Logical volume ---
LV Name /dev/vg01/lvol01
VG Name vg01
LV UUID E9qml5-MbtZ-Kpbp-NKuJ-VuKy-CMHo-ghAyVp
LV Write Access ead/write
LV Status available
# open 2
LV Size 56.00 MiB
Current LE 7
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 1024
Block device 253:15
Voce vê, que o “nome” da LV é /dev/vg01/lvol01. Este não é um raw device, mas apenas um link simbolico para um dispositivo de bloco:
isis:~ # ls -ail /dev/vg01/lvol01
5761 lrwxrwxrwx 1 root root 23 Apr 2 11:11 /dev/vg01/lvol01 -> /dev/mapper/vg01-lvol01
isis:~ # ls -ail /dev/mapper/vg01-lvol01
5586 brw-r----- 1 root disk 253, 15 Apr 2 11:12 /dev/mapper/vg01-lvol01
isis:~ #
Nós não podemos mudar o dispositivo de bloco de forma alguma para um raw device, mas podemos ligar um raw device a este dispositivo de bloco. Isto sera feito por um utilitario chamado raw (veja o manual).
Raw devices são dispositivos de caracteres com numero maior que 162. O primeiro numero que seria o menor (isto é, 0) é reservado para a interface de controle e geralmente é encontrado em /dev/rawctl. Esse dispositivo pode ser gerado com o comando:
isis:~ # modprobe raw
Raw devices são localizados em /dev/raw e pode ser criado com o mknod:
isis:/dev/raw # num=0
isis:/dev/raw # while [ $num -le 128 ]
> do
> mknod raw$num c 162 $num
> num`expr $num + 1`
> done
Em seguida, vamos ligar o dispositivo de bloco /dev/vg01/lvol01 com o raw device /dev/raw/raw50:
isis:/dev/raw # raw /dev/raw/raw50 /dev/vg01/lvol01
/dev/raw/raw50: bound to major 253, minor 0
raw –qa
/dev/raw/raw50: bound to major 253, minor 0
O comando raw –qa mostra todos os dispositivos raw devices que estao ligados a outros dispositivos. O único método para identificar o volume logico que esta ligado ao raw device é comparar os numeros major e minor. É importante guardar essa informação em algum lugar em um arquivo de modo que você possa recriar todos os dispositivos em caso de uma falha. normalmente esse arquivo é o /etc/raw.
# /etc/raw
#
# sample configuration to bind raw devices
# to block devices
#
# The format of this file is:
# raw<N>:<blockdev>
#
# example:
# ---------
# raw1:hdb1
#
# this means: bind /dev/raw/raw1 to /dev/hdb1
#
# ...
raw50:vg01/lvol01
Depois de um reboot voce pode recriar os seus raw devices, porque não são automaticamente montadas – pode ser que eles nao existem de modo que tenha que gerar o controle de dispositivos e os raw devices novamente. Para fazer isso você pode extender o script /etc/init.d/raw. /usr/sbin/rcraw é um link simbolico apra /etc/init.d/raw. Com o rcraw voce pode inicializar o raw device e ver seu status (raw –qa).
rcraw start
bind /dev/raw/raw50 to /dev/vg01/lvol01…
rcraw status
/dev/raw/raw50: bound to major 253, minor 0
Você não pode parar raw devices. Isto somente ocorre apenas por um shutdown do sistema.
Aqui esta um exemplo do /etc/init.d/raw no meu SuSE
#! /bin/sh
# Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany.
#
# Author: Dirk Lerner <feedback@suse.de>
#
# /etc/init.d/raw
#
# and symbolic its link
#
# /usr/sbin/rcraw
#
### BEGIN INIT INFO
# Provides: raw
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Short-Description: raw devices
# Description: raw-devices
### END INIT INFO
. /etc/rc.status
CONFIG=/etc/raw
RAW_BIN=/sbin/raw
RAW_MODULE=raw
test -x $RAW_BIN || exit 5
if [ ! -f $CONFIG ];then
echo "file: $CONFIG not found"
exit 6
fi
rc_reset
case "$1" in
start)
/sbin/modprobe $RAW_MODULE && sleep 2
line=`grep -v ^# < $CONFIG`
for i in $line;do
rawdev=`echo $i | cut -f1 -d:`
rawbind=`echo $i | cut -f2- -d:`
echo -n "bind /dev/raw/$rawdev to /dev/$rawbind..."
$RAW_BIN /dev/raw/$rawdev /dev/$rawbind > /dev/null 2>&1
rc_status -v
done
;;
stop)
echo -n "to unbind the rawdevice please perform a system shutdown"
rc_failed 3
rc_status -v
;;
status)
$RAW_BIN -qa 2> /dev/null
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;
esac
rc_exit
Adicionar um link symbolico
ln –s /etc/rd.d/raw /etc/rc.d/rc2.d/S21raw
Para iniciar os raw devices automaticamente após a inicialização do sistema. Por favor note que /etc/init.d/raw usa o conteudo do arquivo de configuração /etc/raw para encontrar volumes lógicos a ser vinculado.
Vamos resumir os passos para se criar um raw device:
- criar um volume logico;
- criar um raw device;
- vincular o raw device com o volume logico;
- colocar uma linha apropriada no arquivo /etc/raw.
Nenhum comentário:
Postar um comentário