====== 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 儲存}}