Лень - двигатель прогресса! Вынужден согласится с этим утверждением.
У мена в сервере много физических дисков. Разумеется, они заполняются и место заканчивается. Приходится переносить файлы с одного диска на другой. И чем меньше свободного места остается, тем чаще приходится тасовать файлы. Мне это надоело, пришла пора объединить диски в нечто целое. Из известных мне способов1: RAID, UnionFS и LVM, я выбрал последний из-за того, что можно будет легко добавить свежекупленный2 диск в массив. Итак, за работу.
Устанавливаю пакет lvm2:
sudo aptitude install lvm2 && partprobe
Нахожу доступные диски для создания lvm:
dmesg |grep sd
Нашлись диски sda, sdb, sdc, sdd и sde. Последний используется, на нем установлена система, команда:
mount
рассказывает в подробностях какие логические диски смонтированы. Это, что бы по ошибке не прихватить лишнего.
/dev/sde5 on / type reiserfs (rw,relatime)
proc on /proc type proc (rw,noexec,nosuid,nodev)
/sys on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,noexec,nosuid,nodev,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev on /dev type tmpfs (rw,mode=0755)
devshm on /dev/shm type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sde1 on /boot type ext3 (rw,relatime)
/dev/sde8 on /home type xfs (rw,relatime)
На дисках не должно быть разделов, если таковые имеются - почистить.
Для этого подойдет команда fdisk/cfdisk/dd
sudo cfdisk /dev/sda
Создаю физические разделы на дисках:
sudo pvcreate /dev/sda /dev/sdb /dev/sdc /dev/sdd
Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
Physical volume "/dev/sdd" successfully created
Смотрю, что получилось:
sudo pvdisplay
File descriptor 4 left open
File descriptor 5 left open
File descriptor 7 left open
File descriptor 8 left open
--- Physical volume ---
PV Name /dev/sda
VG Name 320x4
PV Size 298,09 GB / not usable 1,34 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 76311
Free PE 76311
Allocated PE 0
PV UUID VsZvc8-M2ym-W6Iu-6YrK-jAwI-AkwH-YNp9jO...
--- Physical volume ---
PV Name /dev/sdd
VG Name 320x4
PV Size 298,09 GB / not usable 1,34 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 76311
Free PE 76311
Allocated PE 0
PV UUID v01x5Y-beJf-xBa1-t5uk-THfF-syRs-CFdM1Z
Создаю группу томов "320x4"3
sudo vgcreate 320x4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
File descriptor 4 left open
File descriptor 5 left open
File descriptor 7 left open
File descriptor 8 left open
Volume group "320x4" successfully created
Что же у меня получилось? Смотрю:
sudo vgdisplay 320x4
--- Volume group ---
VG Name 320x4
System ID
Format lvm2
Metadata Areas 4
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 4
Act PV 4
VG Size 1,16 TB
PE Size 4,00 MB
Total PE 305244
Alloc PE / Size 0 / 0
Free PE / Size 305244 / 1,16 TB
VG UUID 1ac3Gd-20a3-N0Bj-KfnC-oFWw-g8hO-XViUHu
Теперь создаю логический диск "infa"4:
sudo lvcreate --name infa --size 1,16T 320x4
Rounding up size to full physical extent 1,16 TB
Logical volume "infa" created
При указании размера "1,16T" использовал именно запятую, а не точку.
Смотрю, что получилось:
sudo lvdisplay
--- Logical volume ---
LV Name /dev/320x4/infa
VG Name 320x4
LV UUID WmiE4N-jHXP-1lMO-xrj4-FaEp-aJFD-pTcOXo
LV Write Access read/write
LV Status available
# open 0
LV Size 1,16 TB
Current LE 304088
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 254:0
Теперь отформатирую в xfs, для больших файлов, что я буду здесь хранить, полагаю, эта файловая система подходит лучше всего5
sudo mkfs.xfs -f /dev/320x4/infa
meta-data=/dev/320x4/infa isize=256 agcount=32, agsize=9730816 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=311386112, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=32768, version=1
= sectsz=512 sunit=0 blks, lazy-count=0
realtime =none extsz=4096 blocks=0, rtextents=0
Теперь создам в домашней директории папку "320x4":
cd && mkdir ~/320x4
и смонтирую новый диск в эту папку посредством fstab
для этого добавлю строку в fstab:
sudo nano /etc/fstab
добавляю в него /dev/320x4/infa /home/donet/320x4 xfs rw,noatime 0 2
и монтирую:
sudo mount -a
проверяю, что получилось:
df -h |grep 320x4
/dev/mapper/320x4-infa 1,2T 5,1M 1,2T 1% /home/donet/320x4
и завладею полученным терабайтом:
sudo chown donet:donet 320x4
donet:donet - пользователь:группа
Все! О том, как добавить пространства/дисков, или, напротив, снять парочку дисков позже, когда возникнет нужда!
15/01-2009
Вот и возникла нужда добавить диск.
За прошедшее время я уже добавил еще один массив, теперь же снял старый и добавлю более емкий винт вместо него в существующий массив.
Теперь у меня массив стал называться 1Tx, буквы (например /dev/sdb) тоже поменялись.
Первым делом очистка диска командой:
sudo cfdisk /dev/sdb
создание физического раздела на диске:
sudo pvcreate /dev/sdb
добавление раздела к существующей группе:
sudo vgextend 1Tx /dev/sdb
смотрю, что же получилось:
sudo vgdisplay
--- Volume group ---
VG Name 1Tx
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 3,18 TB
PE Size 4,00 MB
Total PE 834633
Alloc PE / Size 475792 / 1,82 TB
Free PE / Size 358841 / 1,37 TB
VG UUID tfpGf3-KqbW-pxk6-znOa-wTBq-flNo-tZ1920
увеличиваю размер логического тома6:
sudo lvextend -L +1,36T /dev/1Tx/infa_1Tx
Rounding up size to full physical extent 4,00 MB
Extending logical volume infa_1Tx to 3,18 TB
Logical volume infa_1Tx successfully resized
и увеличиваю размер файловой системы, у меня это xfs, это можно делать "на лету", без размонтирования, здесь следует учесть, что указывать нужно точку монтирования:
sudo xfs_growfs /home/donet/1Tx
meta-data=/dev/mapper/1Tx-infa_1Tx isize=256 agcount=32, agsize=15225344 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=487211008, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal bsize=4096 blocks=32768, version=1
= sectsz=512 sunit=0 blks, lazy-count=0
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 487211008 to 852284416
Проверяю размер свободного места:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdd5 7,5G 2,8G 4,7G 38% /
...
/dev/mapper/1Tx-infa_1Tx
3,2T 1,8T 1,4T 57% /home/donet/1Tx
Замечательно, теперь места почти в два раза больше и с покупкой следующего винта можно повременить :)
Полезные ссылки:
Donet- 1. наверняка есть еще, но специальными поисками я не занимался, более того, выбор я сделал давно, просто "руки не доходили"
- 2. и все таки, я рекомендовал бы "погонять" диск перед этой процедурой на случай заводского брака месяц-другой
- 3. Назвал так потому, что четыре диска по 320 гиг в каждом :)
- 4. мне нужен один, использую все пространство, хотя можно делать сколько угодно, разных размеров
- 5. эта система имеет очень серьезный недостаток в данном случае - изменение размера возможно только в сторону увеличения.
- 6. в качестве разделителя должна быть запятая
