Se você estiver disposto a fazer mudanças disruptivas, eu recomendaria o uso do Gerenciador de Volume Lógico (LVM2) do Linux. p>
Ele permite combinar vários discos de tamanhos diferentes juntos e você pode adicionar discos para aumentar o tamanho aparente do "disco" lógico sem reinicializar. Se você estiver usando o sistema de arquivos padrão ( ext4
nos dias de hoje), ele também pode executar um redimensionamento online do sistema de arquivos, portanto, não é necessário reinicializar novamente.
Deixe-me demonstrar isso usando discos RAM ( /dev/ram0
a /dev/ram15
). Primeiro, vamos ver as partições no meu sistema:
# lvmdiskscan
/dev/ram0 [ 64.00 MiB]
/dev/ram1 [ 64.00 MiB]
/dev/sda1 [ 87.16 GiB]
/dev/ram2 [ 64.00 MiB]
/dev/ram3 [ 64.00 MiB]
/dev/ram4 [ 64.00 MiB]
/dev/ram5 [ 64.00 MiB]
/dev/sda5 [ 6.00 GiB]
/dev/ram6 [ 64.00 MiB]
/dev/ram7 [ 64.00 MiB]
/dev/ram8 [ 64.00 MiB]
/dev/ram9 [ 64.00 MiB]
/dev/ram10 [ 64.00 MiB]
/dev/ram11 [ 64.00 MiB]
/dev/ram12 [ 64.00 MiB]
/dev/ram13 [ 64.00 MiB]
/dev/ram14 [ 64.00 MiB]
/dev/ram15 [ 64.00 MiB]
/dev/sdb1 [ 294.09 GiB]
/dev/sdb5 [ 4.00 GiB]
0 disks
20 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
Então vamos criar uma configuração de 2 discos, e depois vou expandi-la para 3 discos. Primeiro, formate meus "discos" para uso pelo LVM. Nesta etapa, pv
significa Volume físico, ou seja, um dispositivo real que armazena dados:
# pvcreate /dev/ram0
Physical volume "/dev/ram0" successfully created
# pvcreate /dev/ram1
Physical volume "/dev/ram1" successfully created
# pvs
PV VG Fmt Attr PSize PFree
/dev/ram0 vg_main lvm2 a- 60.00m 60.00m
/dev/ram1 vg_main lvm2 a- 60.00m 60.00m
crie um grupo de volumes, que basicamente os une em um único "disco" não particionado:
# vgcreate vg_main /dev/ram0 /dev/ram1
Volume group "vg_main" successfully created
# vgs
VG #PV #LV #SN Attr VSize VFree
vg_main 2 0 0 wz--n- 120.00m 120.00m
e agora para "particionar" esse disco associado criando um Volume Lógico. Eu vou usar todo o espaço disponível:
# lvcreate --extents 100%VG --name lv_main vg_main
Logical volume "lv_main" created
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv_main vg_main -wi-a- 120.00m
Então, agora eu tenho uma partição virtual de 120 MB na qual posso armazenar minhas coisas. O nó do dispositivo pode ser encontrado usando o comando lvdisplay
mais detalhado:
# lvdisplay
--- Logical volume ---
LV Name /dev/vg_main/lv_main
VG Name vg_main
LV UUID tsKWeD-tjpB-yh32-Ong3-Jp7C-erT8-LRVlTg
LV Write Access read/write
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
Portanto, devo colocar meu sistema de arquivos em /dev/vg_main/lv_main
. Isso pode significar copiar um existente usando uma ferramenta como dd
ou, nesta demonstração, criar um novo:
# mkfs.ext4 -L fs_main /dev/vg_main/lv_main
mke2fs 1.42 (29-Nov-2011)
Discarding device blocks: done
Filesystem label=fs_main
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
30720 inodes, 122880 blocks
6144 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
15 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Agora eu posso montar este sistema de arquivos (vazio) e preenchê-lo com alguns dados de teste:
# mkdir /tmp/demo
# mount /dev/vg_main/lv_main /tmp/demo
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 117M 5.6M 105M 6% /tmp/demo
# ls /tmp/demo
lost+found
# dd if=/dev/zero of=/tmp/demo/bigfile
dd: writing to '/tmp/demo/bigfile': No space left on device
226701+0 records in
226700+0 records out
116070400 bytes (116 MB) copied, 0.982532 s, 118 MB/s
# ls -lh /tmp/demo
total 111M
-rw-r--r-- 1 root root 111M Mar 10 18:50 bigfile
drwx------ 2 root root 12K Mar 10 18:47 lost+found
Meu sistema de arquivos agora está completamente cheio! Isso pode ser verificado no nível do sistema de arquivos usando df
e o nível de disco associado usando vgdisplay
e verificando o PE livre (Extensões Físicas) / Tamanho (bytes):
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 117M 117M 0 100% /tmp/demo
# vgdisplay
--- Volume group ---
VG Name vg_main
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 120.00 MiB
PE Size 4.00 MiB
Total PE 30
Alloc PE / Size 30 / 120.00 MiB
Free PE / Size 0 / 0
VG UUID zWxBml-xdZU-8wgh-IK1w-ij1N-Z3eo-sRtri3
Então, vamos aumentar agora! Vamos fingir que /dev/ram2
é um novo disco SATA adorável que eu acabei de ligar no meu sistema em execução, e eu quero usá-lo para aumentar o tamanho do meu sistema de arquivos completo.
Como antes, use pvcreate
para preparar o "disco" para uso com o LVM:
# pvcreate /dev/ram2
Physical volume "/dev/ram2" successfully created
Agora estendemos nosso disco unido (Grupo de volumes) e verificamos que vg_main
tem algum espaço livre:
# vgextend vg_main /dev/ram2
Volume group "vg_main" successfully extended
# vgdisplay
--- Volume group ---
VG Name vg_main
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 180.00 MiB
PE Size 4.00 MiB
Total PE 45
Alloc PE / Size 30 / 120.00 MiB
Free PE / Size 15 / 60.00 MiB
VG UUID zWxBml-xdZU-8wgh-IK1w-ij1N-Z3eo-sRtri3
Isso ainda não deixa espaço livre em nosso sistema de arquivos, já que a "partição" (Volume Lógico) é do mesmo tamanho que antes de adicionarmos nosso novo disco:
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 117M 117M 0 100% /tmp/demo
# lvdisplay
--- Logical volume ---
LV Name /dev/vg_main/lv_main
VG Name vg_main
LV UUID tsKWeD-tjpB-yh32-Ong3-Jp7C-erT8-LRVlTg
LV Write Access read/write
LV Status available
# open 1
LV Size 120.00 MiB
Current LE 30
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
Aí vem a mágica - nós redimensionamos o Volume Lógico e dizemos ao LVM2 para redimensionar o sistema de arquivos dentro de:
# lvresize --extents 100%VG --resizefs /dev/vg_main/lv_main
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/mapper/vg_main-lv_main is mounted.
WARNING!!! The filesystem is mounted. If you continue you ***WILL***
cause ***SEVERE*** filesystem damage.
Do you really want to continue<n>?
Esse aviso assustador não está realmente relacionado ao redimensionamento do sistema de arquivos, mas ao pré-voo fsck
que o LVM2 deseja fazer no sistema de arquivos montado. Obviamente, recusamos este alerta assustador e respondemos "não":
Do you really want to continue<n>? no
check aborted.
Extending logical volume lv_main to 180.00 MiB
Logical volume lv_main successfully resized
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/dm-0 is mounted on /tmp/demo; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/dm-0 to 184320 (1k) blocks.
The filesystem on /dev/dm-0 is now 184320 blocks long.
O LVM2 passa a fazer o redimensionamento online do sistema de arquivos que solicitamos. Voila!
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 175M 117M 49M 71% /tmp/demo
Agora posso criar mais arquivos novamente:
# dd if=/dev/zero of=/tmp/demo/another_file
dd: writing to '/tmp/demo/another_file': No space left on device
118751+0 records in
118750+0 records out
60800000 bytes (61 MB) copied, 0.556078 s, 109 MB/s
# ls -lh /tmp/demo
total 169M
-rw-r--r-- 1 root root 58M Mar 10 19:04 another_file
-rw-r--r-- 1 root root 111M Mar 10 18:52 bigfile
drwx------ 2 root root 12K Mar 10 18:47 lost+found