LVM

出自 Arch Linux 中文维基

這篇文章的某些內容需要擴充。

原因: 本文沒有涵蓋關於 精簡配置[失效連結 2022-09-19 ⓘ]的內容。您可以同時在 此處找到更全面的解釋。 (在 Talk:LVM#Logical volume types 中討論)

引用 Wikipedia:Logical Volume Manager (Linux) 的解釋:

LVM 是一種可用在 Linux 內核邏輯分卷管理器;可用於管理磁碟驅動器或其他類似的大容量存儲設備。

LVM基本組成[編輯 | 編輯原始碼]

LVM利用Linux內核的device-mapper功能來實現存儲系統的虛擬化(系統分區獨立於底層硬體)。 通過LVM,你可以實現存儲空間的抽象化並在上面建立虛擬分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增刪分區時無需擔心某個硬碟上沒有足夠的連續空間,避免為正在使用的磁碟重新分區的麻煩、為調整分區而不得不移動其他分區的不便。

LVM的基本組成部分如下:

物理卷 (PV)
一個可供存儲LVM的塊設備. 例如: 一塊硬碟, 一個MBR或GPT分區, 一個迴環文件, 一個被內核映射的設備 (例如 dm-crypt).它包含一個特殊的LVM頭。
卷組 (VG)
物理卷的一個組,作為存放邏輯卷的容器。 PEs are allocated from a VG for a LV.
邏輯卷 (LV)
"虛擬/邏輯卷"存放在一個卷組中並由物理塊組成。是一個類似於物理設備的塊設備,例如,你可以直接在它上面創建一個文件系統文件系統
物理塊 (PE)
一個卷組中最小的連續區域(默認為4 MiB),多個物理塊將被分配給一個邏輯卷。你可以把它看成物理卷的一部分,這部分可以被分配給一個邏輯卷。

示例:

 '''物理硬盘'''
                 
   硬盘1 (/dev/sda):
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
     |分区1 50GB (物理卷)           |分区2 80GB (物理卷)            |
     |/dev/sda1                    |/dev/sda2                     |
     |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|
                                   
   硬盘2 (/dev/sdb):
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
     |分区1 120GB (物理卷)                         |
     |/dev/sdb1                                   |
     | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
 '''LVM逻辑卷'''
 
   卷组(Volume Group1) (/dev/MyVolGroup/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ 
     |逻辑卷1 15GB                  |逻辑卷2 35GB                        |逻辑卷3 200GB                         |
     |/dev/MyVolGroup/rootvol        |/dev/MyVolGroup/homevol             |/dev/MyVolGroup/mediavol              |
     |_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|

優點[編輯 | 編輯原始碼]

比起普通的硬碟分區管理方式,LVM更富於靈活性:

  • 將多塊硬碟看作一塊大硬碟
  • 使用邏輯卷(LV),可以創建跨越眾多硬碟空間的分區。
  • 可以創建小的邏輯卷(LV),在空間不足時再動態調整它的大小。
  • 在調整邏輯卷(LV)大小時可以不用考慮邏輯卷在硬碟上的位置,不用擔心沒有可用的連續空間。
  • 可以在線(online)對邏輯卷(LV)和卷組(VG)進行創建、刪除、調整大小等操作。不過LVM上的文件系統也需要重新調整大小,好在某些文件系統(例如ext4)也支持在線操作。
  • 無需重新啟動服務,就可以將服務中用到的邏輯卷(LV)在線(online)/動態(live)遷移至別的硬碟上。
  • 允許創建快照,可以保存文件系統的備份,同時使服務的下線時間(downtime)降低到最小。
  • 支持各種設備映射目標(device-mapper targets),包括透明文件系統加密和緩存常用數據(caching of frequently used data)。這將允許你創建一個包含一個或多個磁碟、並用LUKS加密的系統,使用LVM on top 可輕鬆地管理和調整這些獨立的加密卷 (例如. /, /home, /backup等) 並免去開機時多次輸入密鑰的麻煩。

缺點[編輯 | 編輯原始碼]

  • 在系統設置時需要更複雜的額外步驟。
  • Windows系統並不支持LVM,若使用雙系統,你將無法在Windows上訪問LVM分區。

準備[編輯 | 編輯原始碼]

確保已安裝lvm2包。

在LVM上安裝Arch Linux[編輯 | 編輯原始碼]

你應該在安裝過程中的的分區創建文件系統這一步中創建LVM卷。不要直接格式化一個分區作為你的根文件系統(/),而應將其創建在一個邏輯卷(LV)中。

快速導覽:

  • 創建物理卷(PV)所在的分區
  • 創建物理卷(PV)。如果你只有一個硬碟,那麼你最好只創建一個分區一個物理卷;如果你有多個硬碟,你可以創建多個分區,在每個分區上分別創建一個物理卷。
  • 創建卷組(VG),並把所有物理卷加進卷組。
  • 在卷組(VG)上創建邏輯卷(LV)。
  • 繼續安裝指南中的格式化分區步驟。
  • 當你做到安裝指南中的「Initramfs」步驟時,把 lvm2加入到 mkinitcpio.conf文件中(請參考下文)。
警告: 若你使用不支持LVM的引導程序,/boot不能置於LVM中。你必須創建一個獨立的/boot分區並直接格式化它。已知支持LVM的引導程序只有GRUB

創建分區[編輯 | 編輯原始碼]

在繼續配置LVM前,必須對設備進行分區

創建分區:

  • 若使用MBR,設置 分區類型8e (在"fdisk"中為Linux LVM).
  • 若使用GPT, 設置分區類型E6D6D379-F507-44C2-A23C-238F2A3DF928 (在"fdisk"中為Linux LVM;在"gdisk"中為8e00).

創建物理卷(PV)[編輯 | 編輯原始碼]

可通過以下命令列出可被用作物理卷的設備:

# lvmdiskscan
警告: 請確認你對正確的設備進行操作,否則會導致文件丟失!

在列出的設備上創建物理卷:

 # pvcreate DEVICE

該命令在各個設備上創建LVM頭。如#LVM基本組成所示, DEVICE可以是磁碟(如/dev/sda),分區(如/dev/sda2)或環回設備。例如:

# pvcreate /dev/sda2

你可以用以下命令查看已創建好的物理卷:

# pvdisplay
注意: 如果你用的是未格式化過且擦除塊(erase block)大小小於1M的SSD,請採用以下命令pvcreate --dataalignment 1m /dev/sda來設置對齊(alignment),可以參考連結(英文)

創建卷組(VG)[編輯 | 編輯原始碼]

創建完成物理卷(PV)之後,下一步就是在該物理卷創建卷組(VG)了。 首先必須先在其中一個物理卷(PV)創建一個卷組:

# vgcreate <volume_group> <physical_volume>

可用作字符卷組的名稱可在lvm(8)中查到。

例如:

# vgcreate VolGroup00 /dev/sda2

然後讓該卷組擴大到其他所有的物理卷:

# vgextend <卷组名> <物理卷>
# vgextend <卷组名> <其它物理卷>
# ...

例如:

# vgextend VolGroup00 /dev/sdb1
# vgextend VolGroup00 /dev/sdc

其中,「VolGroup00」名字換成你自己起的名字即可。 接下來可以用以下命令查看卷組:

# vgdisplay
注意: 你可以創建多個的卷組,但這將使你的硬碟空間分布在不同(邏輯)磁碟上。

一步創建卷組[編輯 | 編輯原始碼]

LVM支持將卷組與物理卷的創建聚合在一個命令中。例如,為了在前文提到的三個設備中創建名為VolGroup00的卷組,可以執行如下命令:

# vgcreate VolGroup00 /dev/sda2 /dev/sdb1 /dev/sdc

該命令首先會在分區上創建物理卷(如果之前沒有創建過),再創建一個包含三個物理卷的卷組。如果設備上已經存在文件系統,命令會提出警告。

創建邏輯卷(LV)[編輯 | 編輯原始碼]

提示:若想在LVM上使用快照, 邏輯卷緩存(logical volume caching), thin provisioned logical volumes 或 RAID,請參見 #邏輯卷類型.

創建完卷組(VG)之後,就可以開始創建邏輯卷(LV)了。輸入下面命令以指定新邏輯卷的名字、大小及其所在的卷組:

# lvcreate -L <卷大小> <"卷组名> -n <卷名>

例如:

# lvcreate -L 10G VolGroup00 -n lvolhome

該邏輯卷創建完後,你就可以通過/dev/mapper/Volgroup00-lvolhome/dev/VolGroup00/lvolhome來訪問它。與卷組命名類似,你可以按你的需要將邏輯卷命名。

你可以指定一個或多個物理捲來限制LVM分配數據空間的位置。比如你希望在較小的SSD硬碟上創建根文件系統,並在較慢的機械硬碟上創建家目錄卷,僅需把物理卷設備加入到命令中,例如:

# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1

如果你想讓要創建的邏輯卷擁有卷組(VG)的所有未使用空間,請使用以下命令:

# lvcreate -l +100%FREE  <volume_group> -n <logical_volume>

可以通過以下命令來查看邏輯卷:

# lvdisplay
注意: 為了使上述命令能正常運行,你可能需要加載device-mapper內核模塊(請使用命令modprobe dm-mod)。
提示:一開始可以創建小一點的邏輯卷,在卷組裡留下一部分未使用空間,以後就可以根據需要再作擴展了。

建立文件系統與掛載邏輯卷[編輯 | 編輯原始碼]

現在你的邏輯卷應該已經在/dev/mapper//dev/YourVolumeGroupName中了。如果你無法在以上位置找到它,請使用以下命令來加載模塊、並掃描與激活卷組:

# modprobe dm-mod
# vgscan
# vgchange -ay

現在你可以在邏輯卷上創建文件系統並像普通分區一樣掛載它了(如果你正在安裝Arch linux,需要更詳細的信息,請參考掛載分區):

# mkfs.<类型> /dev/mapper/<卷组名>-<卷名>
# mount /dev/mapper/<卷组名>-<卷名> <挂载点>

例如:

# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome
# mount /dev/mapper/VolGroup00-lvolhome /home
警告: 掛載點請選擇你所新建的邏輯卷(例如:/dev/mapper/Volgroup00-lvolhome),不要使用邏輯卷所在的實際分區設備(即不要使用:/dev/sda2)。

配置mkinitcpio[編輯 | 編輯原始碼]

如果你的根文件系統基於LVM,你需要啟用適當的mkinitcpio鉤子,否則你的系統可能無法啟動。

  • 若使用基於busybox的initramfs,請啟用udevlvm2
  • 若使用基於systemd的initramfs,請啟用systemdsd-lvm2

udev默認已經預設好,不必手動啟用了。你只需要編輯/etc/mkinitcpio.conf文件,在blockfilesystem這兩項中間插入lvm2

基於busybox的initramfs

/etc/mkinitcpio.conf
HOOKS="base udev ... block lvm2 filesystems"

基於systemd的initramfs:

/etc/mkinitcpio.conf
HOOKS=(base systemd ... block lvm2 filesystems)

之後你就可以繼續下一步的創建和啟用鏡像操作了。

提示:
  • lvm2sd-lvm2鉤子被lvm2安裝,而不是mkinitcpio。如果你在"arch-chroot"中新安裝的Arch Linux中運行"mkinitcpio",必須在環境中安裝lvm2以使mkinitcpio找到lvm2sd-lvm2鉤子。如果lvm2未安裝, mkinitcpio將報錯:Error: Hook 'lvm2' cannot be found.
  • 若根文件系統在LVM + RAID上,請參見#為RAID配置mkinitcpio.

內核參數[編輯 | 編輯原始碼]

如果你的根文件系統位於邏輯分卷,則root= 內核參數必須指向一個映射設備,比如/dev/mapper/vg-name-lv-name

配置[編輯 | 編輯原始碼]

高級選項[編輯 | 編輯原始碼]

可以通過修改/etc/lvm/lvm.conf文件中的auto_activation_volume_list參數限制自動激活的卷。如果存在問題,可以將此選項注釋掉。

調整卷[編輯 | 編輯原始碼]

物理卷[編輯 | 編輯原始碼]

對於存在物理卷的設備,在擴增其容量之後或縮小其容量之前,必須使用pvresize命令對應地增加或減少物理卷的大小。

擴增[編輯 | 編輯原始碼]

增大分區/dev/sda1的容量之後,需要執行以下命令擴展物理卷的大小

# pvresize /dev/sda1

命令將自動探測設備當前大小並將物理卷擴展到其最大容量。

注意: 該命令可在卷在線(on-line)時運行。
縮小[編輯 | 編輯原始碼]

在減少某個物理卷所在設備大小之前,需要通過指定--setphysicalvolumesize 大小參數縮小物理卷大小,例如:

# pvresize --setphysicalvolumesize 40G /dev/sda1

該命令可能會提示以下錯誤:

 /dev/sda1: cannot resize to 25599 extents as later ones are allocated.
 0 physical volume(s) resized / 1 physical volume(s) not resized

即該物理卷已分配物理區域超過了命令指定的新大小邊界,pvresize會拒絕將物理捲縮小。若磁碟空間足夠,可通過pvmove將物理區域重新分配至別的卷組來解決這個問題。

移動物理區域[編輯 | 編輯原始碼]

在移動空閒的物理區域到卷尾部之前,需要運行# pvdisplay -v -m命令查看物理分段。如下例所示,僅有一個物理卷/dev/sdd1, 一個卷組vg1和一個邏輯卷backup

# pvdisplay -v -m
    Finding all volume groups.
    Using physical volume(s) on command line.
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg1
  PV Size               1.52 TiB / not usable 1.97 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              399669
  Free PE               153600
  Allocated PE          246069
  PV UUID               MR9J0X-zQB4-wi3k-EnaV-5ksf-hN1P-Jkm5mW
   
  --- Physical Segments ---
  Physical extent 0 to 153600:
    FREE
  Physical extent 153601 to 307199:
    Logical volume	/dev/vg1/backup
    Logical extents	1 to 153599
  Physical extent 307200 to 307200:
    FREE
  Physical extent 307201 to 399668:
    Logical volume	/dev/vg1/backup
    Logical extents	153601 to 246068

可用空間在卷中段。為了減小物理卷大小,首先必須把所有的已用分段移到前部。

此例中,第一個可用空間在第0至第153600分段共153601個可用區域。我們可以從最後的分段中移動相同數目的物理區域來填補這段空間

# pvmove --alloc anywhere /dev/sdd1:307201-399668 /dev/sdd1:0-92466
/dev/sdd1: Moved: 0.1 %
/dev/sdd1: Moved: 0.2 %
...
/dev/sdd1: Moved: 99.9 %
/dev/sdd1: Moved: 100,0%
注意:
  • 命令將92467 (399668-307201)個物理區域最後一個分段移動到第一個分段。由於第一個分段共有153600個空閒的物理區域,可以容納92467個物理區域,命令可以成功執行。
  • 參數--alloc anywhere可以用於在同一個分區中移動物理區域的。若要在不同分區中移動,命令形式應該是# pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999
  • 當操作的數據較多時,移動操作將持續很久(一到兩個小時)。最好在TmuxGNU Screen會話中執行此過程。任何形式的意外中斷都可能會導致致命錯誤。
  • 當操作完成後,可運行Fsck保證文件系統完整性。
調整物理卷大小[編輯 | 編輯原始碼]

當所有空閒分段都移動到最後的物理區域時,運行# vgdisplay查看。

之後可以再次運行命令:

# pvresize --setphysicalvolumesize size PhysicalVolume

結果類似:

# pvs
  PV         VG   Fmt  Attr PSize    PFree 
  /dev/sdd1  vg1  lvm2 a--     1t     500g
調整分區大小[編輯 | 編輯原始碼]

最後,你可以用你喜歡的分區工具來縮小該分區。

邏輯卷[編輯 | 編輯原始碼]

{{小貼士|lvresize(8)提供一些與lvextend(8)lvreduce(8)相同的命令與選項,並同時允許兩種類型的操作。然而,這幾個命令都提供一個-r/--resizefs選項,使用fsadm(8)在調整邏輯卷時同時調整其中的文件系統(支持ext2, ext3, ext4, ReiserFSXFS )。 因此,對普通使用來說,使用lvresize}和--resizefs將會更容易, 除非您有特定的需求或希望完全控制流程。

警告: 儘管擴大一個文件系統可以「在線」(on-line),也就是當它已掛載時)完成,甚至對根分區。縮小一個文件系統卻往往要求先卸載(umount)它,以避免丟失數據。請先確保你的文件系統支持相關操作。
同時縮小邏輯卷和其文件系統[編輯 | 編輯原始碼]
注意: 只有ext2ext3ext4ReiserFSXFS 文件系統支持以下操作。對於其他文件系統,請參見#單獨設置文件系統大小

MyVolGroup組中的邏輯卷mediavol擴大10GiB,並同時擴大其文件系統:

# lvresize -L +10G --resizefs MyVolGroup/mediavol

MyVolGroup組中的邏輯卷mediavol大小調整為15GiB,並同時調整其文件系統:

# lvresize -L 15G --resizefs MyVolGroup/mediavol

將卷組中的所有剩餘空間分配給mediavol

# lvresize -l +100%FREE --resizefs MyVolGroup/mediavol

更多選項請參見lvresize(8)

單獨設置文件系統大小[編輯 | 編輯原始碼]

對於不支持fsadm(8)的文件系統,請在縮小邏輯卷前或擴大邏輯卷後,使用適當的工具來調整文件系統的大小。

先將MyVolGroup組中的邏輯卷mediavol擴大2 GiB,但不調整其文件系統:

# lvresize -L +2G MyVolGroup/mediavol

然後在調整其文件系統,是其達到邏輯卷的大小:(以ext4為例)

# resize2fs /dev/MyVolGroup/mediavol

要將邏輯卷mediavol縮小500 MiB,先計算調整後文件系統的大小並調整文件系統(以ext4為例):

# resize2fs /dev/MyVolGroup/mediavol 调整后的大小

然後再縮小邏輯卷的大小:

# lvresize -L -500M MyVolGroup/mediavol

更多選項請參見lvresize(8)

重命名卷[編輯 | 編輯原始碼]

重命名卷組[編輯 | 編輯原始碼]

要重命名一個卷組,請使用vgrename(8)命令。

可使用下面的任意一條命令將卷組vg02重命名為my_volume_group

# vgrename /dev/vg02 /dev/my_volume_group
# vgrename vg02 my_volume_group

重命名邏輯卷[編輯 | 編輯原始碼]

要重命名一個邏輯卷,請使用lvrename(8)命令。

可使用下面的任意一條命令將vg02組中的邏輯卷lvold重命名為lvnew.

# lvrename /dev/vg02/lvold /dev/vg02/lvnew
# lvrename vg02 lvold lvnew

移除邏輯卷[編輯 | 編輯原始碼]

警告: 在移除邏輯卷之前,請先備份好數據以免丟失!

首先,找到你所要移除的邏輯卷的名稱。你可以使用以下命令來查看系統的所有邏輯卷:

# lvs

接下來,找到你所要移除的邏輯卷的掛載點

$ lsblk

並卸載它:

# umount /<mountpoint>

最後,使用以下命令來移除邏輯卷:

# lvremove <volume_group>/<logical_volume>

例如:

# lvremove VolGroup00/lvolhome

請輸入y來確定你要執行移除邏輯卷操作。

此外,請不要忘了更新/etc/fstab

你可以再次使用lvs命令來確認你的邏輯卷已被移除。

添加物理卷到卷組中[編輯 | 編輯原始碼]

首先創建一個新的物理卷,再把卷組擴充到該物理卷上:

# pvcreate /dev/sdb1
# vgextend VolGroup00 /dev/sdb1

這將增加你卷組中的物理區域總數,你可以按需要將它們分配到邏輯卷中。

注意:分區表保存在LVM所在媒體設備是個值得借鑑的方式。對於MBR可以使用類型8e,或GPT類型8e00

從卷組中移除(物理)分區[編輯 | 編輯原始碼]

如果在這個物理分區上創建了一個邏輯卷,請先移除它。

首先,分區中的所有數據需要被轉移到別的分區,幸而LVM提供了以下的簡便方式:

# pvmove /dev/sdb1

如果你想指定所要轉移的目標分區,那麼可以把該分區作為pvmove的第二個參數:

# pvmove /dev/sdb1 /dev/sdf1

接著,從卷組(VG)中移除物理卷(PV):

# vgreduce myVg /dev/sdb1

或者把所有的空物理卷(PV)都移除掉:

# vgreduce --all vg0

最後,如果你仍然想要使用該分區,而且不想讓LVM以為它是一個物理卷,那麼你可以執行以下命令:

# pvremove /dev/sdb1

停用卷組[編輯 | 編輯原始碼]

只需執行:

# vgchange -a n my_volume_group

這將停用此卷組,以便你卸載存儲它的容器。

邏輯卷類型[編輯 | 編輯原始碼]

本文或本節需要翻譯。要貢獻翻譯,請訪問簡體中文翻譯團隊

附註: 是否需要為thin-provisioned卷和RAID卷的創建提供說明?(在 Talk:LVM# 中討論)

除了普通的邏輯卷, LVM還支持:快照, logical volume caching, thin provisioned邏輯卷,以及RAID.

快照功能[編輯 | 編輯原始碼]

介紹[編輯 | 編輯原始碼]

LVM可以給系統創建一個快照,由於使用了寫入時複製(copy-on-write) 策略,相比傳統的備份更有效率。 初始的快照只有關聯到實際數據的inode的實體連結(hark-link)而已。只要實際的數據沒有改變,快照就只會包含指向數據的inode的指針,而非數據本身。一旦你更改了快照對應的文件或目錄,LVM就會自動拷貝相應的數據,包括快照所對應的舊數據的拷貝和你當前系統所對應的新數據的拷貝。這樣的話,只要你修改的數據(包括原始的和快照的)不超過2G,你就可以只使用2G的空間對一個有35G數據的系統創建快照。要創建快照,在卷組中必須有未被分配的空間。和其他邏輯卷一樣,快照也會占用卷組中的空間。所以,如果你計劃使用快照來備份你的根(root)分區,不要將整個卷組的空間都分配給根(root)邏輯卷。

配置[編輯 | 編輯原始碼]

你可以像創建普通邏輯卷一樣創建快照邏輯卷。

# lvcreate --size 100M --snapshot --name snap01 /dev/vg0/lv

你可以修改少於100M的數據,直到該快照邏輯卷空間不足為止。

要將邏輯卷卷'lv' 恢復到創建快照'snap01'時的狀態,請使用:

# lvconvert --merge /dev/vg0/snap01

如果邏輯卷處於活動狀態,則在下次重新啟動時將進行合併(merging)(合併(merging)甚至可在LiveCD中進行)。

注意: 合併後快照將被刪除。

也以拍攝多個快照,每個快照都可以任意與對應的邏輯卷合併。

快照也可以被掛載,並可用dd或者tar備份。使用dd備份的快照的大小為拍攝快照後對應邏輯卷中變更過文件的大小。 要使用備份,只需創建並掛載一個快照,並將備份寫入或解壓到其中。再將快照合併到對應邏輯卷即可。

本文或本節需要翻譯。要貢獻翻譯,請訪問簡體中文翻譯團隊

附註: 是否需要單獨的文章來介紹:創建在系統更新前自動備份根目錄的腳本,用於回滾。並修改menu.lst以引導備份?(在 Talk:LVM# 中討論)

快照主要用於提供一個文件系統的拷貝,以用來備份; 比起直接備份分區,使用快照備份可以提供一個更符合原文件系統的鏡像。

LVM 緩存[編輯 | 編輯原始碼]

來自lvmcache(7):

Cache邏輯卷將使用一個較小而快速的邏輯卷,來提高較大但慢速的邏輯卷的性能。它將大型邏輯卷中經常使用的塊存儲到較快的緩存卷中。 LVM將這個小而快速的邏輯卷稱為緩衝池邏輯卷(cache pool LV)。 大而慢的邏輯卷則被稱為源邏輯卷(origin LV)。由於dm-cache(內核驅動)的要求,LVM進一步將緩存池邏輯卷分為兩個設備 - 緩存數據邏輯卷和緩存元數據邏輯卷。緩存數據邏輯卷存放源邏輯卷中常用塊的拷貝,以提升源邏輯卷的速度。 緩存元數據邏輯卷則存儲記錄信息,這些信息指定了源邏輯卷中的數據被存放到緩存邏輯卷中的位置。 (即,確定源邏輯卷中的一個塊是存儲到自身空間還是緩存邏輯卷中?)。要想創建最好、最穩定的緩存邏輯卷,你必須熟悉這些信息。所有這些被提到的邏輯卷都必須存放在一個卷組中。

創建緩存[編輯 | 編輯原始碼]

最快速的方法是直接在快速的設備上創建一個物理卷,並把它添加到一個卷組中:

# vgextend dataVG /dev/sdx

只需一步,即可在sdb上創建一個緩存池,自動生成元數據,將邏輯卷dataLV緩存到sdb上:

# lvcreate --type cache --cachemode writethrough -L 20G -n dataLV_cachepool dataVG/dataLV /dev/sdx

顯然,如果你想讓緩存變得更大,可更改 -L參數。

注意: Cachemode有兩個可能的參數:
  • writethrough 確保任何數據寫入都會被同時存儲到緩存池邏輯卷和源邏輯卷中。 在這種情況下,丟失與緩存池邏輯卷關聯的設備不會丟失任何數據;
  • writeback 可提供更好的性能, 如果用於緩存的設備發生故障,數據丟失的風險會更高。

如果未指定--cachemode,將會自動選擇writethrough

刪除緩存[編輯 | 編輯原始碼]

如果需要撤消上面的創建操作:

# lvconvert --uncache dataVG/dataLV

這會將緩存中掛起的寫入操作提交到源邏輯卷, 然後刪除緩存邏輯卷。 其它可用的參數和介紹,請參見:lvmcache(7).

RAID[編輯 | 編輯原始碼]

來自lvmraid(7):

lvm(8) RAID是一種創建邏輯卷的方法,它使用多個物理設備來提高性能或容錯能力。在LVM中,這些物理設備是單個卷組中的物理卷。

LVM RAID支持RAID 0,RAID 1,RAID 4,RAID 5,RAID 6和RAID 10。每個RAID等級的細節請見:Wikipedia:Standard RAID levels

配置RAID[編輯 | 編輯原始碼]

創建物理卷:

# pvcreate /dev/sda2 /dev/sdb2 

創建卷組:

# vgcreate VolGroup00 /dev/sda2 /dev/sdb2

使用lvcreate --type raidlevel參數創建邏輯卷。更多選項,請參見lvmraid(7)lvcreate(8)

# lvcreate --type RaidLevel [OPTIONS] -n Name -L Size VG [PVs]

例如:

# lvcreate --type raid1 --mirrors 1 -L 20G -n myraid1vol VolGroup00 /dev/sda2 /dev/sdb2

這將會在設備/dev/sda2/dev/sdb2上和"VolGroup00"卷組中創建一個20GiB的鏡像(mirrored)邏輯卷"myraid1vol"。

為RAID配置mkinitcpio[編輯 | 編輯原始碼]

如果你的根文件系統在LVM RAID上,除了lvm2sd-lvm2鉤子,你還需添加dm-raid以及恰當的RAID模塊(例如raid0raid1raid10raid456)到mkinitcpio.conf中的MODULES數組中。

對於基於busybox的initramfs:

/etc/mkinitcpio.conf
MODULES=(dm-raid raid0 raid1 raid10 raid456)
HOOKS=(base udev ... block lvm2 filesystems)

對於基於systemd的initramfs:

/etc/mkinitcpio.conf
MODULES=(dm-raid raid0 raid1 raid10 raid456)
HOOKS=(base systemd ... block sd-lvm2 filesystems)

圖形化配置[編輯 | 編輯原始碼]

目前沒有「官方的」管理LVM卷的GUI工具,不過system-config-lvmAUR[損壞的連結:package not found]涵蓋了大多數常見操作,並提供卷狀態的簡單可視化。它還可以在調整邏輯卷大小時自動調整許多文件系統的大小。

常見問題[編輯 | 編輯原始碼]

由于禁用lvmetad帶來的開/關機問題[編輯 | 編輯原始碼]

」必須「在/etc/lvm/lvm.conf中設置use_lvmetad = 1。 現在這已時默認設置 - 如果存在 lvm.conf.pacnew文件,你必須合併這個更改。

LVM 命令不起作用[編輯 | 編輯原始碼]

  • 加載以下模塊:
# modprobe dm_mod

正常情況下,dm_mod模塊應當被自動加載。假如該模塊無法被自動加載,你可以試著修改/etc/mkinitcpio.conf

本文或本節需要翻譯。要貢獻翻譯,請訪問簡體中文翻譯團隊

附註: 英文章不正。是否應當考慮加入到"/etc/modules-load.d"?(在 Talk:LVM# 中討論)
/etc/mkinitcpio.conf:
MODULES="dm_mod ..."

你需要重建initramfs來提交你對/etc/mkinitcpio.conf的更改。

  • 測試以lvm開頭的命令是否可以被正確執行,例如:
# lvm pvdisplay

邏輯卷無法顯示[編輯 | 編輯原始碼]

如果你在掛載某個已創建好的邏輯卷時,發現它沒有出現在lvscan命令的結果列表裡,但是使用lvdisplay -a可找到此卷且狀態為Not Available,那麼你可以用以下命令去激活它:

# vgscan
# vgchange -ay

在可移除設備上的LVM問題[編輯 | 編輯原始碼]

症狀:

# vgscan
 Reading all physical volumes.  This may take a while...
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error
 Found volume group "backupdrive1" using metadata type lvm2
 Found volume group "networkdrive" using metadata type lvm2

產生原因:

在停用卷組(VG)之前就移除掉外部的LVM設備。在你斷開連接之前,請確保以下命令被執行:
# vgchange -an volume group name

解決方案:如果你已經用# vgchange -ay vg命令來激活卷組,但仍有Input/output error的錯誤信息。執行以下命令:

# vgchange -an volume group name

移除外部設備,稍候幾分鐘後再執行以下命令:

# vgscan
# vgchange -ay volume group name

無法調整相鄰邏輯卷的大小[編輯 | 編輯原始碼]

在嘗試擴大一個邏輯卷時出現以下錯誤:

" Insufficient suitable contiguous allocatable extents for logical volume "

其原因是此邏輯卷在創建時使用了顯式連續分配策略(an explicit contiguous allocation policy)(-C y選項或--alloc contiguous),並且沒有其他相鄰的連續數據塊可用(另見reference)。

要修復此錯誤,在擴展邏輯卷之前,使用lvchange --alloc inherit <logical_volume>更改其分配策略。 如果需要保持連續分配策略,另一種方法是將卷移動到具有足夠可用區域的磁碟區域(見[1])。

"grub-mkconfig"命令報告"unknown filesystem"錯誤[編輯 | 編輯原始碼]

請確保在生成grub.cfg前移除了快照卷。

本文或本節需要翻譯。要貢獻翻譯,請訪問簡體中文翻譯團隊

附註: 內容未翻譯(在 Talk:LVM# 中討論)

Thinly-provisioned root volume device times out[編輯 | 編輯原始碼]

With a large number of snapshots, thin_check runs for a long enough time so that waiting for the root device times out. To compensate, add the rootdelay=60 kernel boot parameter to your boot loader configuration. Or, make thin_check skip checking block mappings (see [2]) and regenerate the initramfs:

/etc/lvm/lvm.conf
thin_check_options = [ "-q", "--clear-needs-check-flag", "--skip-mappings" ]

Delay on shutdown[編輯 | 編輯原始碼]

If you use RAID, snapshots or thin provisioning and experience a delay on shutdown, make sure lvm2-monitor.service is started. See FS#50420.

更多資源[編輯 | 編輯原始碼]