четверг, 10 мая 2012 г.

Уеличение файловой системы ext4 поверх LVM на примере CentOS 6.2

Итак CentOS по умолчанию для системы использует LVM, что правильно для кооперативных продуктов.

Для начала посмотрим сколько у нас израсходовано ресурса файловой системы.
df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       7.4G  7.4G   0G   100% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/sda1             485M   45M  415M  10% /boot
И о ужас мы использовали всё место на диске. Что же делать, но погодите у нас же используется VLM так что не расстраиваемся и принимаемся за работу.



Установим диск и включим систему.
У меня диск определился как устройство /dev/sdb
По скольку мы добавляем диск менее 2TB то можем воспользоваться старым добрым fdisk'ом.

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').

Command (m for help): n   # Создадим новый раздел
Command action
   e   extended
   p   primary partition (1-4)
p                         # Тип раздела primary partition

Partition number (1-4): 1 # Номер раздела 1, займём всё пространство, остальные параметры по умолчанию
First cylinder (1-11748, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-11748, default 11748): 
Using default value 11748

Command (m for help): t   # Скажем системе, что это LVM раздел
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): p   # Посмотрим что у нас получилось

Disk /dev/sdb: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80893f78

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       11748    94365778+  8e  Linux LVM

Command (m for help): w    # Запишем изменения на диск
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
Создадим Physical volume в системе

pvcreate /dev/sdb1 
  Writing physical volume data to disk "/dev/sdb1"
  Physical volume "/dev/sdb1" successfully created

Посмотрим существующие Physical volume
pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               9.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2434
  Free PE               0
  Allocated PE          2434
  PV UUID               vtPIUY-c3pR-uAOa-EHjF-VHGk-Ercv-BNVRVI
   
  "/dev/sdb1" is a new physical volume of "89.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               89.99 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               V1C4B4-WK7N-X37f-XWsX-PH8x-WYa1-OpSFj9
Как мы можем убедиться наш Physical volume не находится ни в одной Volume Group 

Посмотрим существующие Volume Group
vgdisplay 
  --- Volume group ---
  VG Name               VolGroup
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               9.51 GiB
  PE Size               4.00 MiB
  Total PE              2434
  Alloc PE / Size       2434 / 9.51 GiB
  Free  PE / Size       0 / 0   
  VG UUID               hQ2EfR-x70X-mXYs-hKJ9-NpXW-0KGz-1HPjKG

У нас есть одна Volume Group в которую мы собственно и добавим наш Physical volume.

vgextend VolGroup /dev/sdb1
  /etc/lvm/archive/.lvm_hostname_21964_725831346: write error failed: No space left on device
  Volume group "VolGroup" metadata archive failed.
  Internal error: Attempt to unlock unlocked VG #orphans.
Если вы столкнулись с такой проблемой, значит ваша файловая система переполнена. Удалим ненужное, в принципе хватит нескольких свободных мегабайт и повторим попытку.
vgextend VolGroup /dev/sdb1
  Volume group "VolGroup" successfully extended
 Увеличим Volume Group, займём всё свободное пространство.
lvextend -l 100%FREE /dev/VolGroup/lv_root 
  Extending logical volume lv_root to 89.99 GiB
  Logical volume lv_root successfully resized
Увеличим размер файловой системы командой resize2fs 
В отличие от некоторых других менее гибких FS, ext4 можно увеличивать на горячую.
resize2fs /dev/VolGroup/lv_root 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 6
Performing an on-line resize of /dev/VolGroup/lv_root to 23590912 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 23590912 blocks long.
Всё теперь мы можем убедиться что у нас много свободного места.
df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       89G  7.4G   77G   9% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/sda1             485M   45M  415M  10% /boot