Linux 建立 LVM 磁碟方式
目標
要將 /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.08G1)
- lvextend -L +8.08G /dev/vg-seagate1/data01
- ext2online /dev/vg-seagate1/data01 (CentOS 4 使用 ext2online)
- resize2fs /dev/vg-seagate1/data01 (CentOS 5 使用 resize2fs)
- 如果有安裝 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 之前的資料都可正常存取
參考網址
1)
8.09G 會出現空間不足的問題