使用者工具

網站工具


tech:lvm

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
  • 指定特定空間大小 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

[[email protected] ~]# 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 會出現空間不足的問題
tech/lvm.txt · 上一次變更: 2018/06/24 14:15 由 Jonathan Tsai