====== Linux 建立 LVM 磁碟方式 ======
* [[tech:lvm_conecpt]]
* [[tech/lvm/ubuntu20]]
===== 目標 =====
要將 /dev/sdb 建立成一個 LVM 磁碟
* 可以使用 fdisk -l 列出目前主機內的所有實體硬碟資料清單
==== - fdisk ====
* fdisk /dev/sdb
:
Command (m for help): n
:
p primary partition (1-4) p
Partition number (1-4): 1
First cylinder (1-24321, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-24321, default 24321):
Using default value 24321
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): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
==== - pvcreate/vgcreate ====
* pvcreate /dev/sdb1
* vgcreate vg-seagate1 /dev/sdb1
* vgdisplay vg-seagate1
--- Volume group ---
VG Name vg-seagate1
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 298.09 GB
PE Size 4.00 MB
Total PE 76310
Alloc PE / Size 0 / 0
Free PE / Size 76310 / 298.09 GB
VG UUID XrrB58-E5zC-OFg0-e3Ch-lNsj-wr0n-LiyH33
==== - create, format, and mount logical volume ====
* 將所有空間都給一個 lv
* vgdisplay 看到 Free PE/Size 119234 / 465.76 GB
* lvcreate -l 119234 -nsg500 vg-sg500
* mkfs -t ext3 /dev/vg-sg500/sg500
* mount /dev/vg-sg500/sg500 /bak500
* 將所有 VG 空間 LV
* lvcreate -l +100%FREE -ndata01 vg-seagate1
* mkfs -t ext3 /dev/vg-seagate1/data01
* mount /dev/vg-seagate1/data01 /backup
* 指定特定空間大小 290G
* lvcreate -L 290G -ndata01 vg-seagate1
* mkfs -t ext3 /dev/vg-seagate1/data01
* mount /dev/vg-seagate1/data01 /backup
* 由上面 vgdisplay 可以知道 vg-seagate1 的可用大小為 VG Size = 298.09 GB 如果想要擴增到 100% 可透過 lvextend 來加上剩下的 8.08G((8.09G 會出現空間不足的問題))
* lvextend -L +8.08G /dev/vg-seagate1/data01
* ext2online /dev/vg-seagate1/data01 (CentOS 4 使用 ext2online)
* resize2fs /dev/vg-seagate1/data01 (CentOS 5 使用 resize2fs)
++++看執行的內容|
[root@ibm-x206 ~]# lvextend -L +8.09G /dev/vg-seagate1/data01
Rounding up size to full physical extent 8.09 GB
Extending logical volume data01 to 298.09 GB
Insufficient free space: 2072 extents needed, but only 2070 available
[root@ibm-x206 ~]# lvdisplay
--- Logical volume ---
LV Name /dev/vg-seagate1/data01
VG Name vg-seagate1
LV UUID 1nFltd-kgtz-v8od-k1LK-y717-pOlp-piBcrE
LV Write Access read/write
LV Status available
# open 1
LV Size 290.00 GB
Current LE 74240
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2
[root@ibm-x206 ~]# lvextend -L +8.08G /dev/vg-seagate1/data01
Rounding up size to full physical extent 8.08 GB
Extending logical volume data01 to 298.08 GB
Logical volume data01 successfully resized
[root@ibm-x206 ~]# lvdisplay
--- Logical volume ---
LV Name /dev/vg-seagate1/data01
VG Name vg-seagate1
LV UUID 1nFltd-kgtz-v8od-k1LK-y717-pOlp-piBcrE
LV Write Access read/write
LV Status available
# open 1
LV Size 298.08 GB
Current LE 76309
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2
[root@ibm-x206 backup]# df -k
Filesystem 1K-區段 已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
305346824 1237084 288599008 1% /
/dev/sda1 101086 19636 76231 21% /boot
none 517016 0 517016 0% /dev/shm
/dev/mapper/vg--seagate1-data01
299315840 98368 284013120 1% /backup
[root@ibm-x206 backup]# ext2online /dev/vg-seagate1/data01
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
[root@ibm-x206 backup]# df -k
Filesystem 1K-區段 已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
305346824 1237084 288599008 1% /
/dev/sda1 101086 19636 76231 21% /boot
none 517016 0 517016 0% /dev/shm
/dev/mapper/vg--seagate1-data01
307656824 98368 291930476 1% /backup
++++
* 如果有安裝 X Window 又在 Console 前面也可使用 system-config-lvm 的圖形介面來建立
當在 /dev 內看不到 vg-xxx 時,可先透過 lvdisplay 確認 LV Status,如果出現的是 **NOT available** 可以透過 **vgchange** 命令來解決,Exp.
vgchange -a y vg-iscsi-01
當出現結果是 now active
[root@vm-mail ~]# vgchange -a y vg-iscsi-01
1 logical volume(s) in volume group "vg-iscsi-01" now active
就表示正確啟動,這問題通常會出現在調整 vg 大小失敗時出現
==== - Resize logical volume ====
* 當某個 lv 有空間要移轉給另外一個 lv 的處理方式如下:
* **被移轉的 lv 資料很可能會全部損毀**
* [實作]範例為將 /dev/vg-sg500/sg500(/dev/sdd1, /bak500) 刪除該 lv, vg 後, 配置 /dev/sdd1 給 /dev/vg-sg2000/sg2000(/dev/sdb1, /data2000)
umount /bak500
lvremove /dev/vg-sg500/sg500
vgremove vg-sg500
vgdisplay <- vg-sg500 已經看不到, 可看到 vg-sg2000 的 VG Size 1.82 TB, Free PE/Size 0/0
vgextend vg-sg2000 /dev/sdd1
vgdisplay vg-sg2000 <- 可看到 vg-sg2000 的 VG Size 變成 2.27 TB, Free PE/Size 119234/465.76 GB
df -h <- 可看到 /data2000 容量 1.8T
lvextend -L +465.75G /dev/vg-sg2000/sg2000
vgdisplay vg-sg2000 <- 可看到 vg-sg2000 的 Free PE/Size 2/8.00 MB
lvextend -L +8M /dev/vg-sg2000/sg2000
vgdisplay vg-sg2000 <- 可看到 vg-sg2000 的 Free PE/Size 0/0
resize2fs /dev/vg-sg2000/sg2000 <- 需要一段時間
df -h <- 可看到 /data2000 容量 2.3T (原本 /data2000 的檔案也可正常存取)
* [實作]範例為將 /dev/vg-sg2000/sg2000(/dev/sdb1+/dev/sdd1, /data2000) 內的 /dev/sdd1 移出
umount /data2000
e2fsck -f /dev/vg-sg2000/sg2000 <- 需要一段時間
resize2fs -p /dev/vg-sg2000/sg2000 1500G <- 需要一段時間
lvdisplay /dev/vg-sg2000/sg2000 <- LV Size 2.27 TB
lvreduce --size 1800G /dev/vg-sg2000/sg2000
lvdisplay /dev/vg-sg2000/sg2000 <- LV Size 1.76 TB
resize2fs /dev/vg-sg2000/sg2000 <- 需要一段時間
vgreduce -a vg-sg2000 <- 會出現移除 /dev/sdd1 的訊息
mount /data2000 <- 可以看到 /data2000 之前的資料都可正常存取
===== 參考網址 =====
* http://wiki.linuxquestions.org/wiki/Lvreduce
* http://wiki.linuxquestions.org/wiki/LVM
* http://www.linuxsir.org/bbs/thread211828-2.html
* http://blog.yam.com/gwabau/article/14026354
* http://openskill.info/infobox.php?ID=1456
* http://markmail.org/message/jtlnju4dfsr7ijht#query:vg%20status%20NOT%20available+page:1+mid:zw2nxmrtb3sbhi5a+state:results
* http://emidio.planamente.ch/docs/linux/lvm-html/linuxdoc/lvm-5.html
{{tag>lvm linux disk 儲存}}